การติดตั้ง Free Radius ให้เชื่อมต่อ กับ MySQL

เวบไซต์ที่เกี่ยวข้อง
http://rd.cc.psu.ac.th
http://opensource.psu.ac.th
http://freeradius.org
http://www.mysql.com

ผมทำโดยใช้ Linux Fedora Core 2 เป็นหลักนะครับ ส่วน ค่ายอื่นๆ ก็ใช้ได้เหมือนกันครับ
การติดตั้ง จะใช้วิธี Compile Source นะครับ

1. ติดตั้ง MySQL ก่อนครับ (ผมใช้ Version 4.0.16 )
    http://gotoknow.org/archive/2005/10/21/14/06/04/e5690
2. ติดตั้ง Free Radius  (ผมใช้ Version 1.0.5)
    2.1 ขยายแฟ้มที่ DL มาก่อน
           tar -zxvf   freeradius-1.0.2.tar.gz
    cd freeradius-1.0.2
    2.2 set config ของ โปรแกรมก่อน
           find ./ -name config.h | xargs rm -fv
           #./configure --prefix=/radius --sysconfdir=/radius/etc --with-mysql-include-dir=/vc/include/ --with-mysql-lib-dir=/vc/lib/mysql/
           อธิบาย
            --prefix เป็นตั้งค่าให้ Install โปรแกรมไว้ที่ไหน (/vc)
            --sysconfdir เป็นตั้งค่าให้แฟ้ม คอนฟิก (my.cnf) อยูที่ไหน โปรแกรมไว้ที่ไหน (/vc/etc)
    --with-mysql-include-dir สำหรับผู้ติดตั้งแบบคอมไพล์ code นะครับ ถ้าติดตั้งแบบ RPM ก็ไม่ต้องมี
    --with-mysql-lib-dir  สำหรับผู้ที่ติดตั้งแบบคอมไพล์ code นะครับ ถ้าติดตั้งแบบ RPM ก็ไม่ต้องมี
   2.3 Compilied และ Install
           #make
           #make install
           #cp src/main/radiusd /radius/bin/

   2.4 ทดสอบโปรแกรมกันก่อน
          #cd /radius/bin
          #radius
   Fri Oct 21 14:46:38 2005 : Info: Starting - reading configuration files ...

          #radtest root password-root localhost 0 testing123
          ถ้าขึ้น
   Sending Access-Request of id 17 to 127.0.0.1:1812
    User-Name = "root"
    User-Password = "password-root"
    NAS-IP-Address = localhost
    NAS-Port = 0
   Re-sending Access-Request of id 17 to 127.0.0.1:1812
    User-Name = "root"
    User-Password = "307366]27123532333521627713313313013360202"
    NAS-IP-Address = localhost
    NAS-Port = 0
   rad_recv: Access-Reject packet from host 127.0.0.1:1812, id=17, length=20
          แปลว่าโปรแกรมสมบูรณ์แล้ว แต่ที่ Reject เนื่องจากตอนพึงลงเสร็จ โปรแกรมเลยใช้ PAM ในการตรวจสอบ ซึ่ง จะติด สิทธิในการเข้าถึงแฟ้ม /etc/password /etc/shadow
          ถ้าต้องการใช้ PAM ก็ต้องแก้ไขคอนฟิกโปรแกรมก่อน โดยไปที่
          #cd /radius/bin/raddb
          #vi radiusd.conf
          ทำการ comment ยกเลิกบรรทัดข้อความจากเดิม
          user = radiusd
          group = radiusd
          ให้เป็น
          #user = radiusd
          #group = radiusd
   แล้วลองใหม่
          #radtest root password-root localhost 0 testing123
   Sending Access-Request of id 171 to 127.0.0.1:1812
    User-Name = "root"
    User-Password = "password-root"
    NAS-IP-Address = localhost
    NAS-Port = 0
   rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=171, length=20
   2.5 สร้างฐานข้อมูล
          สร้างฐานข้อมูลและสร้าง user สำหรับใช้ ฐานข้อมูล
   User ที่ใช้ ฐานขอมูอคือ root radius คือ radius
          #mysql radius -uroot -p123456
          mysql> create database radius;
          mysql> grant all privileges on radius.* to 'radius'@'localhost' identified by 'radius' ;

          mysql> quit;

          ตัวฐานข้อมูลจะมีอยู่แล้วงชื่อ db_mysql.sql
   ลองค้นดู
         # find ./ -name db_mysql.sql
         ./src/modules/rlm_sql/drivers/rlm_sql_mysql/db_mysql.sql

         #cd ./src/modules/rlm_sql/drivers/rlm_sql_mysql
         #mysql radius -uradius -pradius
         mysql> . db_mysql.sql
         mysql>quit
   2.6  แก้ไขคอนฟิก
         #cd /radius/bin/raddb
         แก้ไข file radiusd.conf (vi /radius/etc/raddb/radiusd.conf)
         หา authorize (/^authorize)
         คอมเมนต์ให้หมด เพื่อข้ามการตรวจสอบอื่นๆยกเว้น sql (ก็แน่ละ ชื่อก็บอกอยู่แล้วว่า การติดตั้ง Free Radius ให้เชื่อมต่อ กับ MySQL)
         authorize {
          ...
          sql
          ...
         }
         หา accounting  (/^accounting)
         ให้คอมเมนต์ให้หมด ถ้าเราไม่ต้องการกำจัดเวลาในการใช้
         accounting {
          ...
         }
         ถ้าต้องการกำจัดเวลาในการใช้ ก็ คอมเมนต์ให้หมด เพื่อข้ามการตรวจสอบอื่นๆยกเว้น sql
         accounting {
          ...
          sql
          ...
         }
         แก้ไข file clients.conf (vi /radius/etc/raddb/clients.conf )

         เพิ่ม
         client 192.168.159.0/24 { // class ของ ip ที่อนุญาติให้ใช้
           secret          = ldap
           shortname       = private-network-1
         }

        แก้แฟ้ท realms (vi /usr/local/radius/etc/raddb/realms )
        เพิ่ม DEFAULT LOCAL

        แก้ไข file sql.conf (vi /radius/etc/raddb/sql.conf)
        แก้ user password databasename
        แก้ ql_user_name = "%{Stripped-User-Name:-%{User-Name:-DEFAULT}}"

   2.6  การเพิ่ม User
           INSERT INTO `radcheck` ( `id` , `UserName` , `Attribute` , `op` , `Value` ) VALUES ( '', 'epatt', 'password', '==', '12345' );

           ปกติ ถ้าตรง accounting{} ใน radius.conf เราตั้งเอาไว้
           ก็จะตั้งค่าเริ่มต้นเป็น 4 ชม. เราสามารถแก้เป็น 7 วันได้ดังนี้

           หน่วนเป็นวินาที 7 วัน = 60*60*24*7 = 604800 วินาที

           แต่ถ้าเราคอมเมนต์ไว้ ตรงนี้ก็ไม่ต้องใส่ก็ได้

           INSERT INTO `radreply` ( `id` , `UserName` , `Attribute` , `op` , `Value` ) VALUES ( '', 'epatt', 'Session-Timeout', ':=', '604800' );
    2.7 วิธีทดสอบก็เหมือนกับ ข้อ 2.4 ครับ เพียงแต่ เปลี่ยนไปใช้ user และ passowrd ที่เราพึ่งใส่เข้าไปครับ
          #radtest epatt 12345 localhost 0 testing123