Tag Archives: Ubuntu 12.04

หลังจากเปิด Shared Folders ของ VirtualBox บน Ubuntu 10.04 และ 12.04 แล้ว แต่ไม่สามารถเข้าใช้งาน Folder ได้

หลังจากเปิด Shared Folders ของ VirtualBox บน Ubuntu 10.04 และ 12.04 แล้ว แต่ไม่สามารถเข้าใช้งาน Folder ได้ เป็นเพราะ user ของเราไม่ได้อยู่ในกลุ่ม vboxsf ดังนั้นเมื่อเข้าใช้งาน Folder จะเกิด Error ดังรูป

virtualbox_permission

ทางแก้

เพิ่ม user ของเราเข้าไปในกลุ่มของ vboxsf ดังนี้

$ sudo usermod -a -G vboxsf jack

Restart เครื่องสักที ก็ใช้ได้ละ

Ref : usermod example – Add a existing user to existing group

 

ถ้าไม่ได้อีกก็ใช้แปลงเป็น root เลย ด้วยคำสั่ง sudo -i

ติดตั้ง freeradius บน ubuntu

บันทึกนี้ปรับปรุงล่าสุดเมื่อ 15-02-2555
ดูแลโดย WIPAT

หมายเหตุ:  ต้องระวัง การปรับแต่งค่า freeradius 2.x บน ubuntu เปลี่ยนแปลงไปจาก freeradius 1.x ไปมาก

    http://opensource.cc.psu.ac.th/wiki-opensource/skins/monobook/bullet.gif); color: rgb(0, 0, 0); font-family: sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); “>

  • ทดสอบกับ ubuntu 10.04 และ freeradius 2.x
  • ต้นฉบับ freeradius อยู่ที่ http://opensource.cc.psu.ac.th/wiki-opensource/skins/monobook/external.png); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-top: 0px; padding-right: 13px; padding-bottom: 0px; padding-left: 0px; background-position: 100% 50%; background-repeat: no-repeat no-repeat; “>http://freeradius.org
  • สมมติว่า radius server นี้มีหมายเลข ip เป็น 10.0.1.1
  1. ติดตั้งด้วยคำสั่ง sudo apt-get install freeradius freeradius-utils freeradius-mysql freeradius-ldap gawk
  2. สั่งให้ทำงานด้วยคำสั่ง sudo /etc/init.d/freeradius start
  3. ทดสอบว่า freeradius ติดตั้งใช้งานได้แล้วด้วยตัวอย่างคำสั่ง*** จากตัวอย่างให้แทนข้อความ your_root_password ด้วยรหัสผ่านของ root
    sudo radtest your_name your_password 127.0.0.1 0 testing123
    หากถูกต้องจะได้รับข้อความตอบกลับประมาณว่า
    Sending Access-Request of id 232 to 127.0.0.1 port 1812
    User-Name = “your-name”
    User-Password = “your_password”
    NAS-IP-Address = 255.255.255.255
    NAS-Port = 0
    rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=232, length=20

    ถึงตอนนี้แสดงว่า freeradius ใช้งานได้แล้ว แต่ใช้ได้เพียง localhost คือ 127.0.0.1

  4. หากต้องการอนุญาติให้ radius client เข้ามาใช้ radius server นี้ได้
    ต้องแก้ไขสิทธิ์ที่แฟ้ม /etc/freeradius/clients.conf  ปรับตั้งให้มีค่าดังประมาณตัวอย่างนี้
    client 10.0.1.0/24 {
    secret          = mytestkey
    shortname       = private-network
    }
    ตัวอย่างนี้คือให้ radius client ที่มีหมายเลข ip 10.0.1.x  สามารถเข้ามาใช้ด้วย secret key ว่า mytestkey
    เมื่อแก้ไขเสร็จแล้วให้ reload ใหม่ ด้วยคำสั่ง  sudo /etc/init.d/freeradius force-reload
    ลองทดสอบด้วยคำสั่งตัวอย่าง sudo radtest your_name your_password 10.0.1.1 0 mytestkey
    *** ค่า your_password คือ รหัสผ่านของ your_name และ 10.0.1.1 คือหมายเลข ip ของ radius server
    ได้ผลแสดงข้อความดังตัวอย่าง
    Sending Access-Request of id 246 to 10.0.1.1:1812
    User-Name = “your_name”
    User-Password = “your_password”
    NAS-IP-Address = 255.255.255.255
    NAS-Port = 0
    rad_recv: Access-Accept packet from host 10.0.1.1:1812, id=246, length=20ถึงขั้นตอนนี้เป็นอันเปิดบริการระบบ radius server ได้แล้ว
  5. ขั้นตอนการทำงานของ configuration ของ freeradius
    แฟ้ม /etc/freeradius/radiusd.conf  เป็นที่ปรับค่าของระบบต่างๆหากเป็น freeradius 2.x จะมีการแยกแฟ้มย่อยออกไปจาก /etc/freeradius/radiusd.conf
    ไปอยู่ที่ /etc/freeradius/sites-available/default  และ /etc/freeradius/modules
    หากเป็น freeradius 1.x ทุกอย่างจะกระจุกตัวในแฟ้ม /etc/freeradius/radiusd.conf

    เมื่อ radius server ได้รับการติดต่อจากผู้ใช้ radius client
    วิธีการตรวจสอบคุณสมบัติของผู้ใช้อยู่ในส่วนที่ชื่อ authorize {…}
    ภายใน authorize {…} นี้ ประกอบด้วยชื่อ modules ตรวจสอบต่างๆ

    หากคุณสมบัติไม่ตรง ปรกติแล้วระบบก็จะรีบดีดออกมาพร้อมแจ้ง reject
    แต่เราสามารถกำหนดให้ไปตรวจสอบต่อกับ authorize modules
    เรียงลำดับอันถัดๆไปที่เหลืออื่นๆได้อีก

    หากคุณสมบัติผ่าน ก็จะเข้าขั้นตอนตรวจสอบรหัสผ่านของผู้ใช้ว่าถูกต้องหรือไม่
    โดย authorize modules จะเลือก modules ที่ต้องการเอง จากส่วนที่ชื่อ authenticate {…}

    หากรหัสผ่านถูกต้อง ก็จะเข้าสู่ส่วนของ postauth {…}
    เป็นการตรวจสอบทิ้งท้ายก่อนส่งคืนค่ากลับให้แก่ radius client ที่ติดต่อมา

    การบันทึกประวัติใช้งานอยู่ในส่วน accounting {…}

    modules ทุกตัวที่ใช้งาน จะต้องได้รับการประกาศไว้ก่อนแล้ว
    หากเป็น freeradius 2.x จะแยก modules ออกเป็นแฟ้มย่อยๆอยู่ที่ directory ชื่อ /etc/freeradius/modules
    หากเป็น freeradius 1.x จะมี modules อยู่ในแฟ้ม /etc/freeradius/radiusd.conf พื้นที่ส่วนของชื่อ modules {…}

  6. หากต้องการตรวจสอบผู้ใช้กับ mail server ผ่าน imap/pop3 ให้ทำดังนี้ตัวอย่างนี้จะตรวจสอบกับ mail server ชื่อ your.mail.server
    ต้องติดตั้ง php และ php-imap ก่อนแล้ว ติดตั้งด้วยคำสั่ง sudo apt-get install php5 php5-imap php5-cli
    แก้ไขแฟ้ม /etc/php5/cli/conf.d/imap.ini ตรวจสอบ/เพิ่มให้มีบรรทัดตัวแปรว่า extension=imap.so

    ต่อไปสร้างแฟ้ม /etc/freeradius/imap.php ให้มีเนื้อหาว่า
    <?php
    error_reporting(0);
    $host = $argv[1];
    $username = $argv[2];
    $password = $argv[3];
    $service = $argv[4];
    $imap_host=”{” . $host . $service . “}”;
    $mbox = imap_open(“$imap_host”, “$username”, “$password”);
    $folders = imap_listmailbox($mbox, “$imap_host”, “*”);
    if ($folders == false) {
    echo “false”;
    } else {
    echo “true”;
    }
    imap_close($mbox);
    ?>

    สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/imap-authen.sh มีเนื้อหาว่า
    #!/bin/bash
    #exit 0 = valid ; exit 1 = invalid
    AUTHEN_SHADOW=”YES”
    AUTHEN_MAIL=”YES”
    AUTHEN_LDAP=”NO”
    AUTHEN_PSU_PASSPORT=”NO”
    NAME=$(echo ${USER_NAME} | cut -d'”‘ -f2)
    PASSWORD=$(echo ${USER_PASSWORD} | cut -d'”‘ -f 2-|sed “s/\”$//”)
    KEY=”false”
    if [ “${AUTHEN_SHADOW}” = “YES” ] ; then
    KEY=$(/bin/sh /etc/freeradius/check-shadow.sh “${NAME}” “${PASSWORD}”)
    if [ “${KEY}” = “true” ] ; then
    exit 0
    fi
    fi
    if [ “${AUTHEN_LDAP}” = “YES” ] ; then
    KEY=$(/bin/sh /etc/freeradius/check-ldap.sh “${NAME}” “${PASSWORD}”)
    if [ “${KEY}” = “true” ] ; then
    exit 0
    fi
    fi
    if [ “${AUTHEN_PSU_PASSPORT}” = “YES” ] ; then
    USER=$(echo ${NAME} | cut -d’@’ -f1)
    KEY=$(/usr/bin/php /etc/freeradius/soap-authen.php ${USER} ${PASSWORD} $1 $2})
    if [ “${KEY}” = “true” ] ; then
    exit 0
    fi
    fi
    if [ “${AUTHEN_MAIL}” = “YES” ] ; then
    IS_EMAIL=$(echo ${NAME}|grep “@”)
    if [ -n “${IS_EMAIL}” ] ; then
    USER=$(echo ${NAME} | cut -d’@’ -f1)
    DOMAIN=$(echo ${NAME} | cut -d’@’ -f2)
    else
    USER=${NAME}
    DOMAIN=”mail.psu.ac.th”
    fi
    case ${DOMAIN} in
    psu.ac.th)
    HOST=”mail.psu.ac.th”
    SERVICE=”:143/imap/notls” ;;
    pharmacy.psu.ac.th)
    HOST=”mail.pharmacy.psu.ac.th”
    SERVICE=”:143/imap/notls” ;;
    pn.psu.ac.th)
    HOST=”bunga.pn.psu.ac.th”
    SERVICE=”:143/imap/notls” ;;
    gmail.com)
    HOST=”pop.gmail.com”
    SERVICE=”:995/pop3/ssl” ;;
    live.com)
    HOST=”pop3.live.com”
    USER=${NAME}
    SERVICE=”:995/pop3/ssl” ;;
    *)
    HOST=${DOMAIN}
    SERVICE=”:110/pop3/notls” ;;
    esac
    KEY=$(/usr/bin/php /etc/freeradius/imap.php ${HOST} ${USER} ${PASSWORD} ${SERVICE})
    if [ “${KEY}” = “true” ] ; then
    exit 0
    fi
    fi
    exit 1

    สร้างแฟ้มแบบ text ชื่อ /etc/freeradius/myusers มีเนื้อหาว่า
    DEFAULT Auth-Type := Accept
    Exec-Program-Wait=”/bin/sh /etc/freeradius/imap-authen.sh”

    หากเป็น freeradius 2.x ให้แก้ไขแฟ้ม /etc/freeradius/modules/files เติมข้อความต่อท้ายแฟ้มว่า
    files  myimap  {
    usersfile = ${confdir}/myusers
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ authorize {…} ประมาณบรรทัดที่ 152 ที่บริเวณข้อความขึ้นต้นด้วย authorize {

    #  Read the ‘users’ file
    files
    ให้ comment บรรทัด files เพื่อยกเลิกค่านี้  แล้วแทรกเพิ่มบรรทัดข้อความเพิ่ม กลายเป็นว่า
    #    files
    แทรกเพิ่มบรรทัดข้อความว่า myimap ต่อไปอีกบรรทัด กลายเป็นว่า
    #   files
    myimap

    เสร็จแล้วให้สั่งทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
    แค่นี้ก็เสร็จแล้ว ทดสอบผลงานได้เลย

  7. หากต้องการว่าหลังผ่านการตรวจสอบ username/password ถูกต้องแล้ว
    จะทำการบันทึกลงแฟ้ม log file เก็บไว้ที่ /var/log/freeradius/myauthen และยังต้องการตรวจวิธีการพิเศษเฉพาะของตนเองเพิ่มเติมอีกตัวอย่างต้องการไม่อนุญาติให้ผู้ใช้ชื่อ demo และ abc ใช้งาน ให้ทำดังนี้
    สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/my-authen.sh มีเนื้อหาว่า
    #!/bin/bash
    ###exit 0 = valid ; exit1 = invalid
    ALL_PASS=”YES”
    CHECK_STAFF=”NO”
    CHECK_STUDENT=”NO”
    export LANG=en.US
    MYDIR=”/var/log/freeradius/myauthen”
    if [ ! -d ${MYDIR} ] ; then
    mkdir -p ${MYDIR}
    fi
    TODAY=$(date “+%Y%m%d”)
    MYFILE=”${MYDIR}/${TODAY}”
    if [ ! -e ${MYFILE} ] ; then
    touch ${MYFILE}
    fi
    MYTIME=$(echo $1|awk ‘{print strftime(“%Y%m%d:%H:%M:%S”,$1)}’)
    echo “${MYTIME};${USER_NAME};$2;$1;PASS” >> ${MYFILE}
    MYUSER=$(echo $USER_NAME | cut -d'”‘ -f2)
    if [ “${ALL_PASS}” = “YES” ] ; then
    exit 0
    fi
    if [ “${CHECK_STAFF}” = “YES” ] ; then
    case “${MYUSER}” in
    demo) exit 1 ;;
    *) exit 0 ;;
    esac
    fi
    if [ “${CHECK_STUDENT}” = “YES” ] ; then
    case “${MYUSER}” in
    demo) exit 1 ;;
    *) exit 0 ;;
    esac
    fi
    exit 1

    หากเป็น freeradius 2.x  ให้แก้ไขแฟ้ม /etc/freeradius/modules/exec เติมข้อความต่อท้ายแฟ้มว่า
    exec my-auth {
    program = “/bin/sh /etc/freeradius/my-authen.sh %l %{Packet-Src-IP-Address}”
    wait = yes
    input_pairs = request
    output_pairs = reply
    packet_type = Access-Accept
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ post-auth {…} ประมาณบรรทัดที่ 439  ที่บริเวณข้อความขึ้นต้นด้วย post-auth {

    แทรกเพิ่มบรรทัดข้อความเพิ่ม
    my-auth

    เสร็จแล้วให้สั่งทำงานใหม่ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload

  8. การบันทึกประวัติการใช้งานของ radius โดย defualt จะบันทึกไว้ในพื้นที่  /var/log/freeradius/radacct
    โดยแยกเป็น directory ของแต่ละหมายเลข ip ของ radius client
    แล้วยังแตกย่อยออกเป็นแฟ้มของแต่วันอีก ซึ่งอาจไม่สะดวกต่อการวิเคราะห์ข้อมูล
    เราสามารถเพิ่ม module บันทึกประวัติการใช้งานเพิ่มเติมจากของเดิม ตัวอย่างคือ
    ต้องการบันทึกไว้ใน directory ชื่อ /var/log/freeradius/myaccount
    แล้วเก็บแฟ้มแยกเป็นรายวันในรูปแบบ 20060729 ภายในแฟ้มมีรูปแบบว่า
    20060729:15:54:05;”demo”;10.0.0.153;1154163245;”a5f56ebd6ebc1321″;Start;
    20060729:15:55:06;”demo”;10.0.0.153;1154163306;”a5f56ebd6ebc1321″;Stop;61ให้ทำดังนี้ สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/log-radius-account.sh มีเนื้อหาว่า
    #!/bin/bash
    export LANG=en.US
    MYDIR=”/var/log/freeradius/myaccount”
    if [ ! -d ${MYDIR} ] ; then
    mkdir -p ${MYDIR}
    fi
    TODAY=$(date “+%Y%m%d”)
    myfile=”${MYDIR}/${TODAY}”
    if [ ! -e ${MYDIR} ] ; then
    touch ${MYDIR}
    fi
    MYTIME=$(echo $1|awk ‘{print strftime(“%Y%m%d:%H:%M:%S”,$1)}’)
    echo “${MYTIME};${USER_NAME};$2;$1;${ACCT_UNIQUE_SESSION_ID};${ACCT_STATUS_TYPE};${ACCT_SESSION_TIME}” >> ${MYFILE}
    แฟ้ม shell script จบแค่นี้

    หากเป็น freeradius 2.x  ให้แก้ไขแฟ้ม /etc/freeradius/modules/exec เติมข้อความต่อท้ายแฟ้มว่า
    exec my-log-account {
    wait = no
    program = “/bin/sh /etc/freeradius/log-radius-account.sh %l %{Packet-Src-IP-Address} ”
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ accounting  {…}ประมาณบรรทัดที่ 358  ที่บริเวณข้อความ accounting {

    detail
    ให้แทรกเพิ่มบรรทัดข้อความว่า
    my-log-account

    เสร็จแล้วให้สั่งทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload

  9. radius server สามารถส่งค่าบอกเวลาที่ยังคงเหลือให้ใช้งาน
    โดยส่งค่ากลับมาที่ attribute ชื่อ Session-Timeout
    แต่ตัวมันเองคำนวณไม่เป็น ต้องหาวิธีอื่นในการคำนวณเวลา
    แล้วส่งกลับมาให้ radius ส่งคำตอบให้อีกทอดหนึ่งจากตัวอย่างข้อ 8 หากต้องการใส่ค่าเวลาที่เหลือในการใช้งาน
    ตัวอย่างเช่นเหลือ 120 วินาที ให้เพิ่มบรรทัดข้อความว่า
    echo “SESSION-TIMEOUT = \”120\””
    ลงไปก่อนบรรทัดข้อความ  exit 0 ดังตัวอย่าง
    #!/bin/bash
    ###exit 0 = valid ; exit1 = invalid
    MYUSER=$(echo $USER_NAME | cut -d'”‘ -f2)
    case “${MYUSER}” in
    demo) exit 1 ;;
    abc) exit 1 ;;
    *) echo “SESSION-TIMEOUT = \”120\””
    exit 0 ;;
    esac

    เสร็จแล้วให้สั่งทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload
    แค่นี้ก็เสร็จแล้ว PC ที่ติดต่อเข้ามาจะได้รับคำตอบกลับไป
    ระบุว่าเหลือเวลาใช้งานอีกเท่าไร ขึ้นกับตัวเลขทีกำหนดส่งออกมา
    จากตัวอย่างให้แก้ไขตัวเลข 120 เป็นอื่นๆตามต้องการ

  10. การบันทึกประวัติการ authen radius ไว้ในพื้นที่  /var/log/freeradius/myauthen ให้ทำดังนี้
    สร้างแฟ้มคำสั่ง shell script ชื่อ  /etc/freeradius/log-radius-authen.sh มีเนื้อหาว่า
    #!/bin/bash
    export LANG=en.US
    MYDIR=”/var/log/freeradius/myauthen”
    if [ ! -d ${MYDIR} ] ; then
    mkdir -p ${MYDIR}
    fi
    TODAY=$(date “+%Y%m%d”)
    MYFILE=”${MYDIR}/${TODAY}”
    if [ ! -e ${MYFILE} ] ; then
    touch ${MYFILE}
    fi
    MYTIME=$(echo $1|awk ‘{print strftime(“%Y%m%d:%H:%M:%S”,$1)}’)
    echo “${MYTIME};${USER_NAME};$2;$1;CHECK_IN” >> ${MYFILE}
    แฟ้ม shell script จบแค่นี้หากเป็น freeradius 2.x  ให้แก้ไขแฟ้ม /etc/freeradius/modules/exec เติมข้อความต่อท้ายแฟ้มว่า
    exec my-log-authen {
    wait = no
    program = “/bin/sh /etc/freeradius/log-radius-authen.sh %l %{Packet-Src-IP-Address} ”
    }
    แล้วแก้ไขแฟ้ม /etc/freeradius/sites-available/default
    ที่ส่วนของ authorize  {…}ประมาณบรรทัดที่ 152  ที่บริเวณข้อความ authorize {

    #   files
    myimap
    ให้แทรกเพิ่มบรรทัดข้อความ กลายเป็นว่า
    my-log-authen
    #   files
    myimap

    เสร็จแล้วให้สั่งทำงานใหม่ ด้วยคำสั่ง sudo /etc/init.d/freeradius force-reload

  11. ตัวอย่างคำสั่งการทดสอบด้วยคำสั่ง radclient
    ทดสอบการ authen คำสั่งประมาณว่า
    echo “User-Name=mama,User-Password=123456” | radclient 10.0.1.2 auth mytestkeyทดสอบการ accounting ตอนเข้า คำสั่งประมาณว่า
    echo “User-Name=mama,Acct-Status-Type=Start” | radclient 10.0.1.2 acct mytestkey

    ทดสอบการ accounting ตอนออก คำสั่งประมาณว่า
    echo “User-Name=mama,Acct-Status-Type=Stop” | radclient 10.0.1.2 acct mytestkey

ที่มา: http://opensource.cc.psu.ac.th/%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87_freeradius_%E0%B8%9A%E0%B8%99_ubuntu