ติดตั้ง psu-radius บน ubuntu

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 17-09-2561

ดูแลโดย 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
  • รองรับ freeradius version 3.0.x แล้ว
  • freeradius authentication using module exec source code


ขั้นตอนการติดตั้ง

  1. หลังจากติดตั้ง ubuntu server เสร็จแล้ว
  2. ให้ดาวน์โหลดแฟ้ม 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
  3. แตกแฟ้มที่ดาวน์โหลดมา เอาไปเก็บไว้ที่ /tmp ด้วยคำสั่งประมาณว่า
    tar -zxpvf /tmp/psu-radius.tgz -C /tmp
  4. เข้าไปทำงานใน directory ที่ถูกสร้างขึ้นมาตอนแตกแฟ้มนี้ ด้วยคำสั่งประมาณว่า
    cd /tmp/psu-radius
  5. เริ่มขั้นตอนติดตั้งด้วยคำสั่ง
    sudo sh install-psu-radius.sh
  6. ระบบจะเริ่มทำการติดตั้ง รอสักครู่ก็จะเสร็จ
  7. ให้ reboot server ด้วย


การทดสอบ radius server ทำงานได้

  1. (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
  2. ค่า secret ของ client 127.0.0.1 คือ testing123
  3. ทดสอบ user ใน server แบบ localhost โดยตรง ใช้คำสั่งว่า
    sudo radtest mama 123456 127.0.0.1 0 testing123
  4. ค่า secret ของ client ใน network คือ mytestkey
  5. ทดสอบ user ใน server ผ่าน network ใช้คำสั่งประมาณว่า
    sudo radtest mama 123456 server_ip 0 mytestkey
  6. หลังทดสอบผ่านแล้ว ควรล้างประวัติด้วย history -c


การตั้งค่าการใช้งานเกี่ยวกับ shared secret key

  1. หากต้องการปรับตั้งค่า 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
    }
  2. หากต้องการปรับตั้งค่า 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
    }
  3. หลังจากปรับแต่งค่าของ freeradius จะต้องรีสตาร์ทเซอร์วิส ubuntu
    14.04 ใช้คำสั่ง /etc/init.d/freeradius restart
    16.04 ใช้คำสั่ง service freeradius restart
    18.04 ใช้คำสั่ง systemctl restart freeradius.service


การตั้งค่าเกี่ยวกับ PSU-radius

  1. การยืนยันตัวตนใช้ 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 ที่ต้องการ

  2. เมื่อ 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=" "

  3. มีบันทึก 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