Author: aussadayut.u

  • มาติดตั้ง ADLdap เพื่อใช้ยืนยันตัวตนให้กับ Owncloud 8.0 กันดีกว่า

    การติดตั้ง ADLdap เพื่อใช้ยืนยันตัวตนกับ Owncloud 8.0 นี้จะไม่อธิบายการติดตั้ง owncloud ครับ ซึ่งสามารถเข้าไปดูการติดตั้งได้ที่นี้
    How to: install Owncloud (Easy method) – เกรียงไกร หนูทองคำ
    หรือ
    ติดตั้ง ownCloud เลือกใช้ user PSU Passport หรือ ftp server หรือ RADIUS Server – วิบูลย์ วราสิทธิชัย
    การแบ่งปันความรู้ครั้งนี้จะแนะนำวิธีการนำเอา ADLdap (PHP Library) มาใช้งานร่วมกับ Owncloud เท่านั้นครับ ว่ามีวิธีการและขั้นตอนอย่างไร ซึ่งไม่ยากเกินไปครับ ^^


    ภาพรวมเมื่อทำการติดตั้ง/ตั้งค่า ADLdap สำเร็จ

    1. ลดขั้นตอนการยืนยันตัวตน ซึ่งขั้นตอนนั้นจากเริ่มจาก เซิร์ฟเวอร์ที่ติดตั้ง Owncloud ไปยัง เซิร์ฟเวอร์ Ldap โดยตรง ทำให้ไม่จำเป็นต้องติดตั้งระบบ Authen ในเซิร์ฟเวอร์ Owncloud นี้
    2. สามารถจำกัดบุคลากรที่จะเข้ามาใช้งานได้ ตามคณะ/หน่วยนั้นๆ


    ซอร์ฟแวร์ที่นำมาใช้งาน

    – ubuntu server 14.04.02 (x64)
    – Owncloud 8.0.2
    – PHP 5.5
    – ADLdap 4.0.4 – ดาวน์โหลดได้ที่นี้

    คำแนะนำ หากมีการอัพเดทจาก เวอร์ชั่น 8.0.2 ไปเป็น 8.0.3 หรือเวอร์ชั่นที่สูงกว่า เรียบร้อยแล้ว
    จะต้องทำตามขั้นตอนที่ 4 อีกครั้งครับ 

    ขั้นตอนการติดตั้ง
    1. เข้าสู่ระบบด้วย username ของ admin จากนั้นให้ไปเปิดใช้งาน App โดยคลิ๊กที่เมนู Apps จากนั้นเลือก +Apps ให้คลิ๊กเมนู not enable ดูที่ชื่อ App External user support ให้คลิ๊ก Enable

    12
    ** ขั้นตอนที่ 2-5 จะต้องทำการ ssh ไปยังเซิร์ฟเวอร์ที่ติดตั้ง owncloud ครับ
    ** path ที่ใช้ติดตั้ง owncloud ของบทความนี้ /var/www/owncloud/ ครับ

    2. ให้แตกไฟล์  adLDAP_4.0.4r2.zip จากนั้นให้ Rename ชื่อแฟ้มเป็น adldap (จะ Rename หรือไม่ก็ได้ แต่ต้องอ้างเส้นทางและชื่อแฟ้มให้ถูกต้อง) แล้วไปวางไว้ตำแหน่งนี้ /var/www/owncloud/3rdparty/

    3. เพิ่ม code โดยเข้าไปที่ไฟล์ /var/www/owncloud/config/config.php

    /// AD LDAP ///
    ‘user_backends’ => array(
    0 => array(
    ‘class’ => ‘OC_User_ADLDAP’,
    ‘arguments’ => array(
    0 => ‘dc7.psu.ac.th’,
    ),
    ),
    ),
    /// END /// 

    เมื่อเพิ่มแล้วจะได้ตามนี้

    <?php
    $CONFIG = array (
    ‘instanceid’ => ”,
    ‘passwordsalt’ => ”,
    ‘secret’ => ”,
    ‘trusted_domains’ =>
    array (
    0 => ‘xxx.xxx.psu.ac.th’,
    ),
    ‘datadirectory’ => ‘/var/www/owncloud/data’,
    ‘overwrite.cli.url’ => ‘https://xxx.xxx.psu.ac.th/owncloud’,
    ‘dbtype’ => ‘mysql’,
    ‘version’ => ‘8.0.2.0’,
    ‘dbname’ => ‘owncloud_db’,
    ‘dbhost’ => ‘localhost’,
    ‘dbtableprefix’ => ‘oc_’,
    ‘dbuser’ => ‘xxxxx’,
    ‘dbpassword’ => ‘xxxxx’,
    ‘installed’ => true,
    ‘ldapIgnoreNamingRules’ => false,
    ‘theme’ => ”,
    ‘maintenance’ => false,
    ‘mail_smtpmode’ => ‘smtp’,

    /// AD LDAP ///
    ‘user_backends’ => array(
    0 => array(
    ‘class’ => ‘OC_User_ADLDAP’,
    ‘arguments’ => array(
    0 => ‘dc7.psu.ac.th’,
    ),
    ),
    ),
    /// END ///
    );

     

    4.เพิ่ม code โดยเข้าไปที่ไฟล์ /var/www/owncloud/apps/user_external/appinfo/app.php ไว้บรรทัดล่างสุด

    OC::$CLASSPATH[‘OC_User_ADLDAP’]=’user_external/lib/adldap.php’;

    เมื่อเพิ่มแล้วจะได้ตามนี้

    <?php
    OC::$CLASSPATH[‘OC_User_IMAP’]=’user_external/lib/imap.php’;
    OC::$CLASSPATH[‘OC_User_SMB’]=’user_external/lib/smb.php’;
    OC::$CLASSPATH[‘OC_User_FTP’]=’user_external/lib/ftp.php’;
    OC::$CLASSPATH[‘OC_User_ADLDAP’]=’user_external/lib/adldap.php’;

     

    5. สร้างไฟล์ชื่อ adldap.php นำไปไว้ที่ /var/www/owncloud/apps/user_external/lib/
    จากนั้นให้ทำการเพิ่ม code เข้าไปดังนี้

    หมายเหตุ สำหรับท่านใดที่นำไปใช้งาน ก่อนวันที่ 10-04-58 ขอให้ copy php code ทั้งหมดไปแทนของเดิมด้วยนะครับ

    <?php
    /*
    | ——————————————————————————
    | Owncloud 8 Authentication With ADLDAP 
    | ——————————————————————————
    |
    | Create Date : 08-04-2015
    | Update : 18-10-2016

    | Developer : Aussadayut Ubonkan
    | e-mail : aussadayut.u@psu.ac.th
    | Khunying Long Athakravisunthorn Learning Resources Center, Prince of Songkla University
    |
    */
    require_once(‘3rdparty/adldap/src/adLDAP.php’);

    class OC_User_ADLDAP extends \OCA\user_external\Base{

    private $ad_ldap;

    public $authUser = NULL;
    public $user_authen = NULL;
    public $port = NULL;
    public $basedn = NULL;
    public $ssl = NULL;
    public $account_suffix = NULL;
    public $attribute_mapping = NULL;
    public $addgroup = NULL;
    public $departid = NULL;
    public $set_quota = NULL;


    public function checkPassword($uid,$password){

    $this->set_quota = ‘5 GB’; // Ex. ’12 GB’ , ‘100 MB’
    $this->addgroup = ‘Staffs’; // Group Name
    $this->departid = ‘294’; // Department id , 294 = clib psu

    $this->port = ‘636’; // ldap = 389 , ldaps = 636
    $this->basedn = ‘dc=psu,dc=ac,dc=th’;
    $this->ssl = true;
    $this->account_suffix = ‘@psu.ac.th’;
    $this->attribute_mapping = array(
    “cn”, “dn”, “samaccountname”, “employeeid”, “citizenid”, “company”,
    “campusid”, “department”, “departmentid”, “physicaldeliveryofficename”, “positionid”,
    “description”, “displayname”, “title”, “personaltitle”, “personaltitleid”, “givenname”,
    “sn”, “sex”, “userprincipalname”,”mail”);

    $this->ad_ldap = new adLDAP(
    array(
    ‘domain_controllers’ => array(‘dc7.psu.ac.th’,’dc5.psu.ac.th’),
    ‘ad_port’ => $this->port,
    ‘base_dn’ => $this->basedn,
    ‘use_ssl’ => $this->ssl,
    ‘account_suffix’ => $this->account_suffix,
    )
    );

     

    $this->authUser = $this->ad_ldap->user()->authenticate($uid , $password);
    $this->user_authen = $this->ad_ldap->user()->info($uid,$this->attribute_mapping);

    $check_departid = $this->user_authen[0][“departmentid”][0]; // department id
    $uid = $this->user_authen[0][“samaccountname”][0]; // username
    $uemail = $this->user_authen[0][“userprincipalname”][0]; // e-mail

    /*
    | Print User information
    */
    //echo “<pre>”;
    //print_r($this->user_authen);
    //exit;
    if($check_departid == $this->departid){

    if(!$this->user_Exists($uid)){

    $this->storeUser($uid);

    OC_Group::addToGroup($uid, $this->addgroup); // Add User to Group
    OC_DB::executeAudited(
    ‘INSERT INTO `*PREFIX*preferences` ( `userid`, `appid` , `configkey` ,`configvalue`)’
    . ‘ VALUES( ?, ? , ? ,?)’,
    array($uid, ‘files’, ‘quota’ , $this->set_quota)
    );
    OC_DB::executeAudited(
    ‘INSERT INTO `*PREFIX*preferences` ( `userid`, `appid` , `configkey` ,`configvalue`)’
    . ‘ VALUES( ?, ? , ? ,?)’,
    //array($uid, ‘files’, ‘quota’ , $this->set_quota),
    array($uid, ‘settings’, ’email’ , $uemail)
    ); // Set E-Mail

    return $uid;

    }else{

    $this->storeUser($uid);
    return $uid;
    }
    }else{

    return false;

    }

    } // End checkPassword
    public function user_Exists($uid) {
    $result = OC_DB::executeAudited(
    ‘SELECT COUNT(*) FROM `*PREFIX*users_external`’
    . ‘ WHERE LOWER(`uid`) = LOWER(?)’,
    array($uid)
    );
    return $result->fetchOne() > 0;
    } // user_Exists
    } // End extends \OCA\user_external\Base

    ในที่นี้ขออธิบายเพิ่มเติมสำหรับ adldap.php แค่ 4 ส่วน คือ

    สวนที่ 1. require_once(‘3rdparty/adldap/src/adLDAP.php’);  เส้นทางที่ใช้อ้างอิงไฟล์ ADLdap (PHP Libray) เพื่อนำมาใช้ร่วมกับ owncloud

    สวนที่ 2. $this->set_quota = ‘5 GB’;  กำหนดเนื้อที่เริ่มต้นของของผู้ใช้งาน

    ส่วนที่ 3. $this->addgroup = ‘Staffs’;  ใส่ชื่อกลุ่มที่ต้องการ เพื่อใช้สำหรับเพิ่มกลุ่มให้กับผู้ใช้งานโดยอัตโนมัติ
    เงื่อนไข จะต้องการสร้างชื่อกลุ่มไว้ก่อนจึงจะใช้งานได้ โดยเข้าไปที่เมนู Admin จากนั้นกดเมนูด้านซ้าย Add Group แล้วใส่ชื่อกลุ่มที่ต้องการ จากนั้นกด ปุ่ม +

    ส่วนที่ 4. $this->departid = ‘294’; กำหนดหมายเลขของหน่วยงาน เพื่อใช้กรองว่าต้องการให้หน่วนงานใด สามารถเข้าสู่ระบบมาใช้งานได้ ในที่นี้ 294 คือ หมายเลขของห้องสมุดครับ

    ผลลัพธ์ที่เกิดขึ้น
    เมื่อติดตั้งตามขั้นตอนดังกล่าวครบแล้วนั้น เมื่อมีการเข้าระบบ owncloud ด้วย psu passport หากเป็นบุคลากร ของคณะ/หน่วยงาน ตามหมายเลขกำหนด ก็จะสามารถเข้ามาใช้งานได้และ username นั้น ก็จะถูกเพิ่มเข้าไปในกลุ่มที่กำหนดโดยอัตโนมัติ ครับ

    ขอขอบคุณทุกท่าน ที่อ่านมาถึงตรงนี้ครับ 

    ^_^