Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 15 章: Security / AAA を参照。
裏取りステータス: code-verified
実装裏取り済み(下記コード位置)。PASSW_HARDENING: sonic-host-services/scripts/hostcfgd + tests/hostcfgd/hostcfgd_passwh_test.py / sonic-utilities config/plugins/sonic-passwh_yang.py / sonic-yang-models/yang-models/sonic-passwh.yang で確認。
パスワード強化(password hardening / aging / complexity / history)¶
概要¶
ローカルユーザのパスワードに対して エイジング(強制更新)、複雑度要件、履歴禁止、ロックアウト を Linux 標準の PAM スタックを通じて適用する仕組み1。SONiC 側は CONFIG_DB の PASSW_HARDENING テーブルを単一の真実源として、hostcfgd が /etc/login.defs・/etc/pam.d/common-password・/etc/security/pwquality.conf 等を rendering する。
動作仕様¶
flowchart LR
CFG["CONFIG_DB\nPASSW_HARDENING|POLICIES"] --> HC[hostcfgd]
HC --> LD["/etc/login.defs"]
HC --> PAM["/etc/pam.d/common-password"]
HC --> PWQ["/etc/security/pwquality.conf"]
LD --> LOGIN["login / passwd / chpasswd"]
PAM --> LOGIN
PWQ --> LOGIN
主なポリシー項目1:
- age:
PASS_MAX_DAYS(最大有効期間)、PASS_WARN_AGE(警告日数)。期限切れで強制変更 - length:
minlenなどの最小長 - complexity: 大文字・小文字・数字・記号の最低数(
pwqualityのucredit / lcredit / dcredit / ocredit) - history:
pam_pwhistoryのremember=Nで過去パスワード再利用禁止 - lockout:
pam_tally2/pam_faillockで連続失敗時のロック(HLD 文脈による) - expiration policy: 既存ローカルユーザに対するマイグレーション(
chage適用方針)
設定例 (CONFIG_DB)¶
PASSW_HARDENING|POLICIES
state enabled
expiration 180 # days
expiration_warning 15
history_cnt 10
len_min 8
reject_user_passw_match true
lower_class true
upper_class true
digits_class true
special_class true
config passw-hardening policies state enabled 等の CLI で同等の操作ができる。
関連する CONFIG_DB¶
| Key | 説明 |
|---|---|
PASSW_HARDENING|POLICIES |
単一エントリ。state / expiration / history_cnt / 各 character class |
関連する CLI¶
| Command | 用途 |
|---|---|
config passw-hardening policies state {enabled,disabled} |
機能 on/off |
config passw-hardening policies expiration <days> |
エイジング |
config passw-hardening policies history-cnt <N> |
履歴禁止数 |
config passw-hardening policies len-min <N> |
最小長 |
config passw-hardening policies upper-class {true,false} |
大文字必須 |
show passw-hardening policies |
現行ポリシー表示 |
制限事項¶
- ローカルユーザのみ: TACACS+ / LDAP / RADIUS でリモート認証する場合、サーバ側のポリシーが優先されローカル hardening は無関係になる
- 既存ハッシュには遡及しない: complexity を強化しても既存パスワードハッシュの強度を改めるわけではない。再設定で初めて適用
- PAM スタックが上書きされる前提: 他機能(AAA 改善、SSH global config 等)が
/etc/pam.d/を編集する場合、hostcfgdの rendering 順序に依存
干渉する機能¶
- AAA improvements / TACACS / RADIUS / LDAP: PAM スタック上の他モジュールと共存する必要があり、編集順序に注意
- デフォルト資格情報管理(CA SB-327 等): 工場出荷時パスワード強制変更とポリシーの連動
- SSH global config / ssh-server hardening: SSH 経由ログインのロックアウト・bad-key 拒否との二重防御
トラブルシューティング¶
- ポリシーが反映されない →
hostcfgdのログと/etc/login.defs//etc/pam.d/common-passwordをdiffで確認 - パスワード変更が突然 reject される →
pwquality.confの各 class / minlen / dictionary を確認 - ロックアウト解除 →
pam_faillock --user <u> --reset等を root で実行(実装による)
コマンド例: Password hardening 確認¶
下記コマンドで関連する CONFIG_DB / APP_DB / STATE_DB と CLI 出力・syslog を 突き合わせ、HLD 記載の挙動と現在の挙動が一致しているか確認できる。
# password policy 設定と /etc/pam.d の現状を確認
show passwd-hardening policies
sudo cat /etc/pam.d/common-password
redis-cli -n 4 hgetall 'PASSW_HARDENING|POLICIES'
コマンド例: Password hardening 確認¶
下記コマンドで関連する CONFIG_DB / APP_DB / STATE_DB と CLI 出力・syslog を 突き合わせ、HLD 記載の挙動と現在の挙動が一致しているか確認できる。
# password policy 設定と /etc/pam.d の現状を確認
show passwd-hardening policies
sudo cat /etc/pam.d/common-password
redis-cli -n 4 hgetall 'PASSW_HARDENING|POLICIES'