SAMBA with LDAP (LDAP の構築)
〜 LDAP の設置から NSS の設定まで 〜
(地球の映画スターを登録)
2005-05-10 作成 福島
今回は、LDAP というヒジョ〜に取っ付きにくいシステムのため rpm で構築します。
(コンパイル/インストールよりも、設定を主眼にしました)
ここでは、LDAP のインストールからアカウントの登録までを扱います。
「登録」までなので、「利用」はまだできません。「利用」は第 2 部以降で扱います。
よくある LDAP の説明では、登録する組織として「会社」を例にしていますが、ここではもっと普遍的な組織として
・「太陽系」
・「地球」
・「人」
という階層と、
・グループ「映画スター」
を例にします。
説明の中で posixAccount, posixGroup という属性を使用していますが、これは Unix でのアカウントとグループに割り当てられている組み込み属性です。
これがシェルユーザの認証問い合わせに使われた場合、Unix のユーザ ID と所属グループとして扱われます。
OpenLDAP は slapd という名前のデーモン (ポートは 389) で動作します。
slapd の設定ファイルは /etc/openldap/slapd.conf です。
LDAP 2.1 のインストール
既に OpenLDAP がインストールされていたら、-i ではなく -U でインストールします。
# rpm -i openldap-2.1.29-1.i386.rpm
# rpm -i openldap-clients-2.1.29-1.i386.rpm
# rpm -i openldap-devel-2.1.29-1.i386.rpm
# rpm -i openldap-servers-2.1.29-1.i386.rpm
RedHat はこちら
# rpm -i openldap-2.1.22-0.rh9.5.i386.rpm
# rpm -i openldap-clients-2.1.22-0.rh9.5.i386.rpm
# rpm -i openldap-devel-2.1.22-0.rh9.5.i386.rpm
# rpm -i openldap-servers-2.1.22-0.rh9.5.i386.rpm
# vi /etc/openldap/slapd.conf
ldap サーバの設定ファイルに以下を加える
ここでは、太陽系系 (dc=solar) と、その管理者 (cn=manager,dc=solar) を定義しています
secret はパスワードです。
access to *
by self write
by users read
by anonymous auth
database ldbm
suffix "dc=solar"
rootdn "cn=manager,dc=solar"
rootpw secret
directory /var/lib/ldap/solar
|
データ格納用ディレクトリを作成 (この中に *.dbb が作成されます)
# mkdir -p /var/lib/ldap/solar
# chmod 700 /var/lib/ldap/solar
# chown ldap:ldap /var/lib/ldap/solar
初期データの登録
例として、「太陽系の地球という組織に 2 人の人間がいて、2 人とも映画スター」というデータを作ります。
LDAP の模範にしては少々変則的なツリーですが、Unix のアカウント情報に合わせるため、このような形にしています。
太陽系 (solar: dcObject)
|
+-- 地球 (earth: organization)
|
+-- マリリンモンロー (marilyn: posixAcount)
|
+-- アランドロン (alain: posixAcount)
|
+-- 映画スター (moviestars: posixGroup)
|
+-- マリリンモンロー, アランドロン
LDAP BrowserEditor で見た図 (クリックすると拡大します)
※ LDAP BrowserEditor 2.8.2b2 の起動は、付属の lbe.sh (lbe.bat) を実行します。
ここでは、slapadd を使用しています。
root で初期データを作成するのでファイル属性が root:root になってしまい、ldap から読み取ることができないので所有者を ldap:ldap にしています。
LDAP サーバ (ポート 389) 経由なら所有者が ldap になりますが、最初の登録 (自分自身の登録) だけは slapadd + chown が必要です。
1. 太陽系自身 (dc=solar) を dcObject として追加
# /usr/sbin/slapadd -b 'dc=solar' << EOF
dn: dc=solar
dc: solar
objectClass: dcObject
objectClass: organization
o: solar
EOF
# chown ldap:ldap /var/lib/ldap/solar/*.dbb
2. 太陽系に地球 (o=earth,dc=solar) を organization として追加
# /usr/sbin/slapadd -b 'dc=solar' << EOF
dn: o=earth,dc=solar
objectClass: top
objectClass: organization
o: earth
EOF
# chown ldap:ldap /var/lib/ldap/solar/*.dbb
3. 地球にマリリンモンロー (uid=marilyn,o=earth,dc=solar) を posixAccount として追加
(cn: は、あとで GECOS として表示されます)
# /usr/sbin/slapadd -b 'dc=solar' << EOF
dn: uid=marilyn,o=earth,dc=solar
uid: marilyn
sn: Marilyn Monroe
cn: Marilyn Monroe
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/sh
uidNumber: 700
gidNumber: 700
homeDirectory: /home/marilyn
EOF
# chown ldap:ldap /var/lib/ldap/solar/*.dbb
4. 地球にアランドロン (uid=alain,o=earth,dc=solar) を posixAccount として追加
(cn: は、あとで GECOS として表示されます)
# /usr/sbin/slapadd -b 'dc=solar' << EOF
dn: uid=alain,o=earth,dc=solar
uid: alain
sn: Alain Delon
cn: Alain Delon
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/sh
uidNumber: 701
gidNumber: 701
homeDirectory: /home/alain
EOF
# chown ldap:ldap /var/lib/ldap/solar/*.dbb
5. 地球に映画スターグループ (gid=moviestars,o=earth,dc=solar) を posixGroup として追加
(メンバーはマリリンモンローとアランドロン)
# /usr/sbin/slapadd -b 'dc=solar' << EOF
dn: cn=moviestars,o=earth,dc=solar
objectClass: top
objectClass: posixGroup
structuralObjectClass: posixGroup
cn: moviestars
gidNumber: 600
memberUid: marilyn
memberUid: alain
EOF
# chown ldap:ldap /var/lib/ldap/solar/*.dbb
# vi /etc/rc.d/init.d/ldap
chkconfig を調整する
# /sbin/chkconfig --add ldap
# /etc/rc.d/init.d/ldap start
NSS の設定
NSS (Name Switch Service) を LDAP 対応にするため、ldap.conf と nsswitch.conf を記述します
/etc/ldap.conf の書き方には 2 通りあります (NSS はこのファイルを見て LDAP に接続します)
binddn, bindpw を指定する書き方
host 127.0.0.1
port 389
base dc=solar
ssl no
uri ldap://127.0.0.1/
binddn cn=manager,dc=solar
bindpw secret
|
rootbinddn, /etc/ldap.secret を指定する書き方
host 127.0.0.1
port 389
base dc=solar
ssl no
uri ldap://127.0.0.1/
rootbinddn cn=manager,dc=solar
|
/etc/ldap.secret (600)
nsswitch.conf の変更
ローカルで解決できないものを外部を参照させる指定です
/etc/nsswitch.conf
passwd: files ldap
shadow: files ldap
group: files ldap
hosts: files dns
bootparams: nisplus [NOTFOUND=return] files
ethers: files
netmasks: files
networks: files
protocols: files ldap
rpc: files
services: files ldap
netgroup: files ldap
publickey: nisplus
automount: files ldap
aliases: files nisplus
|
確認
アカウントが参照可能か確認します
(ログイン等は、まだできません)
$ getent passwd
...
marilyn:x:700:700:Marilyn.Monroe:/home/marilyn:/bin/sh
alain:x:701:701:Alain Delon:/home/alain:/bin/sh
|
$ getent shadow
...
marilyn:x:::::::0
alain:x:::::::0
|
$ getent group
...
moviestars:x:600:marilyn,alain
|
LDAP 管理ツール
・ローカルメンテナンスの場合
サーバの起動/停止は無関係です。パスワードは不使用です。(バージョン 2.1 未満の slapd は停止が必要)
$ su slapd.conf を読むため root になる
# /usr/sbin/slapcat -f /etc/openldap/slapd.conf -b 'dc=solar' > YYYYMMDD.ldif データベースをバックアップ
# /usr/sbin/slapadd -f /etc/openldap/slapd.conf -b 'dc=solar' < YYYYMMDD.ldif データベースをリストア
・リモートメンテナンスの場合 (基本的にバックアップは取れません)
サーバ (デフォルトポート: 389) を起動させておく必要があります。管理者用パスワードを使用 (-w password) します。
$ /usr/bin/ldapadd -f /etc/openldap/ldap.conf -h Server -D 'cn=manager,dc=solar' -x -w Password < YYYYMMDD.ldif データを投入
$ /usr/bin/ldapsearch -f /etc/openldap/ldap.conf -h Server -D 'cn=manager,dc=solar' -x -w Password > YYYYMMDD.ldif データをバックアップ
※ ldapsearch では LDIF 形式のバックアップをすることができません。(検索サマリも入ってしまう)
ldapsearch の書き方
$ /usr/bin/ldapsearch -f /etc/openldap/ldap.conf -h Server -D 'cn=manager,dc=solar' -x -w Password -b 'dc=solar' Filter
Filter
"(&(cn=testuser)(ou=sales))" AND 条件
"(|(cn=testuser1)(cn=testuser2))" OR 条件
"(!(cn=testuser))" NOT 条件
パスワードの作り方
$ slappasswd -h '{CRYPT}' -s Password
作成されたパスワードを userPassword にセットする