転載・引用について

ユーザ用ツール

サイト用ツール


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は以下の条件のうち一つでも満たすと、上記エラーを吐く
      1. 他人に書き換えられる可能性のあるDirectoryに設置されている(/tmpとかはやばい)
      2. Ownerがrootではない
      3. Owner以外が書き換えることができる(g+wとかo+wだとまずい)
      4. 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しているので、ある程度はこの手法を利用しても安全性を確保できそうだ
  • 意外と問題の原因が分かりにくいので、追いかけるのが大変
  • 俺はエスパーじゃないので、何をどうしたいのか説明してくれ
このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
tweet/2021/0108_01.txt · 最終更新: 2021/01/08 16:14 by seirios

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki