概要
利用者をグループごとに管理していると,「このグループのメンバにはこのサーバにsshログインでいないようにしたい」ということがあると思います.僕の研究室では「サーバ管理者」「研究室内の一般ユーザメンバ」「卒業生」というグループ分けでアカウントを管理していて,新たに卒業される先輩は「卒業生」グループに配属しなおし,このグループのメンバーははサーバにログインできないようにしたい,というようなことがあります.
これを実現するためには次の三つのステップを踏みます.
- (必要であれば)ログインを制限したいメンバーのグループを作成する.
- メンバーのグループを変更する.
- サーバのssh設定で特定のグループをログイン禁止にする.
手順1:ログインを制限したいメンバーのグループを作成する.
例として,'graduated'グループを作成して,このグループのログインを禁止するとします.まずグループを作成するldapのスクリプトを作成し,次にldapaddコマンドでこのスクリプトを実行します.
dn: cn=graduated,ou=groups,dc=XXX-lab
gidNumber: 503
cn: graduated
objectClass: posixGroup
objectClass: top
ldapadd -x -D cn=admin,dc=XXX-lab -f add_group.ldif
手順2:メンバーのグループを変更する.
手順1と同様に,グループを変更するldapのスクリプトを作成し,ldapmodifyコマンドでこのスクリプトを実行します.その後,認証に関わるサービスであるnscdをリスタートしておきます.
dn: uid=user0001,ou=users,dc=XXX-lab
changetype: modify
replace: gidNumber
gidNumber: 503
ldapmodify -D cn=admin,dc=XXX-lab -f modify_user_group.ldif; sudo service nscd restart
手順3:サーバのssh設定を変更する
最後に,クラスタを構成する全サーバの/etc/ssh/sshd_configを書き換えます.
# 最終行に追加
DenyGroups graduated
実はこの手順3,/etc/ldap.confを次のように設定するように紹介されることがあるのですが,sshの鍵認証を~/.ssh/authorized_keysファイルで管理していると,なぜか鍵認証ではログインが通っちゃうので,僕はsshの設定を変更しました.
ダメだったパターン↓
# gidNumber=501と502はログイン許可したい.
pam_filter &(objectClass=posixaccount)(|(gidNumber=5001)(gidNumber=502))