คอนฟิก OpenLDAP Server เบื้องต้น บน Fedora 17

จากที่ได้ ติดตั้งและสตาร์ต OpenLDAP Server บน Fedora 17 ในตอนนี้มาดูวิธีคอนฟิกเบื้องต้นกัน
ไฟล์คอนฟิกของ OpenLDAP จะถูกเก็บไว้ในไดเร็คทอรี /etc/openldap/

[root@fc17-64a ~]# ls -l /etc/openldap/
total 16
drwxr-xr-x. 2 root root 4096 Mar 26 19:04 certs
-rw-r--r--. 1 root root  280 Mar 26 19:04 ldap.conf
drwxr-xr-x. 2 root root 4096 Jun 30 14:51 schema
drwx------. 3 ldap ldap 4096 Jun 30 14:52 slapd.d

สำหรับ OpenLDAP Server เวอร์ชั่น 2.4 จะไม่ได้ใช้ไฟล์คอนฟิกหลัก slapd.conf อีกต่อไป แต่จะถูกเก็บแยกไว้เป็นไฟล์ ldif ย่อยๆ ในไดเร็คทอรี /etc/openldap/slapd.d/

[root@fc17-64a ~]# cd /etc/openldap/slapd.d/
[root@fc17-64a slapd.d]# ls -l
total 8
drwxr-x---. 3 ldap ldap 4096 Jun 30 14:52 cn=config
-rw-------. 1 ldap ldap  589 Jun 30 14:52 cn=config.ldif

[root@fc17-64a slapd.d]# ls -l cn=config
total 24
drwxr-x---. 2 ldap ldap 4096 Jun 30 14:52 cn=schema
-rw-------. 1 ldap ldap  378 Jun 30 14:52 cn=schema.ldif
-rw-------. 1 ldap ldap  513 Jun 30 14:52 olcDatabase={0}config.ldif
-rw-------. 1 ldap ldap  408 Jun 30 14:52 olcDatabase={-1}frontend.ldif
-rw-------. 1 ldap ldap  562 Jun 30 14:52 olcDatabase={1}monitor.ldif
-rw-------. 1 ldap ldap  609 Jun 30 14:52 olcDatabase={2}hdb.ldif

สำหรับการเริ่มคอนฟิกพื้นฐานคือ “cn=config.ldif” และ “cn=config/olcDatabase={2}hdb.ldif”

ตัวอย่างไฟล์คอนฟิกดีฟอลต์ที่ได้มาจากการติดตั้ง Fedora 17

[root@fc17-64a slapd.d]# cat cn=config.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 96477316
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: "OpenLDAP Server"
olcTLSCertificateKeyFile: /etc/openldap/certs/password
structuralObjectClass: olcGlobal
entryUUID: 3d06c662-56d4-1031-9bb7-87b753e3212f
creatorsName: cn=config
createTimestamp: 20120630075209Z
entryCSN: 20120630075209.072588Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20120630075209Z

[root@fc17-64a slapd.d]# cat cn=config/olcDatabase={2}hdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 53ac2ad0
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 3d095f44-56d4-1031-9bbd-87b753e3212f
creatorsName: cn=config
createTimestamp: 20120630075209Z
entryCSN: 20120630075209.090190Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20120630075209Z

ตามคำเตือนในไฟล์คือห้ามแก้ไขไฟล์ ldif นี้โดยตรง ให้ใช้คำสั่ง ldapmodify ในการแก้ไข

วิธีการคือต้องสร้างไฟล์การแก้ไขในรูปแบบไฟล์ ldif แล้วใช้คำสั่ง ldapmodify

เริ่มต้นเราจะแก้ olcSuffix ซึ่งเป็นชื่อ suffix ที่เราใช้เก็บข้อมูลใน LDAP เป็น “dc=example,dc=com”

หมายเหตุ ชื่อ suffix นี้ไม่จำเป็นต้องเหมือนชื่อโดเมนของชื่อเครื่อง (DNS domain) แต่ส่วนใหญ่นิยมตั้งให้ตรงกัน

สร้ำงไฟล์ชื่อ modify-suffix.ldif โดยมีเนื้อหาไฟล์ตามนี้

[root@fc17-64a ~]# cat modify-suffix.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com

อธิบายคร่าวๆ คือเราต้องการแก้ไข (modify) “olcSuffix” ให้เป็น (replace) ค่า “dc=example,dc=com” ซึ่งอยู่ใน (dn) ส่วนคอนฟิก “olcDatabase={2}hdb” ที่อยู่ภายใต้  “cn=config” อีกที ซึ่งก็คือไฟล์ “cn=config/olcDatabase={2}hdb.ldif” นั่นเอง

ใช้คำสั่ง ldapmodify ตามด้วยออปชั่นด้านล่าง

[root@fc17-64a ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f modify-suffix.ldif
ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)

หากขึ้น error แบบนี้ แปลว่าเซอร์วิส slapd ไม่ได้รันอยู่

ใช้คำสั่ง systemctl start เพื่อรันเซอร์วิส slapd

[root@fc17-64a ~]# systemctl start slapd.service

รันคำสั่ง ldapmodify อีกครั้ง

[root@fc17-64a ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f modify-suffix.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

ผลลัพธ์ต้องไม่แสดง error ใดๆ ทั้งสิ้น

หากแก้ไขถูกต้อง ลองดูไฟล์คอนฟิก “olcDatabase={2}hdb.ldif” อีกครั้ง จะเห็นชื่อ olcSuffix เปลี่ยนไป

[root@fc17-64a ~]# cat /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 3a420a6a
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=Manager,dc=my-domain,dc=com
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 3d095f44-56d4-1031-9bbd-87b753e3212f
creatorsName: cn=config
createTimestamp: 20120630075209Z
olcSuffix: dc=example,dc=com
entryCSN: 20120630091643.407768Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20120630091643Z

คอนฟิกพื้นฐานอีกอย่างคือแก้ไข “olcRootDN” และตั้งรหัสผ่าน “olcRootPW” เพื่อใช้สำหรับ เพิ่ม แก้ไข ลบข้อมูลใน LDAP

ก่อนอื่นต้องรันคำสั่ง slappasswd เพื่อสร้างรหัสผ่านในรูปแบบ SSHA ก่อนนำไปใส่ไว้ในไฟล์ ldif

[root@fc17-64a ~]# slappasswd
New password:
Re-enter new password:
{SSHA}igq/HC/tBKbRtGS3mmMONnyh1vTokS9L

สร้างไฟล์ ldif สำหรับการแก้ไข RootDN และเพิ่มรหัสผ่าน RootPW

[root@fc17-64a ~]# cat modify-RootDN.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: uid=root,ou=People,dc=example,dc=com
-
add: olcRootPW
olcRootPW: {SSHA}igq/HC/tBKbRtGS3mmMONnyh1vTokS9L

คำอธิบาย เพื่อให้สอดคล้องกับโปรแกรม “migrationtools” ที่เราจะใช้ต่อไป เราจะแก้ “olcRootDN” ให้เป็น “uid=root,ou=People,dc=example,dc=com” และเพิ่ม (add) ฟิลด์  “olcRootPW” ให้มีค่าที่ได้จากการรันคำสั่ง slappasswd

รันคำสั่ง ldapmodify ตามด้วยชื่อไฟล์ ldif ที่สร้างไว้

[root@fc17-64a ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f modify-RootDN.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

เช่นเดียวกัน ต้องไม่มี error ใดๆ ฟ้องขึ้นมา

ดูไฟล์คอนฟิกที่เปลี่ยนไป

[root@fc17-64a ~]# cat /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 b68274b2
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 3d095f44-56d4-1031-9bbd-87b753e3212f
creatorsName: cn=config
createTimestamp: 20120630075209Z
olcSuffix: dc=example,dc=com
olcRootDN: uid=root,ou=People,dc=example,dc=com
olcRootPW:: e1NTSEF9aWdxL0hDL3RCS2JSdEdTM21tTU9ObnloMXZUb2tTOUw=
entryCSN: 20120630093141.393970Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20120630093141Z

 

ข้อมูลอ้างอิง

 

Leave a Reply