WordPress MU กับ Active Directory

นานมาแล้ว ผมได้เขียนบทความเกี่ยวกับการใช้งาน WordPress กับ Active Directory ซึ่งมีหลายท่านได้นำไปใช้ และก็สอบถามถึงเรื่องการใช้งานร่วมกับ WPMU ซึ่งจริง ๆ แล้วมันก็สามารถใช้งานได้ดีระดับหนึ่ง แต่อย่างว่าแหละครับ บางอย่างมันก็ทำไม่ได้ เช่น ต้องการให้มันสร้าง Site ให้เองโดยอัตนโนมัติ ปลั๊กอินตัวเดิมมันก็ทำไม่ได้ (คงเพราะมันเอา username เป็น username@domain.local) เลยต้องมองหาตัวใหม่ นั่นก็คือ WPMU-LDAP นั่นเอง

ระบบที่ทำการทดสอบ

1. CentOS release 5.5 (Final)  amd 64

2. wpmu 3.0.5  ทำการติดตั้งลักษณะของ sub domain

3. wpmu-ldap plugin

เริ่มทำการทดสอน

1. ดาวน์โหลดปลั๊กอินจากที่นี่ครับ http://sourceforge.net/projects/wpmu-ldap/files/wpmu-ldap/ เลือกเวอร์ชั่นล่าสุด หรือเวอร์ชั่นที่สามารถใช้งานกับ wpmu ของเราได้ ณ ตอนนี้ผมเลือกปลั๊กอินเวอร์ชั่น 3.0 ครับ

2. ทำการแตกไฟล์ของปลั๊กอินจะพบไฟล์และโฟลเดอร์ อย่างละ 1 อันดังนี้

ldap  ldap_auth.php

3. ทำการก๊อปปี้ไฟล์และโฟลเดอร์ดังกล่าว ไปไว้ใน /var/www/html/wp-content/mu-plugins (สมมุติว่า /var/www/html เป็น DocumentRoot นะครับ)

4. ล็อกอินเข้า wpmu ด้วย admin หรือ user ที่มีสิทธิเทียบเท่า admin จากนั้นจะพบส่วนจัดการ ในกลุ่มของ Super Admin ที่บอกว่า LDAP Options โดยตั้งค่าออปชั่นต่าง ๆ ให้เป็นดังนี้

LDAP-Authentication : enable

Server Encryption: none หรือเลือกตามการตั้งค่าของเซิร์ฟเวอร์นะครับ

Server Address : university.local ให้ใส่ตามชื่อ domain ตามจริง

Server Port : 389

Search DN: dc=university,dc=local ตำแหน่งที่ต้องการให้ค้นหารายชื่อ
Search User DN: cn=noreply,cn=users,dc=university,dc=local ชื่อที่มีสิทธิในการค้นหา และต้องมีรายชื่อนี้อยู่จริง
Search User Password : xxxxxxxxxx รหัสผ่านของ user noreply ที่ทำการกรอกไว้ด้านบน
LDAP Type: windows
Test Connection: yes แค่การทดสอบครั้งแรกครับ ถ้าผ่านแล้ว ก็ไม่จำเป็นต้องทดสอบอีก

5. จากนั้นให้คลิ๊กที่ Save Optins เพื่อบันทึกและทดสอบการเชื่อมต่อไปยัง AD ตามที่ระบุไว้

6. หากการเชื่อมต่อสำเร็จจะปรากฏข้อความดังต่อไปนี้ (หากไม่สำเร็จต้องกลับมาดูการคอนฟิกอีกครั้งครับ ส่วนใหญ่น่าจะเกิดจาก user ที่ระบุครับ บางครั้งไม่ตรงตามความเป็นจริง จำพวก cn,dc ประมาณนั้นครับ)

LDAP Connection Test: Successful!
Saved Options!

7. ในส่วนของ General Settings ให้ตั้งค่าดังนี้

Use Single Sign-On?    : no
Auto-Create WPMU Accounts? : yes
Auto-Create WPMU Blogs? : yes
Create local users?: no
Allow blog admins to add users?: yes
Allow blog admins to bulk add?: no
Disable Public Signup?: no

ที่เหลือเลือกตามใจชอบได้เลยครับ

8. Attribute Mapping ให้ใช้ตามค่ามาตรฐานที่ตั้งไว้ครับ

9. Group Settings จะปล่อยว่างก็ได้ครับ ซึ่งจะทำให้ทุกคนใน AD สามารถล็อกอินได้ทั้งหมด แต่ถ้าเราจะกำหนดสิทธิให้ใช้งานได้เฉพาะกลุ่มก็สามารถทำได้ โดยมีตัวเลือกให้ 2 แบบคือ

9.1 Allow Login:   คือ ยอมรับเฉพาะกลุ่มที่ทำการระบุ

9.2 Deny Login: คือ ไม่ยอมรับกลุ่มที่ทำการระบุ

การระบุนั้นสามารถระบุได้หลายกลุ่ม โดยกำหนดกลุ่มละบรรทัด ในที่นี้ผมกำหนดให้ยอมรับเฉพาะกร๊ป administrators โดยเอาใส่ในที่ Allow Login ดังนี้

cn=administrators,cn=builtin,dc=university,dc=local

10. จากนั้นทำการ Save Groups แล้วลองทดสอบโดยการ ล็อกอินครับ

11. เมื่อทุกอย่างผ่านไปด้วยดี ระบบจะทำการสร้าง Site ให้โดยอัตโนมัติครับ

12. ทดสอบเข้าไซต์ของเราเองครับ โดยจะเป็น http://username.domainname.xx.xx




Openmeeting กับ Active Directory

ได้รับคำสั่งเมื่อซัก 8 เดือนก่อน (ถ้าเป็นลูกก็คงใกล้คลอดละ) ให้นำระบบ Openmeeting ใช้งานร่วมกับ Active Directory นั่งค้นหาข้อมูลบ้าง ลืมทำไปบ้าง จนในที่สุด ก็สามารถลุล่วงได้ในวันนี้ครับ ตามโจทย์ ง่ายแสนง่าย คือ ให้ openmeeting ล็อกอินโดยใช้ user จาก Active Directory แค่นี้เองครับ (อีกข้อเป็นการเชื่อมต่อเข้ากับ SIP ยังไม่ได้ทำเลย มัวแต่ไปทำ OCS )

openmeetings ที่ใช้ เป็นเวอร์ชั่น openmeetings_1_4_rc1_r3326.zip

และระบบปฏิบัติการเป็น Ubuntu Server 9.04  32 bit

ผมขอข้ามขั้นตอนการติดตั้ง openmeeting ไปเลยนะครับ เพราะไม่น่ายากจนเกินไป

** สมมุติว่า ได้ทำการแตกไฟล์ของ red5 ไว้ที่ /usr/share/ ก็แล้วกันนะครับ ข้อมูลอ้างอิงจะได้เหมือนกัน

1. เข้าไปยังไดเร็คทอรี่ /usr/share/red5/webapps/openmeetings/conf

ซึ่งจะมีข้อมูลดังต่อไปนี้  โดยเฉพาะไฟล์ om_ldap.cfg

root@meeting:/usr/share/red5/webapps/openmeetings/conf# ls
any_hibernate.cfg.xml  log                      postgres_hibernate.cfg.xml
hibernate.cfg.xml      mysql_hibernate.cfg.xml  sample_openldap_om_ldap.cfg
install.xml            om_ldap.cfg

2. ใช้ vi หรือ text editor ตัวที่ถนัด ทำการแก้ไขไฟล์ om_ldap.cfg

3. ปรับแต่งข้อมูลดังต่อไปนี้

ldap_server_type=AD

ldap_conn_url=ldap://192.168.1.1:389

ldap_admin_dn=domain\admin-name

ldap_passwd=password

ldap_search_base=OU:user accounts,DC:domain,DC:local     ** ใส่ตามความเป็นจริงใน AD ของท่านเองนะครับ ทั่วไปน่าจะเป็น cn:Users,dc:domain,dc=local

field_user_principal=userPrincipalName

ldap_auth_type=SIMPLE

ldap_sync_password_to_om=yes

4. ส่วนอื่น ๆ ก็ไม่ต้องแก้ไขอะไรนะครับ ปล่อยไว้ตามเดิม

5. จากนั้น ให้เข้าหน้า openmeeting จากหน้าเว็บไซต์ ไปในส่วนของ Administration –> Ldap

6. ให้ทำการเพิ่มข้อมูลของ Domain ที่จะใช้งาน (เป็นแค่การตั้งค่าการเรียกใช้งาน เพราะคอนฟิกจริง ๆ อยู่ที่ om_ldap.cfg)

ความหมายของแต่ละชุด

name คือ ชื่อที่จะสร้างเป็นโปรไฟล์ ตั้งเป็นชื่ออะไรก็ได้ครับ

config file name คือ ชื่อไฟล์ที่ตั้งค่าของ ldap นั่นคือ om_ldap.cfg  (ไฟล์นี้ ต้องอยู่ในโฟลเดอร์เดียวกันกับไฟล์ hibernate.cfg.xml)

Add Domain to username ถ้าเช็คบ็อคตรงช่องนี้ ระบบจำนำโดเม็นจากช่องด้านล่าง (Domain) มาเติมท้ายให้ เช่น username ก็จะกลายเป็น username@rmutl.local โดยอัตโนมัติ แต่มันจะไม่แสดงผลตรงหน้าเว็บนะครับ

Domain คือ ชื่อที่ต้องการนำไปต่อท้าย ตามข้อมูลด้านบน ซึ่งต้องตรงตาม AD ที่สร้างขึ้นครับ

7. หากมีหลายโดเม็นที่ต้องการใช้งาน ก็ให้สร้างไฟล์ om_ldap.cfg เป็นชื่ออื่น แล้วเพิ่มข้อมูลจากหน้านี้ ได้เรื่อย ๆ ครับ แต่ต้องระบุตรง Config file name ให้ตรงกับไฟล์ที่ทำการสร้างไว้ด้วยนะครับ

8. ทำการ restart service ของ red5 ใหม่ครับ

9. ทดสอบการเข้าใช้งานจากหน้าเว็บไซต์ จะสังเกตุเห็น ด้านล่างสุด จะมี ช่องที่บอกว่า Domain  ให้เลือกเป็นชื่อโดเม็นตามที่เราตั้งโปรไฟล์ไว้เมื่อกี้ครับ

10. เพียงเท่านี้ก็สามารถใช้งานได้แล้วครับ หากยังใช้งานไม่ได้ ให้ตรวจสอบการเชื่อมต่อกับ ldap อีกที เช่น user & password ไม่ถูกต้อง หรือ ถูกไฟล์วอลปิดกั้นพอร์ตไว้

** ความจริงดูจาก log ได้ครับ จะเอามาอธิบายวันหลังละกันครับ




wordpress กับ active directory

wordpressก่อนหน้านี้ได้เขียนเรื่อง “เปิดใช้งานฟังก์ชั่น LDAP ให้กับ Moodle” และ “ใช้ Data Mapping ใน Moodle” ที่ทำให้ moodle ใช้งาน user จาก Active directory ได้แล้วนั้น ปรากฏว่า มีสมาชิกบางท่าน สอบถามถึงการตั้งค่า ของ CMS ต่าง ๆ รวมไปถึง wordpress ด้วย  วันนี้ผมจึงได้ทดสอบการเปิดฟังก์ชั่น LDAP ให้กับ WordPress ซึ่งหากใครได้อ่านบทความ ทั้ง 2 บท ที่เอ่ยถึงข้างต้น ก็น่าจะพอคลำทางได้ไม่ยากนัก แต่ยังหากไม่เข้าใจ ก็สามารถอ่านบทความตอนนี้ได้เลยครับ

ต้องขออธิบายก่อนว่า ความแตกต่างที่เห็นได้ชัดระหว่าง moodle กับ wordpress คือ moodle มีฟังก์ชั่น ldap พร้อมอยู่แล้ว แต่ wordpress ต้องหามาติดตั้งเอง ในวันนี้ ผมได้ใช้ plugin ที่ชื่อว่า active directory integration (ณ วันที่ 7 สิงหาคม 2552 เป็นเวอร์ชั่น 0.9.6) ซึ่งสามารถดาวน์โหลดได้จากเว็บไซต์ plugins ของ wordpress ที่นี่ครับ http://wordpress.org/extend/plugins/active-directory-integration/

ควมต้องการพื้นฐานของตัว plugin มีดังนี้ครับ

* WordPress since 2.7.1
* PHP 5
* LDAP support
* OpenSSL Support for TLS (recommended)

โดยเฉพาะ LDAP Module หาเป็น php ที่ติดตั้งบนระบบปฏิบัติการวินโดว์แล้วนั้น สามารถเอาเครื่องหมายเซมิคอลอนที่ด้านหน้า extension=php_ldap.dll ออกได้เลย แต่ถ้าเป็นระบบปฏิบัติการลีนุกซ์ ต้องติดตั้งเองต่างหากนะครับ

เมื่อทำการติดตั้ง และแก้ไข Extension ของ php เป็นที่เรียบร้อยแล้ว ให้เราทำการปรับแต่งค่าของตัว Plugin ดังนี้ครับ

ล็อกอินด้วยสิทธิของ Admin แล้วเข้าไปที่ Options –› Active Directory Integration

ส่วนแรกคือ Active Directory Server

Domain Controllers คือ ชื่อโดเม็นของ Active Directory เช่นของผมมีชื่อว่า university.local

Domain Controllers    university.local

Port   389 คือพอร์ตที่ใช้เชื่อมต่อไปหา Active Directory ก็ปล่อยไว้ตามค่าที่ตั้งไว้ครับ

Use TLS คือ การเชื่อมต่อที่มีความปลอดภัย หากไม่เช็คบ็อคที่ค่านี้ จะทำให้การติดต่อสื่อสารเป็นลักษณะ Plan Text คือ เห็นหมดทั้ง user name และ password เพื่อป้องกันการดักจับข้อมูล ควรอย่างยิ่งที่ต้องเช็คบ็อคที่ค่านี้ด้วยครับ

Bind User   คือ user ที่มีสิทธิในการอ่านข้อมูลของ user โดยปกติก็จะเป็น administrator แต่ควรใช้เป็น user อื่นจะปลอดภัยมากกว่าครับ หากยังไม่มีการตั้งค่า user อื่นที่มีสิทธิในการอ่าน user ณ ตอนนี้ ก็ให้ใช้ administrator ในการทดสอบไปพลาง ๆ ก่อนครับ

Bind User   cn=administrator,cn=users,dc=university,dc=local

Bind User Password   คือ รหัสผ่านของ administrator ที่ใช้ใน Active Directory

Bind User Password   *********

Base DN   คือ OU ที่จะให้โปรแกรมเข้าไปอ่านค่า อันนี้ก็แล้วแต่ละองค์กรจะเป็นคนกำหนดครับ แต่ทั่วไปแล้ว ก็จะอยู่รวมกันที่ Users

Base DN   ou=users,dc=rmutl,dc=local


ส่วนที่ 2 คือ User specific settings

Automatic User Creation คือการสร้าง User ในตัว WordPress หลังจากที่สมาชิก login ผ่านแล้ว หากไม่เช็คตรงนี้ ก็จะเข้าไม่ได้ครับ

Automatic User Update   คือ การบังคับให้สมาชิกที่ login ผ่านเข้า เข้าหน้า Profile ทุกครั้ง เพื่อทำการอัพเดทข้อมูลส่วนตัว ถ้าไม่เช็ค ก็ไม่เป็นไรครับ

Default email domain   คือ การระบุ E-Mail ของหน่วยงาน เช่น ต่อท้ายด้วย @university.local แต่หากไม่ระบุ ตัวโปรแกรมจะดึงข้อมูลจาก mail ในส่วน Attribute ของ AD เองครับ  สรุป ไม่ใส่ดีกว่า

Account Suffix   คือส่วนการเพิ่มเติม User เช่นผมมี user ที่ชื่อว่า teppap@university.local ผมก็ต้องพิมพ์ตามนี้ทั้งหมด แต่ถ้าเราระบุในช่องของ Account Suffix แล้ว ผมก็พิมพ์ user ของผมแค่ teppap ครับ

Account Suffix   university.local

Append account suffix to new created usernames  หาเช็คบ็อคตรงนี้ ระบบจะนำเอา Account Suffix มาต่อท้าย user ของเรา ด้วย และในที่สุดมันจะกลายเป็น E-Mail ของเราครับ (จะแสดงใน Profile) ดังนั้น ไม่จำเป็น ก็ไม่ต้องเช็คตรงช่องนี้ครับ

Display name   คือชื่อที่จะใช้ในการแสดงผล ตรงนี้ เราสามารถแก้ไขใน Profile ได้ครับ ดังนั้น เอาค่ามาตรฐานที่ตั้งมานั่นแหละครับ (ค่าตรงนี้ หากดูใน Profile แล้วดร็อปดาวน์ลิสต์ ก็จะเข้าใจมากขึ้นครับ หรือจะดูจากบทความก่อนหน้านี้ก็ได้ครับผม)

ส่วนที่ 3 คือ Authorization

Authorize by group membership   คือ การเจาะจงว่าจะให้กลุ่มไหนเข้าใช้งานได้บ้าง เช่น กลุ่มของ admin (ต้องมีการสร้างกลุ่มใน active directory ก่อนนะครับ) ถ้าไม่ใส่ มันก็จะเลือก user ทั้งหมดจาก Base DN  ครับ

Role Equivalent Groups คือการกำหนด สิทธิของกลุ่มที่เข้าใช้งาน เช่น กลุ่ม admin เข้ามาใช้งาน ก็จะมีสิทธิเป็น Admin โดยทันที แต่ถ้าหากลุ่ม student เข้ามา ก็จะมีสิทธิแค่อ่าน เป็นต้น  (ถ้าไม่ใส่ ก็จะได้สิทธิเป็น แค่ผู้อ่านครับ คอมเม้นต์ได้ แต่เขียนเรื่องไม่ได้)

ส่วนที่ 4 คือ Brute Force Protection

Maximum number of allowed login attempts คือ จำนวนครั้ง ที่ล็อกอินไม่ผ่านติดต่อกัน ถ้าหากเลยค่าตามจำนวนที่กำหนด User นั้น จะถูกบล็อคทันทีครับ แต่ถ้าใส่เป็น 0 (ศูนย์) ค่าการบล็อค ก็จะถูกยกเลิก

Blocking Time   คือ เวลาที่จะทำการบล็อค หากล็อกอินไม่ผ่านตามจำนวนในข้อแรก

User Notification   คือ การแจ้งไปยัง E-Mail ของ User นั้น ๆ ว่ามีการพยายามใช้ User ของเขาในการล็อกอิน

Admin Notification   คือ การแจ้งไปยัง E-Mail ของ Admin ด้วย ว่าขณะนี้ ได้ทำการบล็อค user ที่พยายามเข้าใช้งาน แบบไม่ถูกต้องแล้ว และจะแจ้งไปยัง E-Mail ที่กำหนด ดังช่องด้านล่าง (E-mail addresses for notifications)

เมื่อกรอกข้อมูลครบตามที่ต้องการแล้ว ให้คลิ๊กที่ Save Change เพื่อทำการบันทึกค่าครับ

การทดสอบ

ให้เปิดเบราเซอร์(ล็อกเอาท์ออกจาก admin ก่อนนะครับ หากใช้เบราเซอร์ตัวเดียวกัน) แล้วคลิ๊กที่ login

ถ้าการติดตั้ง Extension ของ php ถูกต้อง ก็จะสามาถเข้าสู่หน้า Log in แต่ถ้า extension ของ php ผิดพลาด จะมีข้อความแจ้งเตือนดังนี้ครับ

Fatal error: Call to undefined function ldap_connect() in C:\AppServ\www\wordpress\wp-content\plugins\active-directory-integration\ad_ldap\adLDAP.php on line 183

ให้เรากลับไปดูการตั้งค่า extension ของ php อีกครั้ง แล้ว อย่าลืม restart service ของ apache ด้วยละครับ เมื่อแก้เสร็จแล้ว (หรือดีแล้ว)ให้คลิ๊กที่ log in อีกครั้ง

login

ให้กรอก user และ password ที่มีอยู่ใน Active Directory ซึ่งต้องอยู่ใน OU ตาม Base DN ด้วยนะครับ

เพียงเท่านี้ ก็จะสามารถใช้งาน wordpress ร่วมกับ Active Directory ได้แล้วครับ

บทความนี้สามารถประยุกต์ใช้กับ LDAP ได้ด้วยครับผม

profile