จากที่ได้ ติดตั้งและสตาร์ต 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
ข้อมูลอ้างอิง
- ติดตั้งและสตาร์ต OpenLDAP Server บน Fedora 17
- OpenLDAP Software 2.4 Administrator’s Guide
- ติดตั้ง OpenLDAP Server บน Fedora 13
- เพิ่มบัญชีผู้ใช้งานเข้าไปใน OpenLDAP
- เพิ่มข้อมูลเบื้องต้นเข้าไปใน OpenLDAP Server บน Fedora 17
- คอนฟิก User Authentication กับ OpenLDAP Server บน Fedora 17