コンテンツにスキップ

Topics で読み物として読む

この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 15 章: Security / AAA を参照。

裏取りステータス: code-verified

sonic-buildimage/rules/configCHANGE_DEFAULT_PASSWORD ?= n のオプション、build_debian.sh[[ "$CHANGE_DEFAULT_PASSWORD" == "y" ]] 分岐と password_expire="$( ... && echo true || echo false )" の export 処理を確認。Makefile.work / slave.mk でも flag を伝搬。HLD で要求された build flag の sonic-buildimage 取り込みは master で確認できた。

既定パスワードの初回ログイン強制変更(California SB-327 準拠)

概要

California SB-327 は IoT 機器の既定パスワード使用を制限する州法であり、初回ログイン時にユーザに強制でパスワード変更させる ことが代表的な準拠手段である1。本 HLD はこれを SONiC OS で実装する設計を定める。

要件1:

  • 初回ログイン時に既定パスワードの変更を強制
  • 複数の既定ユーザに対応
  • イメージ更新後 にも再度強制
  • Password Hardening 機能と独立に動作(aging を干渉させない)
  • 対象は login shell が /bin/bash または /bin/sh のユーザ のみ

動作仕様

利用する Linux 標準ツール

DB / CLI / SAI 変更なし。Linux 既存機構 で実装する1:

ツール 役割
chage パスワード aging。-d 0last password change を 0 化 = 強制 expired
pam_unix_account.so login 時に password / account の expire を検査し change を要求

Build flag

ビルド時 flag で機能 on/off1:

CHANGE_DEFAULT_PASSWORD=true make target/sonic.bin

default は disable1。runtime にこの flag を見て動作分岐する。

1st boot フロー

sequenceDiagram
    participant Inst as ONIE / sonic-installer
    participant Boot as 1st boot
    participant RC as /etc/rc.local
    participant CHA as chage
    participant U as user via SSH
    participant PAM as pam_unix_account.so
    Inst->>Boot: image install / upgrade
    Boot->>RC: 起動
    RC->>RC: grep /etc/passwd で対象ユーザ列挙<br/>(login shell = /bin/bash or /bin/sh)
    loop each default user
        RC->>CHA: chage -d 0 <user>
    end
    U->>PAM: ssh login
    PAM-->>U: "Your password has expired"<br/>パスワード変更を要求
    U->>U: 新パスワード入力
    PAM->>PAM: 更新成功 → 強制 logout
    U->>U: 新パスワードで再 login

実装ポイント1:

  • 1st boot 検知は /etc/rc.local 上で行う(specific marker file 等で判定する想定)
  • 対象ユーザは /etc/passwd を grep して login shell が /bin/bash / /bin/sh のもの のみ
  • 各ユーザに chage -d 0 <user> を発行
  • 次回 SSH login 時に pam_unix_account.so が expired を検知し change を要求
  • 変更後はユーザが 強制 logout され、新パスワードで再 login

password hardening との独立性

password hardening (passw_hardening 機能) には aging 期間 があるが、本機能はそれに 干渉しない1chage-d 0 は last_change を 0 化して即時 expire を起こすだけで、最大 age(-M)を変えないため。

upgrade フロー

sonic-installer で新イメージをインストールすると 1st boot 扱い になり、再度パスワード変更が強制される1

warm / fast boot

機能は トラフィックに影響を与えず 、warm/fast boot 後にも triggered され得る1

設定

CONFIG_DB / CLI / YANG / SAI

いずれも変更なし1。DB との対話を持たない設計。

設定例

通常運用は不要。SSH login 時にプロンプトで操作する例1:

$ ssh admin@sonic-switch
admin@sonic-switch's password:
You are required to change your password immediately (administrator enforced).
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for admin.
Current password: ****
New password:     ****
Retype new password: ****
passwd: password updated successfully
Connection to sonic-switch closed.

$ ssh admin@sonic-switch     # 新パスワードで再 login

ビルド時に有効化:

CHANGE_DEFAULT_PASSWORD=true make target/sonic.bin

制限事項

  • Remote AAA (LDAP / RADIUS / TACACS+) では動作しない1。リモート認証はカスタマー責務
  • build flag が必須。runtime に有効化する CLI / DB は無い
  • 機能は Linux native ツール (chage + pam_unix_account.so) に依拠。これらの挙動が変わると同期が必要
  • /etc/rc.local の 1st boot 検知ロジックの堅牢性は HLD では明示されていない
  • ユーザ unit test は login と 1st boot を直接カバーしない(system test に依存)1
  • パスワード変更後に 強制 logout されるユーザ体験上の制約1

干渉する機能

  • 既存の passw_hardening 機能: aging とは独立。両機能を併用しても干渉しない設計
  • /etc/rc.local: 1st boot 処理の置き場
  • PAM stack: pam_unix_account.so の挙動に依存
  • SSH / login shell: ログイン経路に依存
  • sonic-installer (image upgrade): 1st boot 再 trigger に関与

トラブルシューティング

  • 初回 login で expire が起きない → CHANGE_DEFAULT_PASSWORD=true でビルドされたか確認、chage -l <user>Last password change: never 等になっているか確認
  • LDAP user で動かない → 仕様通り(remote AAA 非対応)
  • 強制 logout 後ループ → password hardening 側の policy(最低長 / 複雑度)にひっかかっているか syslog を確認
  • upgrade 後に再強制されない → 1st boot marker (e.g. /host/.first_boot 相当) の有無、/etc/rc.local の処理ロジックを確認

コマンド例: デフォルト認証情報強制変更確認

下記コマンドで関連する CONFIG_DB / APP_DB / STATE_DB と CLI 出力・syslog を 突き合わせ、HLD 記載の挙動と現在の挙動が一致しているか確認できる。

# 初期 admin パスワード変更を強制するフラグ
redis-cli -n 4 hgetall 'PASSW_HARDENING|POLICIES'
sudo chage -l admin

コマンド例: デフォルト認証情報強制変更確認

下記コマンドで関連する CONFIG_DB / APP_DB / STATE_DB と CLI 出力・syslog を 突き合わせ、HLD 記載の挙動と現在の挙動が一致しているか確認できる。

# 初期 admin パスワード変更を強制するフラグ
redis-cli -n 4 hgetall 'PASSW_HARDENING|POLICIES'
sudo chage -l admin

引用元

関連 Topics


  1. sonic-net/SONiC doc/California-SB237/California-SB237.md @ 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06