ネットワーク備忘録

アラフォーエンジニアのネットワーク系の備忘録。twitter:@deigo25374582

OpenLDAP_立ち上げ

OpenLDAPを導入するぽいので、それの検証ログ
参考書や、ネットを参考にしたけど、微妙に異なったり、うまくいかなかったりで色々調べたので、とりあえず立ち上げ、LDAPS化、レプリケーションまでの備忘録

 

OpenLDAPは2.4からは設定ファイルもBerkeley DBに格納されている模様。
そんなわけで、/etc/openldap/slapd.confを編集する方式から変わったみたいだが、slapdの時は設定変更後の再起動が必要だったが、この方式だと動的に変更可能らしい。

 OpenLDAPLPICの試験範囲でもあるから、できれば現行の試験に沿うのがよかったが今後はBerkeley DBになるのであれば、それに慣れておいたほうがよさそう

 

検証に使用した環境は↓で、毎度のことながらSElinuxはdisabled

# cat /etc/redhat-release
CentOS release 6.7 (Final)

# rpm -qa | grep openldap
openldap-servers-2.4.40-12.el6.x86_64
openldap-2.4.40-12.el6.x86_64
openldap-clients-2.4.40-12.el6.x86_64

 

作業ディレクトリは以下
# pwd
/etc/openldap/slapd.d/cn=config

【起動前準備】

1.Berkeley DB(BDB)の設定ファイルをコピー

 OpenLDAPがデータを格納するBDBの設定が入ったサンプルを持ってくる。
OpenLDAPBDBは「/var/lib/ldap/」配下に格納される。

# cp -p /usr/share/openldap-servers/DB_CONFIG.example \ /var/lib/ldap/DB_CONFIG 

 

 

2.RootDNのパスワードを生成し、LDIFファイルへ登録

 OpenLDAP自体の設定を編集するのは「cn=config」という識別子だが、インストール直後では、パスワードが設定されていない為、編集することができない。 そのためslappasswdでパスワードのハッシュを生成し、それをLDIFへ登録。

 # slappasswd -s pass
{SSHA}hTVVwnE645iUz3dlC7uZ5VUON8fl6xrE

 

# vi olcDatabase\=\{0\}config.ldif

# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 ee3f0dee
dn: olcDatabase={0}config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=exter
nal,cn=auth" manage by * none
olcAddContentAcl: TRUE
olcLastMod: TRUE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN: cn=config
olcRootPW: {SSHA}hTVVwnE645iUz3dlC7uZ5VUON8fl6xrE
olcSyncUseSubentry: FALSE
olcMonitoring: FALSE
<略>

 

3.OpenLDAPのサービス起動

 起動時に警告がでるが、これは、先ほどの「olcDatabase\=\{0\}config.ldif」を編集したことでファイル自体のハッシュが違うとの警告。変更前のハッシュは2の「CRC32 ee3f0dee」の値。 これはやむを得ないので無視。

 # service slapd start
slapd の設定ファイルをチェック中: [警告]
57930935 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif"
config file testing succeeded
slapd を起動中: [ OK ]

 

ここまでで、OpenLDAPのベースとなるところの最低限の設定は完了。
以降は、実際に管理するディレクトリを作成していく。

 

まずは、インストール直後の管理用ディレクトリの構造

# ldapsearch -LLL -b olcDatabase={2}bdb,cn=config -D cn=config -w pass
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
<略>

初回だと、my-domain.comというディレクトリが、/var/lib/ldap配下に格納。
そしてそのドメイン管理者(RootDN)は cn=Manager。

 

今回は、管理ドメインを「dc=linux,dc=com」、RootDNは「cn=Manager,dc=linux,dc=com」とする。

 


4.管理ドメインの編集

まずは、RootDN用のパスワード生成し、管理ドメイン用の編集ファイルを作成、ldapmodifyでBDBへ変更を反映させる。

!!以降のLDIFファイル作成は、「/etc/openldap/slap.d」配下で作成すると、slapd再起動時にエラーとなるので注意!!

# slappasswd -s manager
{SSHA}uhEJ/BJdF3st0fuumUsoSc4m0SCAfaFO

# cat linux_domain.ldif
dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=linux,dc=com

  

dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=linux,dc=com

  

dn: olcDatabase={2}bdb,cn=config
add: olcRootPW
olcRootPW: {SSHA}uhEJ/BJdF3st0fuumUsoSc4m0SCAfaFO

 

# ldapmodify -x -D cn=config -f linux_domain.ldif -w pass
modifying entry "olcDatabase={2}bdb,cn=config"

modifying entry "olcDatabase={2}bdb,cn=config"

modifying entry "olcDatabase={2}bdb,cn=config"

LDIFファイルの書式は各項目毎にDN(識別子)指定するほうが無難・・・というか、指定しないとエラーとなってしまった。 あと、olcRootPWは事前の確認では、存在していないため、「add」を使用したが、パスワード変更などで変更する場合は、modifyを使用。

 

参考:上記で変更後の情報

# ldapsearch -LLL -b olcDatabase={2}bdb,cn=config -D cn=config -w pass
dn: olcDatabase={2}bdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: {2}bdb
olcDbDirectory: /var/lib/ldap
<略>
olcDbMode: 0600
olcDbSearchStack: 16
olcDbShmKey: 0
olcDbCacheFree: 1
olcDbDNcacheSize: 0
olcRootPW: {SSHA}uhEJ/BJdF3st0fuumUsoSc4m0SCAfaFO
olcSuffix: dc=linux,dc=com
olcRootDN: cn=Manager,dc=linux,dc=com 

 以降は実際のDNを作成していく。

今回は、単純な下記の構成

f:id:klock_3rd:20160723172433p:plain

5.実際のエントリ登録

 # vi linux_base.ldif

dn: dc=linux,dc=com
dc: linux
o: linux.com
objectClass: dcObject
objectClass: organization

 

dn: cn=Manager,dc=linux,dc=com
cn: Manager
objectClass: organizationalRole

 

dn: ou=admin,dc=linux,dc=com
objectclass: organizationalUnit
ou: admin

 

dn: ou=user,dc=linux,dc=com
objectclass: organizationalUnit
ou: user

 

# ldapadd -x -D "cn=Manager,dc=linux,dc=com" -f linux_base.ldif -w manager
adding new entry "dc=linux,dc=com"

adding new entry "cn=Manager,dc=linux,dc=com"

adding new entry "ou=admin,dc=linux,dc=com"

adding new entry "ou=user,dc=linux,dc=com"

 cn=Manager,dc=linux,dc=comは、4の作業時にはRootDNとして記載があるけど実際のオブジェクトとしては存在していないのでここで作成している。

 

<参考>

作成後のldapseachコマンド確認

 

# ldapsearch -D "cn=Manager,dc=linux,dc=com" -b dc=linux,dc=com -w manager
# extended LDIF
#
# LDAPv3
# base <dc=linux,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

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

# Manager, linux.com
dn: cn=Manager,dc=linux,dc=com
cn: Manager
objectClass: organizationalRole

# admin, linux.com
dn: ou=admin,dc=linux,dc=com
objectClass: organizationalUnit
ou: admin

# user, linux.com
dn: ou=user,dc=linux,dc=com
objectClass: organizationalUnit
ou: user

# search result
search: 2
result: 0 Success

# numResponses: 5
# numEntries: 4

 

長くなったので、一旦ここまでで、次にユーザ登録&LDAPSを予定