インターネットに晒すサーバを立てるときはまずセキュリティ設定をしっかりやってからIPを振るべきですが、さくらのVPSではそういうわけにもいきません。
なので、借りて真っ先に設定するべきssh設定について、自分がやっていることをまとめておきます。
今回はデフォルトの CentOS5.5(x86_64) でのやり方です。
1.ログインする
VPSを起動したらまずログインしてください。
2.ユーザ作成
作業用のユーザを作成します。
# useradd myfinder
# passwd myfinder
# usermod -G wheel myfinder
あとで root になれるユーザを制限するために wheel に所属させておきます。
3.sshdの設定変更
パスワードでの認証をやめ、公開鍵認証でのログインに限定します。
# vi /etc/ssh/sshd_config
// no に設定
PermitRootLogin no
PasswordAuthentication no
UsePAM no
# /etc/init.d/sshd restart
※umqさんの指摘でUsePAMの所を追加しました。ありがとうございます。
この時点でコンソール以外からのログインが不可能になります。
4.ユーザの公開鍵を登録
作業用ユーザがリモートから入れるようにします。
ノーパスワードの設定はおすすめしません。
# su - myfinder
$ ssh-keygen -t rsa
$ vi ~/.ssh/authorized_keys
そのうち要ると思うので.sshを作っときます。
作成した authorized_keys に、作業するPCで作成した公開鍵を書いて、パーミッション設定を変えてください。
$ chmod 600 ~/.ssh/authorized_keys
ここまでやったら作業用PCからログインして確認してください。
5.sudoの設定
作業用ユーザで sudo ができるよう設定を変更します。
# visudo
// コメント外す
%wheel ALL=(ALL) ALL
wheel に所属しているユーザが sudo できるようにします。
さきほど作業用ユーザは wheel に所属しているので、 sudo できるようになっている筈です。
下記のような感じで root になれるか確認するのがいいと思います。
$ sudo su -
#
6.rootパスワードの無効化
この時点で
・リモートからのパスワード認証不能
・公開鍵に対応する秘密鍵を持ったクライアントからのログイン以外不能
という状況になってます。
現実的にはこれでほぼほぼ問題ないと思いますが、rootのパスワードを管理したくないので、自分はよくこれを無効化しています。
# passwd -l root
// とやると、/etc/shadowの内容が
root:!!hogehogehogehogehoge:xxxxx:0:99999:x:::
// という感じに無効化される
こうしておけば
・リモートからのパスワード認証不能
・公開鍵に対応する秘密鍵を持ったクライアントからのログイン以外不能
・コンソールからの root ログイン不能
・作業用ユーザが sudo しない限りは root になることは不能
という感じになります。
ここまでの作業で、ログインして root になれるユーザを制限し、 root になるための手段を一本道にすることができました。
※h2ondaさんの指摘でrootのパスワードを無効化する所を変更しました。ありがとうございます。
7.sudoのログを取る
更に、 sudo した内容を syslog に記録する設定をします。
ここまでやっておけば、誰がいつ sudo したかが記録に残ります。
# visudo
// 追記
# syslog facility
Defaults syslog=local3
# vi /etc/syslog.conf
// 追記
# sudo log
local3.* /var/log/sudo
※kamipoさんの指摘でvisudoの所を追加しました。ありがとうございます。
# touch /var/log/sudo
chmod 600 /var/log/sudo
facility を local3 にしているのは、後でbindを立てる予定だからです。
これで /var/log/sudo に sudo した結果が下記のように残ります。
# cat /var/log/sudo
Sep 23 20:01:41 hostname sudo: myfinder : TTY=pts/1 ; PWD=/home/myfinder ; USER=root ; COMMAND=/bin/su -
複数台の環境ならば、このログを外部のsyslogサーバに転送すれば更によいと思います。
このログはこのままだと太っていってしまうので、 /etc/logrotate.d/syslog のローテーションに加えておきましょう。
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron /var/log/sudo {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
8.おわりに
ここまでやれば、割と安心してリモートから作業したり、運用できるかなと。
ただ、6と7については、やりたい人/必要な人がやればいいと思います。
作業用ユーザのパスワード忘れちゃったりした場合、コンソールから再起動してシングルユーザモードで入ればよいでしょう。
では。
0 コメント:
コメントを投稿