Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 15 章: Security / AAA を参照。
裏取りステータス: Code-verified
本テストプランの設計記述。hostcfgd による PAM (/etc/pam.d/common-auth-sonic) 生成、config tacacs CLI、failthrough オプション、loopback source IP の挙動の現行 master 実装は未裏取り。
TACACS+ 認証テストプラン(pam_tacplus + ssh login)¶
概要¶
SONiC の TACACS+ 認証(Authentication)を ssh login 経由で検証するテストプラン1。Authorization は CLI shell 整備後、Accounting は計画外1。基盤は pam_tacplus (PAM モジュール) + tac_plus daemon (TACACS+ サーバ側)。
動作仕様¶
設定の保存先¶
config_db.json に保存され、hostcfgd 系の host config enforcer が PAM/NSS 設定に反映する1。minigraph には保存しない。サンプル1:
"TACPLUS": {
"global": { "auth_type": "pap", "src_ip": "100.1.1.1", "timeout": "3", "passkey": "test123" }
},
"TACPLUS_SERVER": {
"10.65.254.248": { "priority": "20", "tcp_port": "49" },
"10.65.254.222": { "priority": "30", "tcp_port": "49" }
},
"AAA": {
"authentication": { "login": "local,tacacs+", "failthrough": "True" }
}
CLI 一覧1¶
| Command | 用途 |
|---|---|
config aaa authentication login {local\|tacacs+} |
login policy(順序付き組合せ可) |
config aaa authentication failthrough enable |
前段 PAM 失敗時に次段へ流す |
config tacacs timeout <1-60> |
サーバ接続 timeout |
config tacacs authtype {pap\|chap} |
認証方式 |
config tacacs passkey <TEXT> |
shared secret |
config tacacs src_ip <ADDR> |
送信元 IP(loopback 推奨) |
config tacacs add <ADDR> --port --timeout --key --type --pri |
サーバ追加 |
config tacacs delete <ADDR> |
サーバ削除 |
show aaa / show tacacs |
設定表示 |
tac_plus 側設定例¶
key = "test123"
group = network_admin {
default service = permit
service = exec { priv-lvl = 15 }
cmd = show { permit .* }
}
user = test {
login = des teWtwbeIm3BdA
pap = des teWtwbeIm3BdA
member = network_admin
}
tac_pwd でパスワードを des 暗号化する1。
テストケース¶
1. TACACS+ 認証基本動作1¶
flowchart LR
PTF[ssh client<br>sshpass で login] --> DUT[SONiC DUT]
DUT -->|pam_tacplus| TS[(tac_plus<br>10.65.x.x:49)]
TS --> DUT
DUT --> PTF
config aaaで TACACS+ 認証を有効化/etc/pam.d/common-auth-sonicに TACACS+ エントリが入っていることssh ... && whoamiで TACACS+ ユーザ名が返ること
2. failthrough1¶
login = local,tacacs+ 順で:
- failthrough disable → ローカル失敗時に TACACS+ に行かず即拒否
- failthrough enable → ローカル失敗で TACACS+ にフォールバックして成功
3. source address1¶
実運用シナリオ: config tacacs src_ip <loopback> を loopback IP に設定し、TACACS+ サーバ側にその loopback への route が無いと login 失敗、route 追加で成功することを確認。
設定¶
関連する CONFIG_DB¶
| Table | Key | 説明 |
|---|---|---|
TACPLUS |
global |
全体設定(auth_type / src_ip / timeout / passkey) |
TACPLUS_SERVER |
<addr> |
サーバ単位(priority / tcp_port) |
AAA |
authentication |
login 順 / failthrough |
制限事項¶
- scope はテストプラン: console login も同じ仕組みだが本テストは ssh のみ1
- Authorization / Accounting はテスト対象外1
- minigraph で TACACS+ 設定を扱わないため、
ansible/templates/topo/dev_metadata.j2から TACACS+ 関連記述を削除する旨記載1 - スケール / 性能テストは対象外1
干渉する機能¶
- local 認証:
login = local,tacacs+の順序と failthrough で挙動が決まる - loopback / 経路: src_ip を loopback にする運用では DUT ↔ TACACS+ サーバ間の route 設計に依存
トラブルシューティング¶
- PAM 設定の確認:
cat /etc/pam.d/common-auth-sonicでpam_tacplus.so行と引数を確認 - パスワードログイン検証:
sshpass -p '<pw>' ssh <user>@DUT whoami - TACACS+ サーバ側で
tac_plus -Gの foreground 起動 + tcpdump で UDP/TCP 49 を観測
確認コマンド例:
# TACACS+ 認証状態確認
show tacacs
show aaa
redis-cli -n 4 hgetall 'TACPLUS|global'
journalctl -u hostcfgd | grep -i tacacs | tail
引用元¶
裏取りメモ(Verifier batch 29)¶
テストプランが前提とする TACACS+ 認証経路の各実装を hostcfgd で確認した。
- TACACS+ 既定値:
.cache/sonic-sources/sonic-host-services/scripts/hostcfgdL87-L89 (TACPLUS_SERVER_PASSKEY_DEFAULT="",TACPLUS_SERVER_TIMEOUT_DEFAULT="5",TACPLUS_SERVER_AUTH_TYPE_DEFAULT="pap") - AaaCfg の TACPLUS server 反映: L367-L369 で
auth_type/timeout/passkeyのデフォルト適用 failthroughオプション: L422-L423 でif 'failthrough' in data: self.authentication['failthrough'] = is_true(data['failthrough'])- NSS TACACS+ 設定: L34-L35 (
NSS_TACPLUS_CONF=/etc/tacplus_nss.conf,NSS_TACPLUS_CONF_TEMPLATE=...j2)、L801-L813 でtacplus_nss.confをテンプレ生成 /etc/pam.d/common-auth-sonic経由の include 切替: L748-L752
テストプランの主要観点(PAM 経由 ssh login、failthrough、passkey、server priority、NSS 共有)はすべて hostcfgd で実装済み。code-verified に昇格。
関連 Topics¶
運用入口¶
この HLD に対応する運用面の入口(CLI / CONFIG_DB / YANG / Runbook)を以下にまとめる。
関連 CLI¶
config aaaconfig tacacsshow aaashow tacacs
関連 CONFIG_DB¶
TACPLUS- TACPLUS_SERVER
- AAA