■debian Wheezy/Squeeze共に。
■PAMのログインユーザをrootに制限する。
$ sudo touch /etc/nologin
[sudo] password for labunix:
$ ssh localhost
password:
Connection closed by 127.0.0.1
■「pam_nologin」モジュールと同モジュールが参照する「/etc/nologin」の確認。
$ ls /lib/security/ | grep nologin
pam_nologin.so
$ ls /etc/nologin
ls: cannot access /etc/nologin: そのようなファイルやディレクトリはありません
■「/etc/nologin」で失敗時に処理を中止する(requisite)設定を確認。
$ grep "pam_nologin" /etc/pam.d/login
auth requisite pam_nologin.so
■ログイン失敗時にメッセージを表示する。
$ echo "Access Denied" | sudo tee /etc/nologin > /dev/null
$ ssh localhost
password:
Access Denied
Connection closed by 127.0.0.1
$ ssh root@localhost
password:
■rootのみのログインを解除する。
$ sudo rm -f /etc/nologin
$ ssh localhost
password:
$
■sudoグループ以外のユーザのログインを拒否
$ sudo grep UsePAM /etc/ssh/sshd_config
UsePAM yes
$ sudo grep pam_access /etc/pam.d/sshd
$ sudo grep -v "^#" /etc/security/access.conf
■まずはsudoグループを除くユーザの拒否
$ echo '-:ALL EXCEPT sudo :ALL' | sudo tee -a /etc/security/access.conf > /dev/null
■sshdがpam_accessを読み込む。
$ sed s/"# \(account required pam_access.so\)"/"\1"/ /etc/pam.d/sshd | grep pam_access
account required pam_access.so
$ sudo sed -i s/"# \(account required pam_access.so\)"/"\1"/ /etc/pam.d/sshd
■読み込んだPAMを使う(デフォルト)
$ sudo grep UsePAM /etc/ssh/sshd_config
UsePAM yes
■sshdの設定の反映とログインチェック
$ sudo /etc/init.d/ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.
$ id toor
uid=1001(toor) gid=1001(toor) groups=1001(toor)
$ ssh toor@localhost
password:
Connection closed by ::1
$ id labunix | sed s/","/"\n"/g | grep sudo
27(sudo)
$ ssh labunix@localhost
password:
No mail.
$
■「-:ALL EXCEPT sudo :ALL」のまま、rootでログインしたいならば、
明示的にsudoグループに追加する必要がある。
$ ssh root@localhost
password:
Connection closed by ::1
$ sudo usermod -a -G sudo root
$ id root
uid=0(root) gid=0(root) groups=0(root),27(sudo)
$ ssh root@localhost
password:
$ id root
uid=0(root) gid=0(root) groups=0(root),27(sudo)
$ sudo usermod -G root root
$ id root
uid=0(root) gid=0(root) groups=0(root)
■スペース区切りでrootユーザを追加して上げると、
デフォルトのrootユーザのままログインできるようになる。
※PAM認証の設定は済んでいるので、sshdの再起動は不要。
$ sudo sed -i s/"-:ALL EXCEPT sudo :ALL"/"-:ALL EXCEPT root sudo :ALL"/ /etc/security/access.conf
$ ssh root@localhost
password: