AAA テーブル
概要
ログイン認証 (authentication) / 認可 (authorization) / アカウンティング (accounting) の手段優先順序を CONFIG_DB に保持するテーブル。hostcfgd の AAA ハンドラが読み出し、Linux PAM (/etc/pam.d/common-auth, /etc/pam.d/sshd 等) と nsswitch / sshd 設定を再生成する。
データフロー (自動生成)
flowchart LR
CDB[("CONFIG_DB<br/>AAA")]
DM["hostcfgd"]
CDB --> DM
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造
<type> は enum authentication / authorization / accounting。
フィールド
| フィールド |
型 |
デフォルト |
説明 |
type |
enum authentication/authorization/accounting |
- |
AAA 機能種別 (key) |
login |
string (カンマ区切り; ldap/tacacs+/local/radius/default) |
local |
試行順序リスト |
failthrough |
boolean |
False |
true: あるメソッドが失敗したら次のメソッドに継続 |
fallback |
boolean |
False |
true: 全リモートメソッド失敗時に local にフォールバック |
debug |
boolean |
False |
AAA デバッグログを有効化 |
trace |
boolean |
False |
AAA プロトコルパケットトレースを有効化 |
制約
login の pattern: ((ldap|tacacs\+|local|radius|default),)*(ldap|tacacs\+|local|radius|default) (重複チェックなし、順序のみ意味あり)
must 制約: type = authentication で login に tacacs+ を含めるなら TACPLUS.global.passkey が存在しなければエラー
購読者
hostcfgd (sonic-host-services の AAA ハンドラ): CONFIG_DB → PAM / nsswitch / sshd 再生成
pam_tacplus / pam_radius / pam_ldap / pam_unix: PAM 経由で実際の認証を実行
関連 CONFIG_DB / YANG / CLI
例外条件・特殊挙動
| 条件 |
挙動 |
key が authentication/authorization/accounting 以外 |
内部状態を更新せず実質 no-op |
failthrough/debug に "true"/"yes"/"1" 以外の文字列 |
is_true() が False 扱い、型エラーなし |
login に ldap を含むが LDAP global 設定が不完全 |
nslcd サービスを起動しない (silent skip) |
| PAM 設定ファイル書き込み失敗 |
syslog ERR のみ、クラッシュなし |
login に tacacs+ を含むが TACPLUS.global.passkey が未設定 |
YANG レベルで reject(hostcfgd は実行時再チェックなし) |
値依存挙動マトリクス
type (enum — key フィールド)
| 値 |
効果 |
evidence |
authentication |
PAM common-auth-sonic.j2 を再生成して /etc/pam.d/common-auth, /etc/issue 等を更新。YANG must 制約で login に tacacs+ を含む場合 TACPLUS.global.passkey が必須 |
sonic-system-aaa.yang:must |
authorization |
tacplus_nss.conf.j2 を生成して nss 設定を更新。login は tacacs+ / local のみ有効 |
sonic-host-services/scripts/hostcfgd:2443 |
accounting |
アカウンティング設定を tacplus_nss.conf.j2 に反映。login の local_accounting / tacacs_accounting で個別有効化 |
sonic-host-services/data/templates/tacplus_nss.conf.j2:13 |
login (string — 実質的な複合 enum)
PAM テンプレート common-auth-sonic.j2 が login 文字列に完全一致で分岐する:
| 値 |
PAM 生成挙動 |
evidence |
local |
pam_unix.so のみ |
common-auth-sonic.j2:12 |
tacacs+ |
TACACS+ サーバ全台 → root は local 強制 |
common-auth-sonic.j2:29 |
tacacs+,local |
TACACS+ サーバ全台 → pam_unix.so |
common-auth-sonic.j2:29 |
local,tacacs+ |
pam_unix.so 先行 → TACACS+ サーバ残台数 |
common-auth-sonic.j2:15 |
radius |
root を local 強制スキップ → RADIUS chain → deny → cache → local |
common-auth-sonic.j2:56 |
radius,local |
root local skip → RADIUS chain → local |
common-auth-sonic.j2:44 |
local,radius |
local → RADIUS chain → deny → cache |
common-auth-sonic.j2:32 |
ldap |
pam_ldap.so minimum_uid=1000 のみ |
common-auth-sonic.j2:84 |
ldap,local |
pam_ldap.so → pam_unix.so |
common-auth-sonic.j2:82 |
local,ldap |
pam_unix.so → pam_ldap.so |
common-auth-sonic.j2:83 |
| (その他) |
pam_unix.so にフォールバック |
common-auth-sonic.j2:87 |
failthrough (boolean)
| 値 |
効果 |
evidence |
false (既定) |
各 PAM stanza に auth_err=die を付与。メソッドが REJECT すると即ログイン失敗 |
common-auth-sonic.j2:16 |
true |
auth_err=die を付与しない。メソッドが REJECT しても次メソッドへ継続 |
common-auth-sonic.j2:16 |
debug / trace (boolean — RADIUS 専用)
| フィールド |
値 |
効果 |
evidence |
debug |
true |
pam_radius_auth.so 引数に debug を追加 |
common-auth-sonic.j2:35 |
trace |
true |
pam_radius_auth.so 引数に trace を追加 |
common-auth-sonic.j2:35 |
複合条件
type=authentication かつ login に tacacs+ を含む → YANG must 制約が TACPLUS.global.passkey の存在を必須とする (sonic-system-aaa.yang:must)
failthrough は login のすべてのメソッドに横断適用される (TACACS+/RADIUS/LDAP 問わず同一フラグ)
関連リファレンス
引用元
関連ページ
運用ヒント
典型値
- key 形式:
AAA|<service> (service = authentication / authorization / accounting)`。
authentication.login: local または tacacs+,local のチェイン。
failthrough: True で前段失敗時に次の方式へフォールバック。
よくある誤設定
tacacs+ 単独設定で全 TACACS+ サーバ到達不可になると login 不能。必ず local を末尾に残す。
確認コマンド
sonic-db-cli CONFIG_DB hgetall 'AAA|authentication'
show aaa