PAMによるsshdのrootのみの許可とsudoグループのみの許可

■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
# account  required     pam_access.so
$ 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:
#