sshdを固める
鍵を用意しただけでは、入口は閉じていない
前の回で deploy は鍵で入れるようになりました。ただし、この時点でパスワードでのログインも root での直接ログインも、まだ有効なままです。強い鍵を作っても、隣に緩い扉が開いていれば意味がありません。
塞ぐ場所は1つのファイルです。
vi /etc/ssh/sshd_config名前が紛らわしいので先に整理します。ssh_config はこちらから出ていくときの設定、sshd_config は向こうから入られるときの設定です。末尾の d はデーモンの d でした。締めるのは sshd_config のほうです。
締める行は2つ
PermitRootLogin no
PasswordAuthentication no1つ目は、root で直接入るのを禁じます。root は何でもできるうえ、名前が全世界で共通なので、真っ先に狙われます。まず deploy で入り、必要なときだけ権限を上げる。この形にしておけば、狙われる名前がひとつ減ります。
2つ目は、パスワードでのログインそのものを止めます。総当たりが通る余地が消えるので、効きがいちばん大きい1行です。これを入れる前に、鍵で入れることを必ず確かめておいてください。順番を逆にすると自分が入れなくなります。
既定のファイルでは、この2行が # で始まるコメントとして書かれていることがあります。その場合は # を外して値を書き換えます。コメントのまま値だけ直しても効きません。
反映の前に文法を見る
設定を書き換えたら、nginx のときと同じことをします。
sshd -t何も出なければ問題なしです。誤りがあれば行番号付きで教えてくれます。これを飛ばして再起動すると、sshd が立ち上がれず、そのサーバーに二度と入れなくなります。nginx なら最悪サイトが止まるだけですが、こちらは復旧する手段まで失います。手を抜けない一手です。
いま入っている接続は切れない
systemctl restart ssh再起動しても、すでに繋がっている接続は切れません。切り替わるのはこれから来る接続だけです。これを利用して、次の手順を守ります。
- いまの接続はそのまま開けておく
- 別の窓を新しく開いて、鍵で入れるか試す
- 入れたと確かめてから、最初の接続を閉じる
入れなくなっていた場合、最初の接続が生きていれば設定を戻せます。閉じてしまうと戻せません。締める作業では必ずこの順番を踏んでください。
いま効いている値を確かめる
ファイルに書いた内容と、実際に効いている値は別物です。書き間違いや、あとの行での上書きがあり得ます。sshd 自身に聞くのが確実です。
sshd -T | grep -i permitrootlogin
# permitrootlogin no-T は、すべての設定項目を解決した結果を並べて出す指定です。nginx の nginx -T と同じ発想で、思い込みではなく実際の値を見られます。
手を動かす
root での直接ログインとパスワードでのログインを止め、文法を確かめてから反映します。deploy が鍵で入れる状態が保たれていることも確かめます。