請使用LDAP單一帳號登入

以學務系統(SFS3)教職員和學生的帳號密碼,實作LDAP整合校內網路服務

台中市立外埔國中資訊組長  20130816修正

 

 


緣由

   現今是個資訊化的時代,中小學校內提供的網路服務也日趨多元,如學務系統、VPN服務、網路硬碟、個人網頁....,伴隨而來的是一大堆帳號和密碼,教職同仁記得辛苦,網管人員也維護得很辛苦!想要徹底解決此問題,非得請出LDAP不可了!

   單一帳號(LDAP, Light-weighted Directory Access Protocol)是組織內部成員,利用同一組帳號及密碼,即可登入所有的資訊系統,並獲得應有之資訊或是服務。

思考方向

   既然LDAP可解決上述問題,但要如何實作呢?學務系統的帳號通常是新進教職員所擁有的第一個帳號,本文希望學務系統帳號順理成章作為LDAP帳號,爾後同仁不需再記憶其它帳號密碼。

   只要是中小學的資訊組長都知道,千萬不要擅自更改學務系統程式碼,就算沒把mysql資料庫搞砸,只要設定自動更新排程時間一到,自行修改的程式碼就被覆蓋掉了,豈不是白忙一場!這條路是行不通的。

   我的方法是先以 OpenLDAP 在 CentOS 6 上建立 LDAP Server,並安裝 phpldapadmin(LDAP網頁管理工具) ,接著排程每小時執行一次 autoaddldap.php 和 autodelldap.php ,保持學務系統和LDAP Server帳號同步,那密碼呢?對學務系統架構認識較深的人都知道,學務系統密碼是經過MD5後再處理,才儲存在mysql,phpmyadmin看到的是一堆無意義的文數字組合,而且這個過程是不可逆的!既然如此,那我到底是如何知道密碼原文?我寫一個啟用LDAP帳號表單(startldapform.php) ,請同仁輸入學務系統的帳號和密碼完成啟用動作,這個密碼就照學務系統的處理方式後比對mysql內容,如果一致就代表此帳密真是合法使用者,同時也得到密碼原文,將密碼原文MD5後寫入LDAP Server,這樣,學務系統和LDAP Server的帳密就達到真正同步。

   使用者如何自行變更密碼?首先停用學務系統「變更密碼」模組,自行撰寫LDAP密碼變更表單(chpassword.php),透過帳號和舊密碼驗證真是合法使用者,將新密碼同時寫入學務系統資料庫和LDAP Server中,就可確保永遠同步。

   其實學務系統所有運作如舊,不需修改任何程式碼,唯有變更密碼的動作,才有update 到mysql資料庫,學務系統並沒有真正連到LDAP Server認證,其它服務如Joomla網站前台、網路硬碟、Fortigate-110C使用者認證....,才導到LDAP Server認證(如圖一),但對一般使用者來說,好似整合地不錯!

201302131

(圖一)

實作成果:

   1.Joomla網站前台LDAP認證外掛(圖二)

只要啟用外掛,填入LDAP Server相關參數,驗證成功自動繫結為會員。

201302132

(圖二)

2.Fortigate-110C使用者認證(圖三、圖四)

台中市的中小學大部分都有分配到Fortigate-110C,啟用LDAP拿來作使用者認證,兩三下就設定完成了。

201302133

(圖三)Fortigate-110C LDAP設定頁面

201302134

 

(圖四)Fortigate-110C 使用者認證表單

3.網路硬碟(本校稱雲端隨身碟)LDAP驗證頁面(圖五)

修改自彰化二林國小紀明村老師作品

201302135

(圖五)

 4.啟用LDAP單一帳號頁面(圖六)

201302136

(圖六)

5.變更LDAP密碼頁面(圖七)

201302137

(圖七)

 6.管理學生LDAP帳號

   為簡化操作程序,增減帳號對象都是某一年度入學全體學生.

201302181

(圖八)

   網頁若顯示增減帳號成功,可進入phpldapadmin進一步確認.

   (圖九)可看出本校有73位教職員工和696位學生的帳號存在LDAP Server中

201302182

(圖九)

 

 

實作過程:

install OpenLDAP on CentOS6

. OpenLDAP安裝

1.使用yum安裝openldap-servers(slapd)和openldap-client(ldap)

  #yum –y install openldap-servers openldap-clients

2.OpenLDAP相關設定檔的所在位置: /etc/openldap

   OpenLDAP資料存放的位置: /var/lib/ldap/ 目錄內
如果要重新設定LDAP server,先停止執行 ldap ( #service slapd stop ),再移除資料目錄下的所有檔案 ( #rm -rf /var/lib/ldap/* )

3.編輯 /etc/openldap/ldap.conf
#vi /etc/openldap/ldap.conf

BASE dc=xxxx,dc=xxxx

URI ldap://127.0.0.1

4. 複製slapd.conf和DB_CONFIG

#cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
#cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

5. 建立密碼: 打上欲設定的ldap server密碼,將最後一行{SSHA}xxxxxxxxx複製起來

#slappasswd

會問2次後自動產生

{SSHA}VVfIOIJUgH…………..

6.編輯 /etc/openldap/slapd.conf

#vi /etc/openldap/slapd.conf

dc=xxxx,dc=xxxx

rootpw的地方拿掉# 把剛剛複製的{SSHA} VVfIOIJUgH/VxQQJkI………貼上

最後結果如下

database       bdb

suffix         "dc=xxxx,dc=xxxx"

checkpoint     1024 15

rootdn         "cn=xxxxx,dc=xxxx,dc=xxxx"

#rootpw         xxxxxx

rootpw         {SSHA}VVfIOIJUgH/Vx…………

# userPassword 只能用來做認證用,只有 user 自己才能修改密碼。
access to * attr=userPassword
by self write
by * auth
# 預設 ACL,大家只能讀取。
access to *
by * read

存檔

7.建立目錄的根節點root.ldif檔

 

  LDIF 格式

   (1). 註解以 # 開頭

   (2). 一行表示一個屬性設定

   (3). 屬性設定格式:

        [屬性名稱]: [屬性值]

        屬性名稱後面接一個冒號及一個空白才接屬性值,不可任意添加空白。

   (4). 一個屬性具有兩個以上的屬性值時,分兩行撰寫

 

#cd /etc/openldap

#mkdir data

#vi /etc/openldap/data/root.ldif

檔案內容如下:

dn: dc=xxxx,dc=xxxx

objectClass: dcObject

objectClass: organization

o: information

dc: xxxx

dn: cn=xxxxx,dc=xxx,dc=xxxx

objectClass: organizationalRole

cn: xxxxxxx

8.將目錄根節點(root node)加到資料庫

#slapadd -v -l /etc/openldap/data/root.ldif

9. 移除slapd.d裡的資料

#rm -rf /etc/openldap/slapd.d/*

10. 使用slaptest將slpad.conf轉成slapd.d/

#slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

11改變檔案權限及擁有者

#chown -R ldap.ldap /var/lib/ldap

#chown -R ldap.ldap /etc/openldap/slapd.d

12.將slapd設為開機自動啟動

#chkconfig slapd on

13.啟動slapd服務

#service slapd start

    至此 openldap 已能正常運作,提供各種網路服務認證使用,但如果想提供 samba 認證,需繼續往下設定,因為 openldap 預設沒有 samba schema 。

1. # yum -y install samba

安裝完後,在/etc/openldap/schema/下,應會自動產生 smba.schema , 可確認看看!

2.# vi /etc/openldap/slapd.conf

將 samba.schema 加入 slapd.conf 設定檔中,找到很多 include 處,多加此行

include /etc/openldap/schema/samba.schema
修正 ACL
access to attrs=userPassword,sambaLMPassword,sambaNTPassword
多加入索引
index sambaSID,sambaSIDList,sambaGroupType  eq,pres

3.因為修改過 slapd.conf 檔,所以需要執行下列指令

 

#service slapd  stop

#rm -rf /etc/openldap/slapd.d/*

#slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

#chown -R ldap.ldap /var/lib/ldap

#chown -R ldap.ldap /etc/openldap/slapd.d

#service slapd start

 

4.複製 smb.conf,方便比對

#cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

#vi /etc/samba/smb.conf

原內容全刪除,只貼以下內容:

[global]
workgroup = WORKGROUP
passdb backend = ldapsam:ldap://163.17.XXX.XXX
map to guest = Bad User
usershare allow guests = No
domain logons = No
domain master = No
ldap admin dn = cn=XXXXXXX,dc=XXXX,dc=XXXX
ldap group suffix = ou=Groups
ldap passwd sync = Yes
ldap ssl = no
ldap suffix = dc=XXXX,dc=XXXX
ldap user suffix = ou=Users
security = user
wins support = Yes
[homes]
comment = Home Directories
browseable = No
writable = Yes
create mode = 0664
directory mode = 0775

5.將 LDAP 管理員密碼寫入 samba 的 secrets.tdb 資料庫中

# smbpasswd -w XXXXXX(ldap管理員密碼)

6.安裝 tdb-tools 套件,以取得 tdbdump 指令
# yum -y install tdb-tools

7.檢查是否將 LDAP 管理員密碼寫入 secrets.tdb 資料庫
# tdbdump /var/lib/samba/private/secrets.tdb

8.取得 Samba 主機的 SID
# net getlocalsid

例如 :

SID for domain LDAP is: S-1-5-21-4275134357-2956777647-4103441963

格式: S-1-5-21-X-Y-Z

<sambaSID> = S-1-5-21-X-Y-Z-<uidnumber>

.phpldapadmin(LDAP網頁管理工具)環境配置

1.安裝執行環境

# yum -y install httpd php php-ldap mysql mysql-server php-mysql php-gd php-mbstring php-ldap

#yum –y install unzip

#chkconfig - - add httpd

#service httpd start

FTP將phpldapadmin.zip 上傳至 /home/xxxx下

#cd /home/xxxx

#unzip phpldapadmin.zip

# rm -f phpldapadmin.zip

# mv phpldapadmin xxxxx (為了安全,改變目錄名稱)

# mv xxxxx /var/www/html

#chown -R apache.apache xxxxx  

#cd /var/www/html/xxxxx/config

# cp config.php.example config.php

Browser key in http://xxx.xx.xx.xxx/xxxxx done!

進行到此,就能phpldapadmin在Browser管理LDAP server

201302138

2.Login test

登入DN ( cn=xxxx,dc=xxxx,dc=xxxx )

密碼 xxxxxx

. OpenLDAP備份和還原

1.每日備份(保持30日備份)

#vi backup.sh 如下( /root/backup.sh 記得加入 /etc/crontab)

backup_dir="/home/xxxxx/ldapbackup"

sub_dir="20"`date '+%y%m%d'`

del_dir="20"`date "+%y%m%d" --date="30 days ago"`

cd $backup_dir

mkdir $sub_dir

chown xxxxx.xxxxx $sub_dir

cd $sub_dir

slapcat -b "dc=xxxx,dc=xxxx" -l xxxx.ldif

cd $backup_dir

rm -rf $del_dir

2.還原流程

1. 停止LDAP服務

# service slapd  stop

2. 刪除舊資料庫

# cd /var/lib/ldap

清空所有檔案及目錄只留 DB_CONFIG(先移出DB_CONFIG再全刪再移回DB_CONFIG)

3. 使用每日備份的xxxx.ldif 檔回復資料庫:

# slapadd -c -l xxxx.ldif

4.改變檔案及目錄擁有者

# cd /var/lib/ldap

# chown ldap.ldap *

5.重啟 OpenLDAP 服務

# service slapd start

已完成學務系統管理LDAP的相關模組 詳情請參考

http://wpjh.tc.edu.tw/joomla/index.php/2012-04-25-23-06-11/2012-04-30-07-56-38/2013-03-25-13-04-19/367-20130502

                                             最後修改 20130816

反霸凌、性侵害、性騷擾投訴信箱 :

No_Bully@wpjh.tc.edu.tw

受理本校學生、師長、家長,媒體及

民眾申訴或諮詢有關暴力霸凌、詐騙案件。

投訴專線 : (04)26833721 分機 222

本市反霸凌申訴專線電話為0800-580-995

教育部反霸凌專線:0800-200-885

學校資訊

電話:04-2683-3721

【處室分機】

傳真:04-2683-3759

網路電話:070-910-5330

校址:

43857 臺中市外埔區大同里外埔路999號

【位置圖】

GPS資訊

北緯:(24.332599)

東經:(120.649367)

網站維護 : 外埔國中資訊組 (04)26833721 #231

Thursday the 2nd. PointLink.