LinuCレベル2 システムのセキュリティ 問30
システムのセキュリティ/OpenSSH サーバーの設定と管理サーバーのuser1の ~/.ssh/authorized_keys に公開鍵を登録したが、公開鍵認証に失敗し、パスワードを求められてしまう。sshd_configは既定値のままで、サーバー側で確認した結果は次のとおりだった。対処として適切なものはどれか。 $ ls -ld /home/user1/.ssh /home/user1/.ssh/authorized_keys drwx------. 2 user1 user1 29 Sep 26 10:00 /home/user1/.ssh -rw-rw-rw-. 1 user1 user1 100 Sep 26 10:00 /home/user1/.ssh/authorized_keys
当サイトのオリジナル問題(LinuCレベル2の出題範囲「システムのセキュリティ」に対応。実際の試験問題ではありません)
- Asshd_configにPubkeyAuthentication yesを追記し、sshdを再起動して反映させる
- Bssh-keygen -A で足りない種類のホスト鍵を生成し、sshdを再起動して反映させる
- Cchmod 600 でauthorized_keysのパーミッションを直し、所有者以外が書き込めなくする
- Dsshd_configでPasswordAuthentication noにし、パスワード認証へ切り替わらなくする
正解:C
解説
sshdは既定で StrictModes yes になっており、ホームディレクトリや ~/.ssh、authorized_keys が所有者以外(特にその他のユーザー)から書き込める状態だと、そのファイルを使った公開鍵認証を拒否します。この例では authorized_keys が誰でも書き込める 666 になっているため、公開鍵認証が失敗してパスワード認証に進んでいます。chmod 600(または chmod go-w)で所有者以外の書き込み権を外せば解決します。サーバーのログには「bad ownership or modes」のようなメッセージが記録されるので、原因の切り分けに役立ちます。
選択肢ごとの解説
- A誤り。PubkeyAuthentication の既定値は yes なので、追記しても状況は変わりません。
- B誤り。ssh-keygen -A は存在しない種類のホスト鍵を生成するもので、ホスト鍵はサーバーの正当性をクライアントが確かめるための鍵です。利用者の公開鍵認証の失敗とは関係がありません。
- C正しい。authorized_keys を所有者以外が書き込めないパーミッションにすれば、sshdの検査を通り公開鍵認証が使えるようになります。
- D誤り。パスワード認証を無効にしても、公開鍵認証が拒否される原因は解消されず、ログインできなくなるだけです。