まえがき
OpenLDAP作るのは、社内の専門家の人にやってもらうのがほとんどなので、自分で作ることはまずないんだけど、ちょっとした用事で自前で作る必要があって、そのときに残したメモ。
とりあえず用意するだけっていうならこれでOKなはず。
ちなみに偉大な先人たちのほぼコピペです。ありがとうございます。
環境
CentOS 7(1503)
参考URL
- http://qiita.com/kazukikudo/items/703d6e6664e13882fa0b #非常に参考になりました。ありがとうございます。
- http://www.unix-power.net/linux/openldap.html
- https://www.osstech.co.jp/~hamano/posts/centos7-openldap-ssh/
準備
yum install openldap openldap-clients openldap-devel openldap-servers
cp -a /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
systemctl enable slapd
systemctl start slapd
実作業
基本パターンとして、OpenLDAPに何かを追加したいときはldapadd
を使用して、何かを変更したいときはldapmodify
を使用する。
それぞれのコマンドで"-w"で指定するのはパスワード。
今回の場合、hogehoge
をパスワードとして利用している。
サーバ管理者パスワード設定
slappasswdを使うとパスワード入力を求められるので、今後サーバ全体の管理者パスワードとして使用したい文字列を入力
そうするとハッシュ化された文字列が生成されるので、add_rootpw.ldifに入力
slappasswd
vim add_rootpw.ldif
ldapadd -Y EXTERNAL -H ldapi:// -f add_rootpw.ldif
add_rootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: [slappasswdで出力されたハッシュ文字列を入力]
ベースDNの変更
vim mod_dom.ldif
ldapmodify -x -D cn=config -w hogehoge -f mod_dom.ldif
mod_dom.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=example,dc=com" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com
データベース管理者のパスワード設定
ベースDNのデータベース管理者のパスワードを設定。
サーバ管理者だとベースDNへの書き込み権限を持たず、エントリの追加が弾かれてしまう。
slappasswd
vim add_adminpw.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f add_adminpw.ldif
add_adminpw.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: [slappasswdで出力されたハッシュ文字列を入力]
dcとかouとか追加
vim base.ldif
ldapadd -x -D "cn=Manager,dc=example,dc=com" -w hogehoge -f base.ldif
base.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group
スキーマ拡張
これやらないとユーザ追加するときにobjectClassないやでーって言われて弾かれるから必須
ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:// -f /etc/openldap/schema/nis.ldif
ユーザ追加
vim add_user.ldif
ldapadd -x -D "cn=Manager,dc=example,dc=com" -w hogehoge -f add_user.ldif
add_user.ldif
dn: uid=0024a59b6ad0,ou=People,dc=example,dc=com
objectClass: posixAccount
objectClass: inetOrgPerson
sn: 0024a59b6ad0
cn: 0024a59b6ad0
uid: 0024a59b6ad0
displayName: 100
homeDirectory: /home/0024a59b6ad0
loginShell: /bin/bash
uidNumber: 1004
gidNumber: 1004
userPassword: 0024a59b6ad0
確認
これで全ユーザひっぱれる
ldapsearch -x -w hogehoge -D "cn=Manager,dc=example,dc=com" -b "ou=People,dc=example,dc=com"
おまけ(ユーザの属性変更)
vim mod_user.ldif
ldapmodify -x -D "cn=Manager,dc=example,dc=com" -w hogehoge -f mod_user.ldif
mod_user.ldif
dn: uid=0024a59b6ad0,ou=People,dc=example,dc=com
changetype: modify
replace: displayName
displayName: 999