玄箱/slapd

出典: Fukudat

LDAPサーバー slapd のインストール・設定の方法. Sambaを使って Windows ドメインコントローラ (PDC, SDC) を作る方法は 玄箱/samba を参照のこと.

目次

インストール

apt-get でゲット!

$ su -
$ apt-get install ldap-server ldap-utils nscd

インストールが進むとドメイン名を聞かれるので,適当に答える.ここでは

fukudat.com

とした.これにより "dc=fukudat,dc=com" と設定したことになる.

それから管理者(admin)のパスワードを聞かれるので,適当に答える.root と同じでいいんじゃないだろうか.

コマンドプロンプトに戻ってきたら,その時点で設定ファイル (/etc/ldap/slapd.conf など)は出来上がっている上に,slapd デーモンは動いている.

ldapsearch コマンドで,データベースの中身を確認してみよう.まだSASLの設定が済んでいないので,simple authentication での接続となる.

$ ldapsearch -x
# extended LDIF
#
# LDAPv3
# base <> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# fukudat.com
dn: dc=fukudat,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: fukudat.com
dc: fukudat

# admin, fukudat.com
dn: cn=admin,dc=fukudat,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

SASL 対応

apt-get でゲット!

$ apt-get install sasl2-bin libsasl2-modules

/etc/default/saslauthd を編集して以下を追加

START=yes
MECHANISMS="pam"

そしたら,次のコマンドで saslauthd を起動

$ /etc/init.d/saslauthd start

次に,/etc/ldap/slapd.conf を編集して,以下の行を追加.

# sasl
sasl-realm      fukudat.com
sasl-host       nas01.fukudat.com
sasl-regexp     uid=admin,cn=fukudat.com,cn=.+ \
                cn=admin,dc=fukudat,dc=com
sasl-regexp     uid=(.*),cn=fukudat.com,cn=.+ \
                uid=$1,ou=People,dc=fukudat,dc=com
sasl-secprops   none
#password-hash  {CLEARTEXT}
#password-hash  {SHA}
password-hash   {MD5}

saslpasswd2 コマンドで admin のパスワードを作成.

$ saslpasswd2 -c admin
Passwd: xxxx
Again (for verification): xxxx 

うまく動いているかどうか確認.

$ ldapsearch -U admin "(cn=admin)"

データベースの作成

http://www.padl.com/OSS/MigrationTools.html から MigrationTools をゲット! /tmp にでも展開する.

$ cd /tmp
$ tar xvfz MigrationTools.tgz
MigrationTools-47/
MigrationTools-47/ads/
MigrationTools-47/ads/migrate_passwd_ads.pl
MigrationTools-47/ads/migrate_all_online_ads.sh
MigrationTools-47/ads/migrate_group_ads.pl
MigrationTools-47/ads/migrate_all_nis_online_ads.sh
MigrationTools-47/ads/migrate_base.pl
MigrationTools-47/ads/migrate_common.ph
MigrationTools-47/MigrationTools.spec
MigrationTools-47/migrate_netgroup_byhost.pl
MigrationTools-47/migrate_all_nis_offline.sh
MigrationTools-47/Make.rules
MigrationTools-47/migrate_aliases.pl
MigrationTools-47/README
MigrationTools-47/migrate_rpc.pl
...
MigrationTools-47/migrate_all_netinfo_offline.sh

migrate_common.ph を編集して $DEFAULT_BASE, $DEFAULT_MAIL_DOMAIN を変更する.

$ cd MigrationTools-47
$ vi migrate_common.ph
...
$DEFAULT_MAIL_DOMAIN = "fukudat.com";
...
$DEFAULT_BASE = "dc=fukudat,dc=com";

/etc/passwd, /etc/group, /etc/hosts を ldif に変換!

./migrate_passwd.pl /etc/passwd passwd.ldif
./migrate_group.pl /etc/group group.ldif
./migrate_hosts.pl /etc/hosts hosts.ldif

passwd.ldif, group.ldif, hosts.ldif ができる. これらのファイルを編集して,LDAP で管理したいエントリーだけを残す. root などのシステムユーザは削除しちゃえばいいんじゃないでしょうか.

最後に,出来上がった ldif ファイルをLDAPに登録する.

$ ldapadd -U admin -f passwd.ldif
$ ldapadd -U admin -f group.ldif
$ ldapadd -U admin -f hosts.ldif

PAM の LDAP化

apt-get でゲット!

apt-get install libpam-ldap libpam-cracklib libpam-pwdfile libnss-ldap

/etc/pam_ldap.conf を編集して,以下のようにする.

host 127.0.0.1         # LDAP server のアドレスを記述する
base dc=fukudat,dc=com # 環境に合わせて変更する

SASL_SECPROPS none
SASL_REALM fukudat.com

/etc/pam.d をたくさん変更する.壊れても元に戻せるように,バックアップを取り,symbolic link を張ることにする.

$ cd /etc
$ mv pam.d pam.d.orig           # オリジナルは pam.d.orig として取っておく
$ cp -a pam.d.orig pam.d.ldap   # pam.d.ldap にコピーする
$ ln -s pam.d.ldap pam.d        # pam.d.ldap を pam.d に symbolic link する
$ cp -p /usr/share/doc/libpam-ldap/examples/pam.d/* pam.d  # サンプルからコピー

サンプルには pam_pwdb.so がたくさん使われているが Debian にはない.pam_unix.so と同じと思われるので,エラーメッセージを防ぐために,以下のようにして修正する.

$ cd /etc/pam.d
$ for i in *; do
>   echo $i
>   ed -s $i <<'EOF'
> 1,$s/pwdb/unix/g
> w
> EOF
> done

/etc/libnss-ldap.conf を編集.

host 127.0.0.1
base dc=fukudat,dc=com

/etc/nsswitch.conf を編集

passwd:         files ldap
group:          files ldap
shadow:         files
...

とする.

最後に /etc/passwd, /etc/group, /etc/shadow を編集.LDAPで管理するユーザを削除する.

どうやら,一度リブートしておいたほうがよさそう.

$ reboot