openldap 2.3 インストール
| Table of Contents |
インストール環境
-
OS
- CentOS 5.3
-
パッケージ
- openldap-servers-2.3.43-3.el5
- openldap-clients-2.3.43-3.el5
openldapのインストール
-
openldap-serversのインストール
# yum install openldap-servers
-
openldap-clientsのインストール
# yum install openldap-clients
openldapの設定
管理パスワードの生成
-
slappasswdコマンドで管理用パスワードを生成します。
# slappasswdNew password:****Re-enter new password:****{SSHA}MG//NfdYLHxWJINHLgh7ZTwPdzHy2mNnこのパスワードは後で利用するのでテキストなどに貼り付けておきます。
slapd.confの編集
-
ldapの設定ファイル「/etc/openldap/slapd.conf」を編集します
suffix "dc=oss-d,dc=net"rootdn "cn=Manager,dc=oss-d,dc=net"#先ほど生成したパスワードを入力しますrootpw {SSHA}MG//NfdYLHxWJINHLgh7ZTwPdzHy2mNn#ユーザが自分のパスワード変更できるようにアクセス権を設定するaccess to attrs=userPassword by self write by anonymous auth by * none#管理者は書き込み可能、その他のユーザは読み取り専用access to * by self write by * read
Berkeley DBの設定
-
Berkeley DBの設定ファイルであるDB_CONFIGは、サンプルをコピーします。
# cp -rp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
自動起動の設定
-
chkconfigコマンドで自動起動をONにします
# chkconfig ldap on
-
chkconfigコマンドで自動起動の確認をします。LUNレベル3,4,5がonになっていれば問題ありません。
# chkconfig --list ldapldap 0:off 1:off 2:on 3:on 4:on 5:on 6:off
起動・確認
-
ldapを起動します。
# /etc/init.d/ldap start
-
psコマンドでプロセスの確認を行います。/usr/sbin/slapd があれば問題ありません。
# ps ax|grep ldap2876 ? Ssl 0:00 /usr/sbin/slapd -h ldap:/// -u ldap
ファイアウォールの設定
-
環境に合わせてファイアウォールの設定(ファイル「/etc/sysconfig/iptables」)を変更します。設定変更後はiptablesの再起動を忘れないように注意します。
データベースの作成
データベース構成
- 今回は下記のような構成でデータベースを作成します。
- ・Manager
-
slapd.confでrootdnに設定したディレクティブ。
Unixのrootのような扱いでデータベースに対してありとあらゆる権限を持ちます。
- ・Group
-
グループを登録するディレクティブ。
一般的なグループと同じで、複数ユーザをまとめて1つとして扱うために利用します。
Active Directory であれば administratorsやpoweruserがあります。
- ・Users
-
ユーザを登録するディレクティブ。
データ登録
データの登録は一括登録に便利なldifファイルを利用します。
サブツリーの登録
-
サブツリー用にldifファイル「object.ldif」を作成します。
dn: dc=oss-d,dc=netobjectClass: dcObjectobjectclass: organizationdc: oss-do: oss-d.netdn: cn=Manager,dc=oss-d,dc=netobjectClass: organizationalRolecn: Managerdn: ou=Users,dc=oss-d,dc=netobjectClass: organizationalUnitou: Usersdn: ou=Group,dc=oss-d,dc=netobjectClass: organizationalUnitou: Group
-
上記をldapaddコマンドで登録します。
# ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f object.ldif Enter LDAP Password:adding new entry "dc=oss-d,dc=net"adding new entry "cn=Manager,dc=oss-d,dc=net"adding new entry "ou=Users,dc=oss-d,dc=net"adding new entry "ou=Group,dc=oss-d,dc=net"
ユーザ/グループの登録(既存unixアカウントをそのまま移行する)
ユーザ/グループの登録は、migrate_passwd.plというスクリプトを利用して既存のunixアカウントをLDAPサーバーへ登録します。
-
migrate_passwd.plの準備
-
関連ファイル「/usr/share/openldap/migration/migrate_common.ph」を修正します。
$DEFAULT_MAIL_DOMAIN = "oss-d.net";$DEFAULT_BASE = "dc=oss-d,dc=net";$NAMINGCONTEXT{'passwd'} = "ou=Users";
-
関連ファイル「/usr/share/openldap/migration/migrate_common.ph」を修正します。
-
/etc/passwdのアカウントをLDAPへ登録する
-
今回は/etc/passwdから一般ユーザのみを抽出するようuidが500番台のものに絞りました。
# grep :5[0-9][0-9] /etc/passwd > user.txt
-
migrate_passwd.pl を利用してLDIFファイルを作成します。
# /usr/share/openldap/migration/migrate_passwd.pl user.txt > user.ldif
-
ldapaddコマンドでLDIFファイルの内容を登録します。
# ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f user.ldif Enter LDAP Password:adding new entry "uid=hoge,ou=Users,dc=oss-d,dc=net"
-
今回は/etc/passwdから一般ユーザのみを抽出するようuidが500番台のものに絞りました。
-
/etc/groupのグループをLDAPへ登録する
-
今回は/etc/passwdから一般グループのみを抽出するようgidが500番台のものに絞りました。
# grep :5[0-9][0-9] /etc/group > group.txt
-
migrate_passwd.pl を利用してLDIFファイルを作成します。
# /usr/share/openldap/migration/migrate_group.pl group.txt > group.ldif
-
ldapaddコマンドでLDIFファイルの内容を登録します。
# ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f group.ldifEnter LDAP Password:adding new entry "cn=hoge,ou=Group,dc=oss-d,dc=net"
-
今回は/etc/passwdから一般グループのみを抽出するようgidが500番台のものに絞りました。
管理ツールの導入
バックアップ
バックアップ方法
データのバックアップにはオンラインバックアップが可能なslapcatコマンド(データをLDIFファイル形式で出力)を利用します。
-
全データをバックアップする場合は以下のようになります。
# slapcat -l backup.ldif
-
特定のサブディレクトリ配下をバックアップする場合は-sオプションを利用します。
Users配下のバックアップを取る場合は以下のように指定します。
# slapcat -s "ou=Users,dc=oss-d,dc=net" -l backup.ldif
定期バックアップ
-
バックアップ要件は下記を前提として設定を行います。
- ・オンラインバックアップ
- slapcatコマンドを利用
- ・定期バックアップ(1日1回)
- cronを利用
- ・バックアップは10世代を管理する
- logrotateを利用
-
定期バックアップはcronを利用します。
今回は毎日2時にバックアップするよう「crontab -e」コマンドで設定します。# crontab -e0 2 * * * /usr/sbin/slapcat -l /backup/backup.ldif
-
世代管理はlogrotateを利用します。
設定ファイル「/etc/logrotate.d/ldap_backup」を下記内容で新規作成します。/backup/backup.ldif { daily missingok notifempty rotate 10}
- ・daily
- 毎日実行する
- ・missingok
- ファイルが無くてもエラーを出さない
- ・notifempty
- ファイルが空なら実行しない
- ・rotate 10
-
10世代残す
-
logrotate の確認を行います。
# logrotate -dv /etc/logrotate.d/ldap_backupreading config file /etc/logrotate.d/ldap_backupreading config info for /backup/backup.ldifHandling 1 logsrotating pattern: /backup/backup.ldif after 1 days (10 rotations)empty log files are not rotated, old logs are removedconsidering log /backup/backup.ldif log /backup/backup.ldif does not exist -- skipping
エラーの場合は下記のようなエラーがでます。error: /etc/logrotate.d/ldap_backup:2 unexpected text
logrotateは毎日実行されますが、バックアップファイルが空の場合は実行されないため無駄にファイルが増えることはありません。
リストア
slapcatでバックアップした場合のリストア手順を示します。
-
ldapを停止します。
# /etc/init.d/ldap stop
-
データを全て削除します。
# cd /var/lib/ldap# rm -rf *
-
DB_CONFIGファイルを作成します。
# cp -rp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
-
slapadd コマンドでリストア後、ファイルの所有者を変更します。
# slapadd -l /backup/backup.ldif.1# chown ldap:ldap *
-
ldapを起動します。
# /etc/init.d/ldap startslapd の設定ファイルをチェック中: config file testing succeeded [ OK ]slapd を起動中: [ OK ]
その他
各種コマンド
-
検索
# ldapsearch -x -b "dc=oss-d,dc=net" "objectclass=*"# ldapsearch -x -b "dc=oss-d,dc=net" "uid=hoge"
LDAP側の設定によっては「-W -D 'cn=Manager,dc=oss-d,dc=net'」オプションを指定する必要があります。
-
追加
#ldapadd -x -D "cn=Manager,dc=oss-d,dc=net" -W -f user.ldif
-
変更
# ldapmodify -x -D "cn=Manager,dc=oss-d,dc=net" -W -f user.ldif
※hogeユーザのhomeDirectoryを変更する場合、user.ldifは次のような内容になります。dn: uid=hoge,ou=Users,dc=oss-d,dc=nethomeDirectory: /home/newdir
-
削除
# ldapdelete -x -D "cn=Manager,dc=oss-d,dc=net" -W "uid=hoge,ou=Users,dc=oss-d,dc=net"
-
パスワード変更
# ldappasswd -x -D 'cn=Manager,dc=exsample,dc=co,dc=jp' -W -S "uid=hoge,ou=Users,dc=oss-d,dc=net"
FAQ
起動時に「rootdn is always granted unlimited privileges.」と警告メッセージが表示される。
-
rootdnが常に全権限が持つ場合に表示されます。
「/etc/openldap/slapd.conf」で下記のようなアクセス権があると表示されます。access to * by dn="cn=Manager,dc=oss,dc=dip,dc=jp" write
-
その場合は以下のように書き換えて下さい。
#管理者は書き込み可能、その他のユーザは読み取り専用access to * by self write by * read