เพิ่มข้อมูลเบื้องต้นเข้าไปใน OpenLDAP Server บน Fedora 17

หลังจาก ติดตั้งและสตาร์ต 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)

 

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

 

Leave a Reply

Your email address will not be published.