OpenLDAPデータベースの設定
OpenLDAPインストール後、以下の3つの設定が必要。
LDAPデータベースツリーのDN
データベースツリーのDN → dc=hoge,dc=local
特権DN → cn=Manager,dc=hoge,dc=local
特権DNのパスワード → slappasswdで生成
# ldapsearch -x -LLL -b 'olcDatabase={2}bdb,cn=config' -D cn=config -W
dn: olcDatabase={2}bdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: {2}bdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=my-domain,dc=com
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN: cn=Manager,dc=my-domain,dc=com
olcSyncUseSubentry: FALSE
olcMonitoring: TRUE
olcDbCacheSize: 1000
olcDbCheckpoint: 1024 15
olcDbNoSync: FALSE
olcDbDirtyRead: FALSE
olcDbIDLcacheSize: 0
olcDbIndex: objectClass pres,eq
olcDbIndex: cn pres,eq,sub
olcDbIndex: uid pres,eq,sub
olcDbIndex: uidNumber pres,eq
olcDbIndex: gidNumber pres,eq
olcDbIndex: mail pres,eq,sub
olcDbIndex: ou pres,eq,sub
olcDbIndex: sn pres,eq,sub
olcDbIndex: givenName pres,eq,sub
olcDbIndex: loginShell pres,eq
olcDbIndex: memberUid pres,eq,sub
olcDbIndex: nisMapName pres,eq,sub
olcDbIndex: nisMapEntry pres,eq,sub
olcDbLinearIndex: FALSE
olcDbMode: 0600
olcDbSearchStack: 16
olcDbShmKey: 0
olcDbCacheFree: 1
olcDbDNcacheSize: 0
LDAPサーバの管理用のアクセス権である特権DN ( olcRootDN )
LDAPエントリのデータ修正
設定ファイル
# vi 00.bdb-init.ldif
# 設定を行うDNを指定
dn: olcDatabase={2}bdb,cn=config
# このLDIFファイルで修正を行うことを宣言します
changetype: modify
# olcRootDNを書き換えることを指定し値を指定する
replace: olcRootDN
olcRootDN: cn=Manager,dc=local
-
# olcSuffixを書き換えることを指定し値を指定する
replace: olcSuffix
olcSuffix: dc=local
-
# olcRootPWを追加することを指定し値を指定する
add: olcRootPW
olcRootPW: {SSHA}QfzKdfUvklhztTwNGS3P+HG0V9G7MPqo
ファイルを適用
# ldapmodify -x -D cn=config -f 00.bdb-init.ldif -W
Enter LDAP Password:
modifying entry "olcDatabase={2}bdb,cn=config"
修正したことを確認
# ldapsearch -x -LLL -b 'olcDatabase={2}bdb,cn=config' -D cn=config -W
変わってる
〜省略〜
olcDbCacheFree: 1
olcDbDNcacheSize: 0
olcRootDN: cn=Manager,dc=local
olcSuffix: dc=local
olcRootPW: {SSHA}QfzKdfUvklhztTwNGS3P+HG0V9G7MPqo
初期データの登録
# vi 1.init.ldif
dn: dc=local
objectclass: dcObject
objectclass: organization
o: VIRTUAL CORPORATION
dc: local
dn: cn=Manager,dc=local
objectclass: organizationalRole
cn: Manager
ファイルの登録、ここでのPWDは特権DN(Manager)のPWD
# ldapadd -x -W -D "cn=Manager,dc=local" -f 1.init.ldif
Enter LDAP Password:
adding new entry "dc=local"
adding new entry "cn=Manager,dc=local"
続いてGroupsやUsersなどのOUを登録。これはユーザを入れておくディレクトリみたいなもの。Usersを作るのは納得だが、Groupsは必要かわからいけど、サンプルでは入れているしUNIXのGIDみたいなもんだとの理解。
# vi 2.add-ou.ldif
dn: ou=vco,dc=local
ou: vco
objectclass: top
objectclass: organizationalUnit
# ldapadd -x -W -D "cn=Manager,dc=nttcom,dc=local" -f 2.add-ou.ldif
Enter LDAP Password:
adding new entry "ou=vco,dc=local"
続いてユーザの追加。このユーザはシステム実行用のユーザで、個人用のユーザとは違う。なのでホームディレクトリとかは指定しない。
パスワードはあらかじめ作成しておく
# slappasswd -h '{CRYPT}'
'{CRYPT}'指定だとvROクライアントからログインできない?(Invalid Credentials (49)とか出る。よくわからん。# vi 51.add-user-vcoexecuter.ldif
dn: cn=vcoadmin,ou=vco,dc=local
uid: vcoadmin
cn: vcoadmin
sn: vcoadmin
displayName: vCO Administrator
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
userPassword: {CRYPT}HNZyjHvVcVJ3o
dn: cn=vcouser,ou=vco,dc=local
uid: vcouser
cn: vcouser
sn: vcouser
displayName: vCO User
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
userPassword: {CRYPT}mSK7XyCKKym3Q# ldapadd -x -W -D "cn=Manager,dc=local" -f 51.add-user-vcoexecuter.ldif
Enter LDAP Password:
adding new entry "cn=vcoadmin,ou=vco,dc=local"
グループの登録
# vi 3.add-group.ldif
dn: cn=vcoadmins,ou=vco,dc=local
objectClass: top
objectClass: groupOfNames
cn: vcoadmins
member: cn=vcoadmin,ou=vco,dc=local
dn: cn=vcousers,ou=vco,dc=local
objectClass: top
objectClass: groupOfNames
cn: vcousers
member: cn=vcouser,ou=vco,dc=local
# ldapadd -x -W -D "cn=Manager,dc=local" -f 3.add-group.ldif
Enter LDAP Password:
adding new entry "cn=vcoadmin,ou=vco,dc=local"
adding new entry "cn=vcouser,ou=vco,dc=local"
確認
# ldapsearch -x -W -D "cn=Manager,dc=local" -b "ou=vco,dc=local"
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <ou=vco,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# vco, local
dn: ou=vco,dc=local
ou: vco
objectClass: top
objectClass: organizationalUnit
# vcoadmin, vco, local
dn: cn=vcoadmin,ou=vco,dc=local
uid: vcoadmin
cn: vcoadmin
sn: vcoadmin
displayName:: dkNPIEFkbWluaXN0cmF0b3Ig
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
userPassword:: e0NSWVBUfUhOWnlqSHZWY1ZKM28=
# vcouser, vco, local
dn: cn=vcouser,ou=vco,dc=local
uid: vcouser
cn: vcouser
sn: vcouser
displayName:: dkNPIFVzZXIg
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
userPassword:: e0NSWVBUfW1TSzdYeUNLS3ltM1E=
# vcoadmins, vco, local
dn: cn=vcoadmins,ou=vco,dc=local
objectClass: top
objectClass: groupOfNames
cn: vcoadmins
member: cn=vcoadmin,ou=vco,dc=local
# vcousers, vco, local
dn: cn=vcousers,ou=vco,dc=local
objectClass: top
objectClass: groupOfNames
cn: vcousers
member: cn=vcouser,ou=vco,dc=local
# vcoadmin2, vco, local
dn: cn=vcoadmin2,ou=vco,dc=local
uid: vcoadmin2
cn: vcoadmin2
sn: vcoadmin2
displayName:: dkNPIEFkbWluaXN0cmF0b3Ig
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
userPassword:: e1NTSEF9QmpZSDFZMkZXQ3hYNnBCSVo4WmhESjdLKy9TMWlwQno=
# vcoadmins2, vco, local
dn: cn=vcoadmins2,ou=vco,dc=local
objectClass: top
objectClass: groupOfNames
cn: vcoadmins2
member: cn=vcoadmin2,ou=vco,dc=local
# search result
search: 2
result: 0 Success
# numResponses: 8
# numEntries: 7
参考にした記事