CentOS 4.5 で確認しました。
LDAPにユーザとパスワードを問い合わせてSSHログイン可能なサーバの構築方法を説明します。
また、PAMのアクセス制御機構を使い、サーバ上でsuしたりsshできるユーザを制限します。
説明の便宜上LDAP外にsshというユーザもつくりますが、必須ではありません。
# useradd -g wheel ssh # passwd ssh # id ssh uid=500(ssh) gid=10(wheel) 所属グループ=10(wheel)
LDAPにエントリを用意する
LDAPにエントリを登録するためのldifファイルを用意します。
やり方は色々ありますが、手作業で妥当なスキーマを書くのは手間がかかるので
smbldap-tools付属のmigrationツールを使うことにします。
使い方はweb上にたくさん情報があるので書きません。
たとえばhttp://fedorasrv.com/openldap.shtmlを参考にsamba関連設定をスキップすれば達成できます。
既存エントリの修正ならLDAP AdminなどのLDAPクライアントソフトが便利です。
migrationツールでldifファイルが得られたら以下の編集をします。
サーバでsuやsshさせても良いユーザをadministratorグループに所属させます。
wheelグループと同じgidを、administratorグループでも宣言します。
dn: cn=administrator,ou=Group,dc=kurusugawa,dc=jp objectClass: posixGroup objectClass: top cn: administrator userPassword:: ********** gidNumber: 10 structuralObjectClass: posixGroup entryUUID: ********************************* creatorsName: cn=Manager,dc=kurusugawa,dc=jp createTimestamp: 20070720084523Z entryCSN: 20070720084523Z#00000b#00#000000 modifiersName: cn=Manager,dc=kurusugawa,dc=jp modifyTimestamp: 20070720084523Z
migrationツールはユーザのパスワードをmigrateしてくれません。
この状態では認証に失敗します。
dn: uid=mizuno,ou=People,dc=kurusugawa,dc=jp uid: mizuno (省略) userPassword: {crypt}x (省略)
userPassword属性にはslappasswdコマンドで得られるハッシュ値を使います。
# slappasswd New password: Re-enter new password: {SSHA}**********************************
migrationツールで得られるldifファイルのuserPassword属性にコピペします。
userPassword: {SSHA}**********************************
最終的にldifファイルには次のエントリが存在するようにします。
# suやsshできるユーザ dn: uid=mizuno,ou=People,dc=kurusugawa,dc=jp uid: mizuno cn: mizuno objectClass: account objectClass: posixAccount objectClass: top userPassword: {SSHA}************************** loginShell: /bin/bash uidNumber: 505 gidNumber: 10 homeDirectory: /home/mizuno # suやsshできないユーザ dn: uid=hiromi,ou=People,dc=kurusugawa,dc=jp uid: samba cn: Uehara Hiromi objectClass: account objectClass: posixAccount objectClass: top userPassword: {SSHA}************************** loginShell: /bin/bash uidNumber: 506 gidNumber: 504 homeDirectory: /home/hiromi
ldifファイルの編集が完了したら、LDAPへ投入します。
nsswitchの変更
ログイン時にローカル(/etc/passwdなど)に該当するユーザがいない場合は
LDAPを参照するように設定します。
# authconfig ユーザ情報 の LDAPを使用 認証 の MD5パスワードを使用 認証 の シャドウパスワードを使用 認証 の LDAP認証を使用 にチェックをいれます。
TLSを使用 にはチェックをいれず サーバー には LDAPサーバのホスト名 or IPアドレス ベースdn には LDAPサーバの/etc/openldap/slapd.conf の suffixディレクティブの内容を入力します。 サーバー:myldapserver ベースdn:dc=kurusugawa,dc=jp
ローカルとLDAPサーバ両方のユーザ情報が取得できることを確認します。
# id ssh uid=500(ssh) gid=10(wheel) 所属グループ=10(wheel) # id mizuno uid=505(mizuno) gid=10(wheel) 所属グループ=10(wheel),500(kurusugawa) # id hiromi uid=506(hiromi) gid=504(hiromi) 所属グループ=504(hiromi)
rootへの権限昇格を制限
三人ともsuでrootになれることを確認します。
# su - ssh $ whoami ssh $ su - # whoami root # su - mizuno 以下同様 # su - hiromi 以下同様
PAMを使いhiromiのsuコマンドでのroot権限取得を制限します。
/etc/pam.d/su で
# コメントを外す auth required /lib/security/$ISA/pam_wheel.so use_uid
確認してみます。
# su - hiromi $ whoami hiromi # su - Password: su: パスワードが違います
suされるユーザを制限
/etc/pam.d/su に
# 最終行に以下を追加 account required pam_access.so
/etc/security/access.conf の最終行に以下を追加
-:ALL EXCEPT root wheel:ALL
確認してみます。
# su - hiromi su: パスワードが違います
sshログインを制限
SSHログインできることを確認します。
# ssh ssh@localhost ssh@localhost's password: Last login: Fri Jul 20 14:00:08 2007 from localhost.localdomain # ssh mizuno@localhost 以下同様 # ssh hiromi@localhost 以下同様
PAMを使いhiromiのSSHログインを制限します。
/etc/pam.d/sshd の最終行に以下を追加
account required pam_access.so
同様に/etc/security/access.confを参照しているので、/etc/security/access.confは変更しません。
確認してみます。
# ssh hiromi@localhost hiromi@localhost's password: Permission denied, please try again.
あとはsudoも制限しないといけない気がする。
1件のコメント
squld · 2007-07-26 11:07
長かったので、ページを折りたたみました。
現在コメントは受け付けていません。