ติดตั้ง psu-radius บน ubuntu
บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 06-09-2564 ดูแลโดย WIBOON
เขียนครั้งแรกโดย วิภัทร ศรุติพรหม
- PSU-radius เป็น FreeRADIUS รุ่นที่ปรับแต่งแล้ว (Custom) และใช้ module exec
- PSU-radius เป็น RADIUS server ที่มีการพัฒนา script ให้ตรวจสอบกับ Database ได้หลายตัว เช่น OpenLDAP, Microsoft AD, Mail Server เป็นต้น และมี log record บันทึกการใช้งานเครื่อง PC
- ค่า default ติดตั้งพร้อมใช้งานสำหรับ PSU สามารถ authen กับ PSU passport ได้ทันทีผ่านทาง web service
- สามารถใช้ editor แก้ไขไฟล์ check-ad-ldap.php เพื่อปรับแต่งให้เชื่อมต่อกับ Microsoft AD ของตนเอง
- ทดสอบกับ ubuntu 10.04.4, 12.04 ถึง 12.04.4, 14.04 LTS, 16.04, 18.04, 20.04
- รองรับ freeradius version 3.0.x แล้ว
- freeradius authentication using module exec source code
ขั้นตอนการติดตั้ง
- หลังจากติดตั้ง ubuntu server เสร็จแล้ว
- ให้ดาวน์โหลดแฟ้ม http://ftp.psu.ac.th/pub/psu-radius/psu-radius.tgz มาเก็บไว้ก่อน
ตัวอย่างดาวน์โหลดมาเก็บไว้ที่ /tmp ใช้คำสั่งประมาณว่า
wget http://ftp.psu.ac.th/pub/psu-radius/psu-radius.tgz -N -P /tmp - แตกแฟ้มที่ดาวน์โหลดมา เอาไปเก็บไว้ที่ /tmp ด้วยคำสั่งประมาณว่า
tar -zxpvf /tmp/psu-radius.tgz -C /tmp - เข้าไปทำงานใน directory ที่ถูกสร้างขึ้นมาตอนแตกแฟ้มนี้ ด้วยคำสั่งประมาณว่า
cd /tmp/psu-radius - เริ่มขั้นตอนติดตั้งด้วยคำสั่ง
sudo sh install-psu-radius.sh - ระบบจะเริ่มทำการติดตั้ง รอสักครู่ก็จะเสร็จ
- ให้ reboot server ด้วย
การทดสอบ radius server ทำงานได้
- (version 2.2.x) หากใช้คำสั่ง restart freeradius แล้วพบข้อความว่า Unknown instance แสดงว่า freeradius ยังไม่ได้ start ต้องมี error เกิดขึ้น ให้ตรวจสอบไฟล์ /var/log/freeradius/radius.log
หากพบข้อความทำนองว่า modules files duplicate file.dpkg-org
ตรวจสอบใน /etc/freeradius/modules/ จะพบว่าไฟล์ files.dpkg-org เพิ่มมา และมีไฟล์ชื่อ files ด้วย
ให้ลบไฟล์ชื่อ files.dpkg-org ทิ้ง แล้ว start freeradius
หมายเหตุ ubuntu
14.04 ใช้คำสั่ง /etc/init.d/freeradius start
16.04 ใช้คำสั่ง service freeradius start
18.04 ใช้คำสั่ง systemctl start freeradius.service - ค่า secret ของ client 127.0.0.1 คือ testing123
- ทดสอบ user ใน server แบบ localhost โดยตรง ใช้คำสั่งว่า
sudo radtest mama 123456 127.0.0.1 0 testing123 - ค่า secret ของ client ใน network คือ mytestkey
- ทดสอบ user ใน server ผ่าน network ใช้คำสั่งประมาณว่า
sudo radtest mama 123456 server_ip 0 mytestkey - หลังทดสอบผ่านแล้ว ควรล้างประวัติด้วย history -c
การตั้งค่าการใช้งานเกี่ยวกับ shared secret key
- หากต้องการปรับตั้งค่า shared secret key ที่ radius server บริการแก่ localhost
(version 2.2.x) ให้แก้ไขรายการ client ที่แฟ้ม /etc/freeradius/clients.conf
ตัวอย่างประมาณว่า ตั้งค่า secret สำหรับ localhost 127.0.0.1
client 127.0.0.1 {
secret = testing123
}
(version 3.0.x) ให้แก้ไขรายการ client ที่แฟ้ม /etc/freeradius/3.0/clients.conf
ตัวอย่างประมาณว่า ตั้งค่า secret สำหรับ localhost 127.0.0.1
client localhost {
ipaddr = 127.0.0.1
secret = testing123
} - หากต้องการปรับตั้งค่า shared secret key ให้ radius server นี้บริการผ่าน network
(version 2.2.x) ให้แก้ไขรายการ client ผ่าน network ที่แฟ้ม /etc/freeradius/clients.conf
ตัวอย่างประมาณว่า ตั้งค่า secret สำหรับ network 10.0.5.0/24
client 10.0.5.0/24 {
secret = mytestkey
}
(version 3.0.x) ให้แก้ไขรายการ client ผ่าน network ที่แฟ้ม /etc/freeradius/3.0/clients.conf
ตัวอย่างประมาณว่า ตั้งค่า secret สำหรับ network 10.0.5.0/24
client 10.0.5.0/24 {
ipaddr = 10.0.5.0/24
secret = mytestkey
} - หลังจากปรับแต่งค่าของ freeradius จะต้องรีสตาร์ทเซอร์วิส ubuntu
14.04 ใช้คำสั่ง /etc/init.d/freeradius restart
16.04 ใช้คำสั่ง service freeradius restart
18.04 ใช้คำสั่ง systemctl restart freeradius.service
การตั้งค่าเกี่ยวกับ PSU-radius
- การยืนยันตัวตนใช้ username / password ตั้งให้ authen กับ server ต่างๆได้ที่แฟ้ม /etc/freeradius/imap-authen.sh เลือกตั้งค่าดังนี้
CHECK_PREBLACKLIST="YES" หมายถึงตรวจสอบระบบ blacklist ด้วย (default=YES)
รายชื่อ blacklist อยู่ในแฟ้ม /etc/freeradius/preblacklist.txt
ถ้ามีชื่อปรากฏในแฟ้ม /etc/freeradius/preblacklist.txt ระบบจะไม่ไป authen เพื่อลดการโดน spam ถล่ม
AUTHEN_SHADOW="YES" หมายถึงให้ authen กับแฟ้ม /etc/passwd ด้วย (default=YES)
AUTHEN_AD_LDAP="NO" หมายถึงไม่ต้อง authen กับ ldaps server (default=NO)
ถ้าต้องการให้ authen กับ ldaps server ต้องแก้ไขตัวแปรเปลี่ยนเป็น AUTHEN_AD_LDAP="YES"
แล้วแก้ไขแฟ้ม /etc/freeradius/check-ad-ldap.sh ตั้งค่า LDAP SEVER ให้ถูกต้อง
AUTHEN_PSU_PASSPORT="YES" หมายถึง authen กับระบบ PSU passport (default=YES)
ถ้าไม่ต้องการให้ authen กับระบบ PSU passport ต้องแก้ไขตัวแปรเปลี่ยนเป็น AUTHEN_PSU_PASSPORT="NO"
AUTHEN_PSU_MAIL="NO" หมายถึงไม่ต้อง authen กับ mail server ต่างๆใน PSU ด้วย (default=NO)
ถ้าต้องการให้ authen กับ mail server ต่างๆใน PSU ต้องแก้ไขตัวแปรเปลี่ยนเป็น AUTHEN_PSU_MAIL="YES"
ให้ปรับค่า DEFAULT_PSU_MAIL_SERVER="mail.psu.ac.th" ให้เป็น mail server ที่ต้องการ
AUTHEN_MAIL="NO" หมายถึงไม่ต้อง authen กับ mail server อื่นๆ นอก PSU เช่น gmail, hotmail, yahoo ด้วย (default=NO)
ถ้าต้องการให้ authen กับ mail server ต้องแก้ไขตัวแปรเปลี่ยนเป็น AUTHEN_MAIL="YES"
ให้ปรับค่า DEFAULT_MAIL_SERVER="gmail.com" ให้เป็น mail server ที่ต้องการ (หมายเหตุ ในวันที่เขียนบทความนี้ gmail account มีการตรวจสอบเข้มกว่า ทำให้ผู้ใช้ต้องตั้งค่าที่ gmail ให้เป็นแบบ simple authentication)
AUTHEN_LDAP="NO" หมายถึงไม่ต้อง authen กับ PSU ldap server (default=NO)
ถ้าต้องการให้ authen กับ PSU ldap server ต้องแก้ไขตัวแปรเปลี่ยนเป็น AUTHEN_LDAP="YES"
แล้วแก้ไขแฟ้ม /etc/freeradius/check-ldap.sh ตั้งค่า LDAP SEVER ให้ถูกต้องเช่น
LDAP_HOST="ldap://your.domain"
LDAP_BASE="dc=aa,dc=bb"
AUTHEN_SSH="NO" หมายถึงไม่ต้อง authen กับ ssh server (default=NO)
ถ้าต้องการให้ authen กับ ssh server ต้องแก้ไขตัวแปรเปลี่ยนเป็น AUTHEN_SSH="YES"
และปรับค่า SSH_SERVER="server.domain" ให้เป็น ssh server ที่ต้องการ - เมื่อ authen ด้วย username / password ถูกต้องผ่านมาได้แล้ว ต่อไปก็เป็นการตรวจสอบรายชือผู้มีสิทธิ์ใช้บริการ
แก้ไขระบบตรวจสอบสิทธิ์ที่แฟ้ม /etc/freeradius/my-authen.sh ตั้งค่าดังนี้
CHECK_BLACKLIST="YES" หมายถึงตรวจสอบระบบ blacklist ด้วย (default=YES)
รายชื่อ blacklist อยู่ในแฟ้ม /etc/freeradius/blacklist.txt
ถ้ามีชื่อปรากฏในแฟ้ม /etc/freeradius/blacklist.txt จะถูกตัดสิทธ์ใช้งาน
ALL_PASS="YES" หมายถึงไม่ต้องตรวจสอบ ให้ผ่านได้ทุกคน (default=YES)
หากเปลี่ยนป็น ALL_PASS="NO" หมายถึงว่าต้องตรวจสอบขั้นตอนอื่นตามลำดับถัดไป
CHECK_VIPLIST="NO" หมายถึงไม่ต้องตรวจสอบระบบแฟ้ม vip ด้วย (default=NO)
ถ้าเปลี่ยนเป็น YES จะหมายถึงต้องตรวจสอบด้วยว่า หากมีรายชื่อปรากฏในแฟ้ม /etc/freeradius/viplist.txt ก็จะสามารถผ่านได้เลย
CHECK_PSU_STAFF="NO" หมายถึงไม่ตรวจสอบว่าเป็น staff ของ PSU หรือไม่ (default=NO)
ถ้าเปลี่ยนเป็น YES จะหมายถึงว่า ไม่อนุญาตทุกคนที่ authen ผ่าน แต่อนุญาตเฉพาะบุคลากร
CHECK_PSU_STUDENT="NO" หมายถึงไม่ตรวจสอบว่าเป็น student ของ PSU หรือไม่ (default=NO)
ถ้าเปลี่ยนเป็น YES จะหมายถึงว่า ไม่อนุญาตทุกคนที่ authen ผ่าน แต่อนุญาตเฉพาะนักศึกษาที่ระบุเจาะจะตามค่าตัวแปร MYSTUDENT=" " - มีบันทึก log record อยู่ที่ /var/log/freeradius/myauthen และ /var/log/freeradius/myaccount ซึ่งต้องใช้สิทธิ Administrator หรือ root เพื่อเข้าดูข้อมูล
ตัวอย่างเช่น
root@ubuntu:~# tail /var/log/freeradius/myauthen/20150202
20150202:15:55:00;"lulu";10.0.100.251;1422867300;CHECK_IN;;127.0.1.1;;PASS
20150202:15:55:21;"5310110293";10.0.100.251;1422867321;CHECK_IN;;127.0.1.1;;PASS
20150202:15:57:13;"5310110293";10.0.100.4;1422867433;CHECK_IN;;10.0.100.4;;PASS
ส่วนข้างล่างนี้สำหรับ PSU User
วิธีใช้งาน check-ad-ldap.php ที่พร้อมใช้ LDAPS ของ PSU Passport (ขั้นตอนสำหรับ AUTHEN_AD_LDAP="YES")
การขอใช้งาน LDAPS
ขั้นตอน
1.ไปที่ https://passport.psu.ac.th/
2.ดาวน์โหลด แบบฟอร์มขอใช้ระบบยืนยันตัวตน แล้วทำตามคำแนะนำในหน้าเว็บ เช่น IP ที่นำไฟล์ check-ad-ldap.php ไปรัน
3.(ในกรณีเร่งด่วน) อีเมลเรื่อง "php-ldap for PSU Passport" ส่งมาที่ passport@psu.ac.th (แล้วส่งเป็นหนังสือทางการตัวจริงตามหลัง) พร้อมแนบไฟล์ แบบฟอร์มขอใช้ระบบยืนยันตัวตน ที่กรอกแล้ว หากใช้งานกับ PSU12-Sritrang/PSU-RADIUS แจ้งด้วยว่า "ขอรับรหัสผ่านสำหรับ enable.psu สำหรับ PSU12-Sritrang/PSU-RADIUS"
วิธีใช้งาน
ขั้นตอน
1.โปรดตรวจสอบ php-ldap ติดตั้งแล้ว และ ไฟล์ /etc/ldap/ldap.conf มีบรรทัดนี้ไว้ด้วย
TLS_REQCERT never
2.หากยังไม่มีไฟล์ ให้ไปดาวน์โหลดไฟล์ 3 ไฟล์นี้จาก ftp server เอามาไว้ใน /etc/freeradius
cd /etc/freeradius
wget http://ftp.psu.ac.th/pub/psu-radius/updatefiles/check-ad-ldap_php.psu.gpg -O check-ad-ldap_php.psu.gpg
wget http://ftp.psu.ac.th/pub/psu-radius/updatefiles/enable.psu -O enable.psu
wget http://ftp.psu.ac.th/pub/psu-radius/updatefiles/testpsupassport.sh -O testpsupassport.sh
3.รัน bash enable.psu
คำอธิบาย enable.psu จะเป็น shell script ทำงาน 2 อย่าง
- รอรับรหัสผ่านเพื่อถอดรหัสไฟล์ประเภท gpg เปลี่ยนไฟล์ check-ad-ldap.php ให้กลายเป็นสูตร PSU
- เปลี่ยน imap-authen.sh บรรทัด AUTHEN_AD_LDAP="YES" และ AUTHEN_PSU_PASSPORT="NO" ด้วยคำสั่ง sed ให้เลย
4.แล้วไปเปิดไฟล์ check-ad-ldap.php ดูว่าจะใช้ dc ของวิทยาเขตไหน ก็แก้เองเลย
เวอร์ชัน updated 2559-08-11 จะเกิดไฟล์ /var/www/html/userinfo.txt ด้วย เปลี่ยนได้ที่ตัวแปร infopath
เวอร์ชันใหม่นี้(updated 2559-10-17) จะวางไฟล์ไว้ที่ /var/www/ticker/userinfo.txt แต่ก็เปลี่ยนได้ที่ตัวแปร infopath
ข้อสำคัญ สิทธิในไฟล์ userinfo.txt ต้องเป็นของ freerad (เปลี่ยนสิทธิด้วยคำสั่ง chown freerad userinfo.txt)
5.ทดสอบ
bash testpsupassport.sh php-ldap หรือ
bash testpsupassport.sh webservice