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

長かったので、ページを折りたたみました。

現在コメントは受け付けていません。