LDAPでユーザの一元管理 (2回目)
DebianでLDAPサーバ - Humanity
この記事が見にくすぎるのでもう一回書くことにする。
当時のエラー状況とかも書いてるので相当見にくいのと文章が酷い。
手順書がほしいならちゃんとした手順書書けって話ですが...
以下、項目ごとにサーバでの作業だったら「(サーバ)」、クライアントだったら「(クライアント)」と書いてます。
(サーバ) mv /etc/ldap/slapd.d{,.bak}
このディレクトリがあるとslapd.confが無視られるので。
slapd.dかslapd.confどっちかで書けってことらしい。
(サーバ) /etc/ldap/slapd.conf
以下の内容を/etc/ldap/slapd.confに保存。
modulepath /usr/lib/ldap moduleload back_bdb.la include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/nis.schema pidfile /var/run/slapd/slapd.pid argsfile /var/run/slapd/slapd.args database bdb suffix "dc=example,dc=com" rootdn "cn=Manager,dc=example,dc=com" rootpw secret directory /var/lib/ldap
slaptestで内容が正しいかチェック。
$ sudo slaptest -f /etc/ldap/slapd.conf config file testing succeeded
(サーバ) URI
URI ldap://localhost/dc=example,dc=com
を/etc/ldap/ldap.confか~/.ldaprcに追記。
意味は...ldap系コマンド打つ時省略できるんだったような...
(サーバ) slapd起動
$ sudo /etc/init.d/slapd start Starting OpenLDAP: slapd.
(サーバ) テスト用のユーザ追加
以下の~/user-ldapuser.ldifをldapaddで追加する。
dn: dc=example,dc=com objectClass: dcObject objectClass: organization dc: example o: example dn: ou=People,dc=example,dc=com objectClass: organizationalUnit ou: People dn: uid=ldapuser,ou=People,dc=example,dc=com objectClass: account objectClass: posixAccount uid: ldapuser cn: ldapuser userPassword: ldapuser loginShell: /bin/bash #uidNumber: 1000 #gidNumber: 1000 uidNumber: 1001 gidNumber: 1001 homeDirectory: /home/ldapuser
$ sudo ldapadd -x -D "cn=Manager,dc=example,dc=com" -f ~/user-ldapuser.ldif -W -c Enter LDAP Password: adding new entry "dc=example,dc=com" ldap_add: Already exists (68) adding new entry "ou=People,dc=example,dc=com" ldap_add: Already exists (68) adding new entry "uid=ldapuser,ou=People,dc=example,dc=com"
-cオプションつけないと最初の「ldap_add: Already exists (68)」のエラーの後終了しちゃうので必要。
(クライアント) クライアントの設定
クライアントをLDAPを参照するよう設定。
$ sudo apt-get install libnss-ldap libpam-ldap
どちらのパッケージもインストール時にいろいろ訊いてくるので、その際の答えはこちら参照。
というかクライアントの設定は自分で書くより
このページの説明がずっと分かりやすいと思うのでこのページ参照してくださいね。(にこっ
LDAP認証(OpenLDAP)の構築 - オープンソースのアカウント管理ソフトウェア LISM
DebianにFedoraのauthconfig-tuiとかUbuntuのauth-client-configみたいなのないの...
追記:少なくともDebianならpam-auth-updateってスクリプトが、インストール時のdebconfの質問によって自動的にPAMの設定ファイルを書き換えてくれるので、この設定は必要なしという結論に。
pam-auth-updateでPAMの設定を変える - Humanity
(クライアント) クライアントからldapuserが見えることを確認
上記の設定で/etc/nsswitch.confとか/etc/pam.d/common-*とか書き換えたと思います。
そしたら再起動なしですぐに設定が反映されるので
$ id ldapuser uid=1001(ldapuser) gid=1001 所属グループ=1001
このようにちゃんと見えてるようだったらOK。
自分は何回か追加と削除を繰り返して試しました。
その際、おそらくlibnss-ldapとかインストールする時にnscdという
LDAPの検索結果をキャッシュするデーモンがインストールされて起動している状態だと思うので、
サーバ側で削除してもしばらくユーザが見えてるとかいう場合があります。
その際は
$ sudo service nscd force-reload
して
$ id ldapuser
するとちゃんと「id: ldapuser: No such user」みたいに言われると思います。
ちなみに追加と削除のコマンドは以下の通りです。
削除の際はdnを指定する。
dnは絶対パスみたいなもの。
詳しくはおググりください。
追加
$ sudo ldapadd -x -D "cn=Manager,dc=example,dc=com" -f /home/takuya/user-ldapuser.ldif -W -c
削除
$ sudo ldapdelete -x -D 'cn=Manager,dc=example,dc=com' 'uid=ldapuser,ou=People,dc=example,dc=com' -W
(サーバ) セキュリティ
最後にちょっとだけ。(本当にちょっとだけ)
ユーザが無事他のホストから参照できることを確認したら
ちょっとだけセキュリティ的にベターな設定をslapd.confに書く。
書いたらslapd再起動。
access to * by dn="cn=Manager,dc=example,dc=com" write by self write by * read
全然ゆるいので厳しくする場合は自分で調べてください(目そらし)
あわせて読みたい
/etc/hostsのエントリの共有 - Humanity
これはまだ読める(自分的には)レベルだったのでもう一回手順書かずに済みそう。
今日はDHCPサーバ廃止とDNSサーバ廃止して、
それぞれ固定IP割り振ったり、LDAPで管理しようと作業してたのです。
というかこの作業も2回目なんだけど...