tweet:2021:0108_01
sshdでPublickeyをauthorized_keys以外から持ってくる
ちょっと某所で sshd でのPublickey Authentication時のPublickeyを~/.ssh/authorized_keys以外から持ってくる設定について聞かれたので、ちょっと調べてみた。
問題
AuthorizedKeysCommand
に公開鍵を引っ張ってくるscriptを指定したんだけど、認証に失敗する- sshd_configに以下の記述
AuthorizedKeysCommand /tmp/pubkey.sh
AuthorizedKeysCommandUser hogehoge
- pubkey.shは以下の通り
- pubkey.sh
#!/bin/bash -e echo "ssh-rsa AAAA........."
- ssh -v の結果
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
解決
- sshdのlogを見ると、
error: Unsafe AuthorizedKeysCommand “/tmp/pubkey.sh”: bad ownership or modes for file /tmp/pubkey.sh
が/var/log/auth.log
に出力されていた - 色々調べてみると、以下が判明
- sshdは以下の条件のうち一つでも満たすと、上記エラーを吐く
- 他人に書き換えられる可能性のあるDirectoryに設置されている(/tmpとかはやばい)
- Ownerがrootではない
- Owner以外が書き換えることができる(g+wとかo+wだとまずい)
- AuthorizedKeysCommandUser に指定されたUser Accountで実行できない
- というわけで、以下のように修正
- Scriptを
/usr/local/bin/pubkey.sh
に設置 AuthorizedKeysCommand /usr/local/bin/pubkey.sh
としてsshd_configに設定chmod 750 /usr/local/bin/pubkey.sh
を実行chown root:nobody /usr/local/bin/pubkey.sh
を実行- sshdを再起動
結論
- この手法を使えば、LDAPでsshの公開鍵を引っ張ってくることができそうだ
- OpenSSHはSecurity的に相当細かくCheckしているので、ある程度はこの手法を利用しても安全性を確保できそうだ
- 意外と問題の原因が分かりにくいので、追いかけるのが大変
- 俺はエスパーじゃないので、何をどうしたいのか説明してくれ
tweet/2021/0108_01.txt · 最終更新: 2021/01/08 16:14 by seirios