หลังจาก ติดตั้งและสตาร์ต OpenLDAP Server บน Fedora 17 ตามด้วย ติดตั้งและสตาร์ต OpenLDAP Server บน Fedora 17 เรียบร้อยแล้ว
เราจะลองมาเพิ่มข้อมูลเข้าไปใน ldap กัน โดยจะอธิบายทีละขั้นตอน แสดงปัญหาที่เกิดขึ้น พร้อมวิธีแก้ไข
หมายเหตุ ตัวอย่างในบทความนี้ทดลองบน Fedora 17 ที่ติดตั้งจากแผ่นดีวีดี โดยยังไม่มีการ update ไฟล์ rpm ใดๆ ทั้งสิ้น การทดลองด้วยไฟล์ rpm ที่มีการ update แล้ว หรือลองบนลีนุกซ์เวอร์ชั่นอื่น อาจได้ผลลัพธ์ไม่เหมือนกัน แต่หลักการทำงานและคำสั่งที่รันจะเหมือนกัน หากใช้ OpenLDAP เวอร์ชั่น 2.4
เพิ่มข้อมูล domain เข้า ldap
สร้างไฟล์ ldif สำหรับเพิ่มข้อมูลเบื้องต้น (domain) เข้าไปใน ldap
[root@fc17-64a ~]# cat add-ldap-domain.ldif dn: dc=example,dc=com dc: example objectClass: top objectClass: domain
ใช้คำสั่ง ldapadd เพื่อเพิ่มข้อมูลจากไฟล์ ldif เข้าไปใน ldap
[root@fc17-64a ~]# ldapadd -x -D uid=root,ou=People,dc=example,dc=com -W -f add-ldap-domain.ldif Enter LDAP Password: adding new entry "dc=example,dc=com" ldap_add: Invalid syntax (21) additional info: objectClass: value #1 invalid per syntax
ไม่สำเร็จ มีข้อความฟ้องว่า “objectClass: value #1 invalid per syntax”
ปัญหาคือ ldap ไม่มีข้อมูล objectClass ชนิด domain สาเหตุเป็นเพราะไม่มี schema อธิบาย objectClass ชนิด domain นี้
สามารถใช้คำสั่ง ldapsearch เพื่อแสดง schema ที่มีอยู่ใน ldap
[root@fc17-64a ~]# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
ต้องเพิ่ม schema ที่มีข้อมูลของ objectClass: domain เข้าไปใน ldap ซึ่งอยู่ในไฟล์ ldif ชื่อ cosine.ldif
[root@fc17-64a ~]# cat /etc/openldap/schema/cosine.ldif ... dn: cn=cosine,cn=schema,cn=config objectClass: olcSchemaConfig cn: cosine ... olcObjectClasses: ( 0.9.2342.19200300.100.4.13 NAME 'domain' SUP top STRUCT ...
ใช้คำสั่ง ldapadd เพื่อเพิ่มข้อมูลเข้าไปใน ldap จากไฟล์ ldif
[root@fc17-64a ~]# ldapadd -x -D uid=root,ou=People,dc=example,dc=com -W -f /etc/openldap/schema/cosine.ldif
Enter LDAP Password:
adding new entry "cn=cosine,cn=schema,cn=config"
ldap_add: Insufficient access (50)
ก็ไม่สำเร็จ ขึ้นฟ้องว่า “Insufficient access” แม้ว่าเราจะใช้ RootDN และระบุรหัสผ่าน RootPW ถูกต้องแล้ว
ต้องเปลี่ยนออปชั่นในการรัน เหมือนกับการแก้ไขคอนฟิก slapd
[root@fc17-64a ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
ไม่มี error ฟ้องขึ้นมา ลองใช้ ldapsearch เพื่อแสดง schema ที่มีอยู่ใน ldap
[root@fc17-64a ~]# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
มี schema ชื่อ cosine เพิ่มขึ้นมาแล้ว
ลองใช้คำสั่ง ldapadd เพื่อเพิ่มข้อมูลจากไฟล์ ldif เข้าไปใน ldap อีกครั้ง
[root@fc17-64a ~]# ldapadd -x -D uid=root,ou=People,dc=example,dc=com -W -f add-ldap-domain.ldif
Enter LDAP Password: adding new entry "dc=example,dc=com"
ดูผลการเพิ่มข้อมูลเข้าไปใน ldap ด้วยคำสั่ง ldapsearch
[root@fc17-64a ~]# ldapsearch -x -LLL -H ldap:/// -b dc=example,dc=com
dn: dc=example,dc=com
dc: example
objectClass: top
objectClass: domain
เพิ่มข้อมูล ou เข้า ldap
สร้างไฟล์ ldif สำหรับเพิ่มข้อมูล ou (organizationalUnit) เพื่อเก็บชื่อ user และ group เข้าไปใน ldap
[root@fc17-64a ~]# cat add-ldap-ou.ldif
dn: ou=People,dc=example,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=example,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
ใช้คำสั่ง ldapadd เพื่อเพิ่มข้อมูลจากไฟล์ ldif เข้าไปใน ldap
[root@fc17-64a ~]# ldapadd -x -D uid=root,ou=People,dc=example,dc=com -W -f add-ldap-ou.ldif Enter LDAP Password: adding new entry "ou=People,dc=example,dc=com"
adding new entry "ou=Group,dc=example,dc=com"
ถ้าเพิ่มถูกต้อง ลองดูข้อมูลล่าสุดใน ldap อีกครั้ง ต้องขึ้นตามตัวอย่างด้านล่างนี้
[root@fc17-64a ~]# ldapsearch -x -LLL -H ldap:/// -b dc=example,dc=com dn: dc=example,dc=com dc: example objectClass: top objectClass: domain
dn: ou=People,dc=example,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=example,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
เพิ่มข้อมูล user เข้า ldap
สร้างไฟล์ ldif สำหรับเพิ่มข้อมูล user ชื่อ user01 เข้าไปใน ldap
[root@fc17-64a ~]# cat add-user01.ldif
dn: uid=user01,ou=People,dc=example,dc=com
uid: user01
cn: user01
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}!!
shadowLastChange: 14030
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 100
homeDirectory: /home/user01
ใช้คำสั่ง ldapadd เพื่อเพิ่มข้อมูลจากไฟล์ ldif เข้าไปใน ldap
[root@fc17-64a ~]# ldapadd -x -D uid=root,ou=People,dc=example,dc=com -W -f add-user01.ldif Enter LDAP Password: adding new entry "uid=user01,ou=People,dc=example,dc=com" ldap_add: Invalid syntax (21) additional info: objectClass: value #1 invalid per syntax
ปัญหาเดิมอีกครั้ง คราวนี้ต้องเพิ่ม schema จากไฟล์ ldif ชื่อ nis.ldif
[root@fc17-64a ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=nis,cn=schema,cn=config"
ลองรัน ldapadd เพื่อเพิ่ม user01 อีกครั้ง
[root@fc17-64a ~]# ldapadd -x -D uid=root,ou=People,dc=example,dc=com -W -f add-user01.ldif Enter LDAP Password: adding new entry "uid=user01,ou=People,dc=example,dc=com"
ตรวจสอบชื่อ user ที่เพิ่มเข้าไปใน ldap ด้วย ldapsearch
[root@fc17-64a ~]# ldapsearch -x -LLL -H ldap:/// -b ou=People,dc=example,dc=com dn: ou=People,dc=example,dc=com ou: People objectClass: top objectClass: organizationalUnit
dn: uid=user01,ou=People,dc=example,dc=com
uid: user01
cn: user01
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSEh
shadowLastChange: 14030
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 100
homeDirectory: /home/user01
รันคำสั่ง authconfig-tui
ชื่อ user ที่เราเพิ่มยังมองไม่เห็นจากเครื่องลีนุกซ์
[root@fc17-64a ~]# id user01 id: user01: no such user
ต้องคอนฟิกให้มีการตรวจสอบชื่อผู้ใช้จาก ldap ก่อน ด้วยคำสั่ง authconfig-tui
[root@fc17-64a ~]# authconfig-tui
หน้าจอแสดงดีฟอลต์คอนฟิกของลีนุกซ์
เลือกออปชั่นของ User Information เป็น [x] Use LDAP และเลือก Authentication เป็น [x] Use LDAP Authentication
แล้วกด [Next]
ใส่ข้อมูล LDAP Settings ตามข้อมูลที่เราคอนฟิกไว้
กดปุ่ม [Ok] เพื่อออกจาก authconfig-tui
หมายเหตุ หากมีหน้าจอเปิดดูไฟล์ tail -f /var/log/messages ไปด้วย หากคอนฟิกเลือก Authentication แบบ “Use LDAP Authentication” เมื่อจบการรัน authconfig-tui จะมีการสตาร์ตเซอร์วิส sssd ขึ้นมาด้วย
[root@fc17-64a ~]# tail -f /var/log/messages Jun 30 22:26:18 fc17-64a sssd: Starting up Jun 30 22:26:18 fc17-64a sssd[be[default]]: Starting up Jun 30 22:26:18 fc17-64a sssd[pam]: Starting up Jun 30 22:26:18 fc17-64a sssd[nss]: Starting up
ลองใช้คำสั่ง id เพื่อดูข้อมูล user จาก ldap อีกครั้ง
[root@fc17-64a ~]# id user01 uid=1001(user01) gid=100(users) groups=100(users)
ข้อมูลอ้างอิง
- คอนฟิก OpenLDAP Server เบื้องต้น บน Fedora 17
- ติดตั้งและสตาร์ต OpenLDAP Server บน Fedora 17
- เพิ่มบัญชีผู้ใช้งานเข้าไปใน OpenLDAP
- เพิ่ม แก้ไข ลบ ผู้ใช้งานใน OpenLDAP
- Ubuntu Server Guide >> Network Authentication >> OpenLDAP Server
- คอนฟิก User Authentication กับ OpenLDAP Server บน Fedora 17