OpenLDAPの初期設定で詰まった部分の備忘録です。
前置き
LDAPの初期設定を行う最中Adminのアカウントってどこにいるんだ...?となりました。
様々なサイトを参照するとLDAPのアカウントの検索にはldapsearchを用いると出てきます。そこでは
ldapsearch -x -H ldaps://example.com -D "cn=admin,dc=example,dc=com" -w "password" -b "dc=example,dc=com" "(objectClass=*)"
という形で-Dの部分でバインドDNを指定するのですが、いざ
ldapsearch -x -H ldaps://example.com -D "cn=admin,dc=example,dc=com" -w "password" -b "dc=example,dc=com" "(cn=admin)"
とするとadminユーザーは出てこないです。
adminユーザーが出てこない理由
adminが出てこない理由はそもそもこのバインドDNにadminが格納されていないからです。
こちらのサイトを参照すると
dc=example,dc=com の管理者アカウントは olcDatabase={1}hdb,cn=config の olcRootDN 属性と olcRootPW 属性に格納されている。これは cn=config ツリーに入っているので、通常のアカウントからは見えない。
となっています。
確認方法
ということでcn=configを見に行きたいわけですが、これはOpenLDAPをホストしているマシンからじゃないと見ることができません。ですので、ホストしているマシンのcli(今回筆者の環境では全てDocker上でホスティングを行っていたのでdocker exec -it hogehoge bash
でcliに侵入した)を利用して、
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config
と入力する(ldapi:///は自分でホスティングしてるやつのことを指す)とどこかに
# {1}mdb, config
dn: olcDatabase={1}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=example,dc=com
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth manage by * break
olcAccess: {1}to attrs=userPassword,shadowLastChange by self write by dn="cn=a
dmin,dc=example,dc=com" write by anonymous auth by * none
olcAccess: {2}to * by self read by dn="cn=admin,dc=example,dc=com" write by * none
olcLastMod: TRUE
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}hogehoge
olcDbCheckpoint: 512 30
olcDbIndex: uid eq
olcDbIndex: mail eq
olcDbIndex: memberOf eq
olcDbIndex: entryCSN eq
olcDbIndex: entryUUID eq
olcDbIndex: objectClass eq
olcDbMaxSize: 1073741824
という形でadminユーザーの存在を確認することができました。