こんにちは。SRE1課の古川(と)です。
先日、技術課題をやっているときに「公開鍵の置き場所も、ファイルの中身も正しいはずなのに秘密鍵でログインできない!」となり困ったので、原因と対処法をブログに残そうと思います。
前提
EC2インスタンス (Amazon Linux) のOSに kadai-user と test-user を作成し、それぞれのホームディレクトリに公開鍵を置きました。
その後、秘密鍵でログインできるかを確認したところ、test-userのみTera Termで「認証に失敗しました。再試行してください。」とエラーが出ました。
kadai-user・test-userともに、公開鍵が「正しい場所に置かれていること」「ファイルの中身に間違いがないこと」は確認済みの状態です。
鍵ファイルのパーミッション
「ファイルのパーミッションのせいかもしれない。」とのアドバイスをトレーナーにいただき、鍵ファイルが置かれている.sshディレクトリのパーミッションを確認してみるとこんな違いがありました。
kadai-userのパーミッション↓
drwxr-xr-x 2 kadai-user kadai-user 29 Mar 11 01:15 .ssh
test-userのパーミッション↓
drwxrwxr-x 2 test-user test-user 29 Mar 8 06:27 .ssh
test-userの.sshディレクトリのパーミッションが775となっており、グループにも書き込み権限が許可されている状態でした。
調べてみたところ、
鍵ファイルが置かれているディレクトリや鍵ファイルのパーミッションがユルユル(ユーザー以外にも書き込み権限が許可されている状態)だと、セキュリティの観点からログインが拒否されるということが分かりました!
エラーログを見てみる
実際にtest-userログイン失敗時のログを確認してみました!
[root@hogehoge ~]# tail /var/log/secure Mar 23 04:58:24 hogehoge sshd[4065]: Authentication refused: bad ownership or modes for directory /home/test-user/.ssh
/home/test-user/.sshディレクトリのパーミッションが良くないよと言われてますね。
対処法
以下コマンドでtest-userの.sshディレクトリのパーミッションを700に変更し、ユーザー以外には操作させないようにしましょう。
# chmod 700 /home/test-user/.ssh
以下コマンドを実行し、確認してみます。
# ls -al /home/test-user
パーミッションが正しく変更されています。
drwx------ 2 test-user test-user 29 Mar 8 06:27 .ssh
再度、秘密鍵でログインしてみたところ成功しました!
今回は.sshディレクトリのパーミッションが原因でしたが、それ以外のディレクトリ/ファイルのパーミッションが原因となることもあります。
ログインできない際は以下のディレクトリ/ファイルのパーミッションを確認してください。
- .sshディレクトリ
- authorized_keysファイル
参考資料:
kadai-user と test-userでパーミッションが異なった原因
kadai-user・test-userともに同じように作成した(はず)なのに、test-userの.sshディレクトリのみパーミッションがユルユルだった原因は、kadai-userとtest-user作成時のユーザーのumaskでした。
同じようにユーザーを作成したつもりでしたが、
- kadai-userはrootユーザーでadduserした。
- test-userはec2-userでadduserした。
という違いがあり、
rootユーザーのumask↓
[root@hogehoge ~]# umask 0022
ec2-userのumask↓
[ec2-user@hogehoge ~]$ umask 0002
これらumaskの設定値を反映していたため、ec2-userで作成したtest-userのみ.sshディレクトリのパーミッションがユルユルになっていました。
おわりに
umaskの値は大事!ということは知っていたものの、正直あまり意識していませんでした。
ディレクトリ/ファイルを作成するときはumaskの値を確認してから作成するという癖をつけたいと思います!
古川智絵 (執筆記事の一覧)
2020年新卒入社 技術課(SRE1課)に所属 好きな食べ物はみそ汁