shuzo-kino.hateblo.jp
のシリーズ第三弾。
今回は秘密鍵を入れたマシン以外で入れないようにします。
これで実害を喰らう可能性は相当低くなりますね。
実際のところ
以降、IPは160.16.xxx.xxx、ユーザはubuntuであるとします。
まずはログインできるかお試し。
ここは特に問題ないはず。
local$ ssh ubuntu@160.16.xxx.xxx ubuntu@160.16.xxx.xxx's password: Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-62-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage SAKURA Internet [Virtual Private Server SERVICE] Last login: Thu Aug 17 23:32:09 2017 remote$
秘密鍵を送り込む
ローカルPCから、scpコマンドで公開鍵を送り込みます。
".ssh"下のid_rsa.pubを使ってます。
ない人はググって作って下さい(投げやり
local$ scp ~/.ssh/id_rsa.pub ubuntu@160.16.xxx.xxx:~/ ubuntu@160.16.xxx.xxx's password: id_rsa.pub 100% 426 8.4KB/s 00:00
リモート環境にログインし、
$ mkdir .ssh remote:~$ chmod 700 .ssh/ remote:~$ cat id_rsa.pub >> .ssh/authorized_keys remote:~$ chmod 600 .ssh/authorized_keys remote:~$ ls -la .ssh/ total 12 drwx------ 2 ubuntu ubuntu 4096 Aug 17 23:37 . drwxr-xr-x 4 ubuntu ubuntu 4096 Aug 17 23:37 .. -rw------- 1 ubuntu ubuntu 426 Aug 17 23:37 authorized_keys remote:~$ cat .ssh/authorized_keys ssh-rsa A...r shuzo_kino@local
ログアウトし、ローカルマシンから再度ログインしてみます。
$ logout Connection to 160.16.xxx.xxx closed. $ ssh ubuntu@160.16.xxx.xxx Enter passphrase for key '/Users/shuzo_kino/.ssh/id_rsa': Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-62-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage SAKURA Internet [Virtual Private Server SERVICE] Last login: Thu Aug 17 23:37:00 2017 from yyy.yyy.yyy.yyy ubuntu@tk2-215-17048:~$
設定ファイルを書き換える
無事にパスワード付きでログインできる状態を確立したら、
その後は秘密鍵のみでログインするように設定しなおします。
設定ファイルなので管理者権限で入ります。
$ sudo -s [sudo] password for ubuntu: root:~#
ssh設定ファイルのディレクトリへ行き、sshd_configを弄ります。
エディタは好みで。
私はnanoをつかいました。
root:~# cd /etc/ssh/ root:/etc/ssh# cp -p sshd_config sshd_config.bak root:/etc/ssh# nano sshd_config
差分はこんな感じ。
上から順に
- ルートでのログインを可能にするか
- パスワード認証によるログインを可能にするか
- PAM*1認証を有効にするか
一番最後のは認証周りとアプリケーションを分離するのに有効なAPIらしいのですが、
私はテンで分からないので無効。
root:/etc/ssh# diff sshd_config sshd_config.bak 28c28 < PermitRootLogin no --- > PermitRootLogin prohibit-password 52c52 < PasswordAuthentication no --- > PasswordAuthentication yes 88c88 < UsePAM no --- > UsePAM yes
終わったら、sshのリスタート。
root:/etc/ssh# service ssh restart
【蛇足】OpenSSH 7.0系から変わったこと
参考にしていた書籍はUbuntu14系だったため、OpenSSH自体も少し以前のものでした。
2015年に登場したOpenSSH 7.0ではPermitRootLoginについて、少し変更が入っています。
mag.osdn.jp
「PermitRootLogin」オプションについてデフォルト値が従来の「yes」から「prohibit-password」に変更されたほか、新たな設定値として「prohibit-password」を指定できるようになった。さらに、PermitRootLoginの値が「without-password」および「prohibit-password」に設定されていた場合、すべてのインタラクティブな認証を禁止し、公開鍵もしくはホストベース、GSSAPIによる認証のみが有効になるよう変更された。
今回のように、横からの攻撃から防御したい場合これまで通りnoで良いかと。
*1:Pluggable Authentication Module