顯示具有 ldap 標籤的文章。 顯示所有文章
顯示具有 ldap 標籤的文章。 顯示所有文章

2016年7月9日 星期六

【Linux】在 CentOS 6 上安裝 LDAP Server 2.4

最近因任務需求必須將 LDAP Server 從 FreeBSD 移至 CentOS 上面,做個簡單的小筆記
原則上在 CentOS 下安裝 OpenLDAP 是件很輕鬆的事,用 YUM 裝一下就好了,我的環境如下
CentOS:6    x86_64
OpenLDAP:2.4.40
####################
yum install -y openldap-servers openldap-clients openldap-devel
/bin/cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG   -f 
#/bin/cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf   -f 
複製前一版slapd.conf.obsolete
/bin/cp /163.17.209.1/etc/slapd.conf.obsolete  /etc/openldap/slapd.conf  -f
slappasswd
###################
/bin/cp /163.17.209.1/etc/openldap/slapd.conf  /etc/openldap/.  -f 
vim  /etc/openldap/slapd.conf
change root password
####################################
/bin/cp /163.17.209.1/etc/rsyslog.conf  /etc/.    -f
mkdir  /etc/openldap/ldif
/bin/cp /163.17.209.1/etc/openldap/ldif/base.ldif  /etc/openldap/ldif/.    -f 
vim  /etc/openldap/ldif/base.ldif
###########################################
rm -rf /etc/openldap/slapd.d/*
############建立架構########################
slapadd -v -l /etc/openldap/ldif/base.ldif
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
chkconfig --list slapd
chkconfig --level 345 slapd on
##############################################
ldapsearch -x -b "dc=wcjs,dc=tc,dc=edu,dc=tw"
############################################
rm -rf /var/lib/ldap/*
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
############匯入資料####/home/lia/slapcat/y/20150301ldap.ldif####################
############匯入資料####/home/lia/slapcat/y/20150301ldap.ldif####################
############匯入資料####/home/lia/slapcat/y/20150301ldap.ldif####################
############匯入資料####/home/lia/slapcat/y/20150301ldap.ldif####################
slapadd -v -l /163.17.209.1/etc/ldap.ldif.1 
chown -R ldap:ldap /var/lib/ldap
service slapd restart
##################################################
9. 如果要重新匯入請記得清除舊有全部資料####更新架構##########
# service slapd stop
# rm -rf /var/lib/ldap/*
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# rm -rf /etc/openldap/slapd.d/*
# slapadd -v -l /etc/openldap/ldif/base.ldif
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
# chown -R ldap:ldap /etc/openldap/slapd.d
# chown -R ldap:ldap /var/lib/ldap
# service slapd start

資料備份當使用者帳號非常多時,備份就是一個重要動作了(就算帳號不多也要做啦 ^^)
1. 匯出資料
slapcat -n 2 > ldap.ldif <== 將LDAP的資料庫資料匯出到ldap.ldif檔
註:在CenetOS6,openldap-servers-2.4以上版本,第一個db是不能匯出的,必需下 -n 2的參數
2. 匯入(重建)資料
 2.1. 刪除/var/lib/ldap/*
 2.2. cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
 2.3. slapadd -v -l ldap.ldif 
 2.4. ll /var/lib/ldap
 2.5. chkown -R ldap:ldap /var/lib/ldap
 2.6. service slapd restart
註:2.3為匯入的重點步驟,其他是重建檔案及重新啟動
范老師上課資料
rm -rf /var/lib/ldap/*
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
slapadd -v -l /163.17.209.1/etc/ldap.ldif.1 
chown -R ldap:ldap /var/lib/ldap
service slapd restart

1. 安裝 openldap 套件
# yum install -y openldap-servers openldap-clients openldap-devel
2. 複製設定檔到對應的目錄
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
3. 產生 LDAP 管理者 root 的密碼,並記下來等會兒設定至 slapd.conf
# slappasswd
New password: (輸入密碼)Re-enter new password: (輸入密碼)
{SSHA} UtMBTNpmr8QuRHyDBEQEBljDWwet3iv9
4. 修改主要 Config 檔 slapd.conf (以下是我的範例,僅供參考)
# vi /etc/openldap/slapd.conf
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#

include         /etc/openldap/schema/corba.schema
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/duaconf.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/java.schema
include         /etc/openldap/schema/misc.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/ppolicy.schema
include         /etc/openldap/schema/collective.schema

# Allow LDAPv2 client connections.  This is NOT the default.
allow bind_v2

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral       ldap://root.openldap.org

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

loglevel        256
logfile        /var/log/slapd/ldap.log

# Load dynamic backend modules
# - modulepath is architecture dependent value (32/64-bit system)
# - back_sql.la overlay requires openldap-server-sql package
# - dyngroup.la and dynlist.la cannot be used at the same time

# modulepath /usr/lib/openldap
# modulepath /usr/lib64/openldap

# moduleload accesslog.la
# moduleload auditlog.la
# moduleload back_sql.la
# moduleload chain.la
# moduleload collect.la
# moduleload constraint.la
# moduleload dds.la
# moduleload deref.la
# moduleload dyngroup.la
# moduleload dynlist.la
# moduleload memberof.la
# moduleload pbind.la
# moduleload pcache.la
# moduleload ppolicy.la
# moduleload refint.la
# moduleload retcode.la
# moduleload rwm.la
# moduleload seqmod.la
# moduleload smbk5pwd.la
# moduleload sssvlv.la
# moduleload syncprov.la
# moduleload translucent.la
# moduleload unique.la
# moduleload valsort.la

# The next three lines allow use of TLS for encrypting connections using a
# dummy test certificate which you can generate by running
# /usr/libexec/openldap/generate-server-cert.sh. Your client software may balk
# at self-signed certificates, however.
TLSCACertificatePath /etc/openldap/certs
TLSCertificateFile "\"OpenLDAP Server\""
TLSCertificateKeyFile /etc/openldap/certs/password

# Sample security restrictions
#       Require integrity protection (prevent hijacking)
#       Require 112-bit (3DES or better) encryption for updates
#       Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64

# Sample access control policy:
#       Root DSE: allow anyone to read it
#       Subschema (sub)entry DSE: allow anyone to read it
#       Other DSEs:
#               Allow self write access
#               Allow authenticated users read access
#               Allow anonymous users to authenticate
#       Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
#       by self write
#       by users read
#       by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn.  (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!

# enable on-the-fly configuration (cn=config)
database config
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
        by * none

# enable server status monitoring (cn=monitor)
database monitor
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=root,dc=ldap,dc=bojack,dc=com,dc=tw" read
        by * none
 #######################################################################
 # 以下為 ACL Rules 存取安全設定 (增加 Access Control 部份)
 # 合法的使用者能讀取 LDAP 資料庫,但不能讀/寫其它人的密碼

 #######################################################################
access to attrs=userPassword
       by self write
       by anonymous auth
       by dn.base="cn=root,dc=ldap,dc=bojack,dc=com,dc=tw" write
       by * none

 #######################################################################
 # 為了讓 nss_ldap 機制能夠運作,必須開啟 anonymous 讀取的權限,但是限制它不能從任何 IP 讀取
 #######################################################################
access to *
       by self write
       by users read
##      by anonymous peername.IP=127.0.0.1 read
##      by anonymous peername.IP=192.168.1.0%255.255.255.0 read
       by dn.base="cn=root,dc=ldap,dc=bojack,dc=com,dc=tw" write
       by * none

#######################################################################
# database definitions
#######################################################################

database        bdb
suffix          "dc=ldap,dc=bojack,dc=com,dc=tw"
checkpoint      1024 15
rootdn          "cn=root,dc=ldap,dc=bojack,dc=com,dc=tw"
# Cleartext passwords, especially for the rootdn, should
# be avoided.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw                secret
# rootpw                {crypt}ijFYNcSNctBYg
rootpw          {SSHA}vgn3Ra9Qp0o4BpoYdbvBwLw9eYzNvZJS

# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory       /var/lib/ldap

# Indices to maintain for this database
index objectClass                       eq,pres
index ou,cn,mail,surname,givenname      eq,pres,sub
index uidNumber,gidNumber,loginShell    eq,pres
index uid,memberUid                     eq,pres,sub
index nisMapName,nisMapEntry            eq,pres,sub

# Replicas of this database
#replogfile /var/lib/ldap/openldap-master-replog
#replica host=ldap-1.example.com:389 starttls=critical
#     bindmethod=sasl saslmech=GSSAPI
#     authcId=host/ldap-master.example.com@EXAMPLE.COM
5. 設定將 LDAP 的 log 寫入 /var/log/slapd
# vi /etc/rsyslog.conf
加入這一行
local4.*            /var/log/slapd
6. 定義並新增 base.ldif 來定義整個樹狀結構
# cd /etc/openldap/
# mkdir ldif
# cd ldif
# vi base.ldif
我的 base.ldif 檔案內容如下,原則上就是只有一個員工 ou

# Bojack LDAP Base DN
dn: dc=ldap,dc=bojack,dc=com,dc=tw
objectClass: dcObject
objectClass: organization
dc: ldap
o: BOJACK-LDAP

# Magager ldap.bojack.com.tw Root DN
dn: cn=root,dc=ldap,dc=bojack,dc=com,dc=tw
objectClass: organizationalRole
cn: root

dn: ou=employee,dc=ldap,dc=bojack,dc=com,dc=tw
ou: employee
objectClass: organizationalUnit
description: employee
刪除原有的資料後再新增進去
# rm -rf /etc/openldap/slapd.d/*
# slapadd -v -l /etc/openldap/ldif/base.ldif
The first database does not allow slapadd; using the first available one (2)
added: "dc=ldap,dc=bojack,dc=com,dc=tw" (00000001)
added: "cn=root,dc=ldap,dc=bojack,dc=com,dc=tw" (00000002)
added: "ou=employee,dc=ldap,dc=bojack,dc=com,dc=tw" (00000003)
_#################### 100.00% eta   none elapsed            none fast!
Closing DB...
將 LDAP 新的資料庫內容產生檔案到 slapd.d 的目錄內並改變擁有權
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config file testing succeeded
最後來改變權限
# chown -R ldap:ldap /var/lib/ldap
# chown -R ldap:ldap /etc/openldap/slapd.d
7. 設定開機自動啟動 LDAP
# service slapd start
# chkconfig --list slapd
# chkconfig --level 345 slapd on
8. 利用 ldapsearch 驗證一下資料是否已匯入
# ldapsearch -x -b "dc=ldap,dc=bojack,dc=com,dc=tw"
# extended LDIF
#
# LDAPv3
# base <dc=ldap,dc=bojack,dc=com,dc=tw> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# ldap.bojack.com.tw
dn: dc=ldap,dc=bojack,dc=com,dc=tw
objectClass: dcObject
objectClass: organization
dc: ldap
o: BOJACK-LDAP

# root, ldap.bojack.com.tw
dn: cn=root,dc=ldap,dc=bojack,dc=com,dc=tw
objectClass: organizationalRole
cn: root

# employee, ldap.bojack.com.tw
dn: ou=employee,dc=ldap,dc=bojack,dc=com,dc=tw
ou: employee
objectClass: organizationalUnit
description: employee

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3

9. 如果要重新匯入請記得清除舊有全部資料
# service slapd stop
# rm -rf /var/lib/ldap/*
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# rm -rf /etc/openldap/slapd.d/*
# slapadd -v -l /etc/openldap/ldif/base.ldif
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
# chown -R ldap:ldap /etc/openldap/slapd.d
# chown -R ldap:ldap /var/lib/ldap
# service slapd start
參考資料

2016年2月13日 星期六

LDAP Browser/Editor

所以後來還是放棄這套工具,改採另一套用 Java 開發的 LDAP Browser/Editor 工具,不但跨平台(Windows, Unix-like),而且功能非常完整,速度又快,我已經用一段時間了,感覺非常的實用,有興趣的人可以花些時間試試。
LDAP Browser/Editor

只是一般人若沒接觸過 LDAP 或 AD 的話,要學會操作這套工具著實有些困難,講解 LDAP 也不是三言兩語可以講清楚的,以下我列出一些相關連結,給初學者瞭解。若有人有覺得不錯的相關學習資源,也可以留言給我。

Using php-ldap in Centos 6.3

Using php-ldap in Centos 6.3

Instructions from link:
  • yum install php-ldap
  • vi /etc/php.ini
    • add extension=ldap.so
  • service httpd restart

SFS CENTER : LDAP模組(ldap)更新與設定說明

※首先,感謝陳瑩光老師及外埔國中郭特全組長協助,目前已確認 Windows AD 及 Linux OpenLDAP 皆適用本模組。

※本模組僅適合由系統管理者操作,請注意安裝位置。

※安裝 LDAP 模組後,會有三個功能選項

1.【說明】:安裝說明檔,請詳閱此說明文件,內含檢測您的 php 系統是否有安裝 LDAP 套件。

2.【LDAP伺服器設定】:
(1)登入模式:由此選擇學務系統的登入認證方式是驗證本機內的帳號或驗證LDAP伺服器內的帳號。
亦即安裝本模組,並不會讓系統立即啟用LDAP驗證。在學務系統的登入畫面,會提示目前系統使用的是「本機驗證」或「LDAP驗證」。
(2)LDAP伺服器IP:設定您的LDAP伺服器IP。
(3)Windows AD的Bind dn:若您的LDAP帳號管理是 Windows AD,則只要設定這一欄即可。
Windows AD接受 LDAP 繫結的帳號格式相對簡單,只要送出類似 email書寫的格式即可。所以這邊您只要輸入您的 AD網域的 Domain Name 即可。
(4)OpenLDAP的Bind dn:若您的LDAP帳號管理是 OpenLDAP,則必須設定這一欄。
a.欄號欄位:即系統在搜尋帳號的欄位名,一般設定值為 uid 。
b.教師帳號 ou 值:也就是在 OpenLDAP裡,教師帳號被放在那個 ou (以AD的管理來講,就是組織單位)。
c.學生帳號 ou 值:也就是在 OpenLDAP裡,學生帳號被放在那個 ou 。
d.Base dn:舉例,假如您的OpenLDAP伺服器的 Domain Name 為 fnjh.tcc.edu.tw 就要寫成 DC=fnjh,DC=tcc,DC=edu,DC=tw
最後,學務系統在進行 OpenLDAP的認證時,帳號部份就會送出
「uid=[帳號],ou=[教師或學生的ou值],[Base dn值]」,例如:「uid=smallduh,ou=people,dc=fnjh,dc=tcc,dc=edu,dc=tw」
當然,若貴校的LDAP裡,教師或學生都是同一個ou,或根本沒設學生帳號,
您也可以 ou值設定全留空白,直接把 ou值設在 Base dn 裡,如 「ou=xxxx,dc=xxxx,dc=xxxx」
但是千萬別 ou 值有設定, Base dn 裡又有一個 ou=xxxx,否則登入會失敗。
(5)更改密碼的網址url:當(1)登入模式裡啟用了 LDAP驗證,學務系統便無法進行密碼更改,使用者若選擇了變更密碼,系統會提示這個網址,讓使用者點選前往變更。
※注意!
(a)啟用 LDAP驗證後,若教師忘記密碼,管理者在學務系統裡替使用者進行「密碼復原成原始密碼」是無效的,因為密碼並非在本機進行驗證!!
(b)若學生忘記密碼,在學務系統裡替學生查詢密碼,仍然有效,因為只要LDAP驗證登入成功,系統裡會自動回寫一份剛剛輸入的正確密碼。

3.【LDAP認證測試】:當您決定啟用 LDAP驗證,並將設定值都設好了,請務必先由此功能進行測試,以免啟用後發生無法登入的悲劇。
※注意!萬一啟用後真的發生無法登入的悲劇時怎麼辦?
請直接登入 MySQL,找到學務系統資料庫裡的 ldap這個資料表,把 enable 這個欄位的值,由 1 改為 0 ,即可恢復本機登入模式。

在學務系統自建LDAP相關模組

在學務系統自建LDAP相關模組
 台中市立外埔國中資訊組長 郭特全 20140224修正

本著作採用創用CC「姓名標示-非商業性-相同方式分享」3.0版台灣cc icon


(1).教師更改LDAP密碼模組
    功能:同時修改學務系統和LDAP SERVER密碼
    注意事項:1.務必先將學務系統原「變更密碼」模組停用
             2.若模組無法正確運作請確認以下兩點:
               A.請至調整模組變數的地方再次檢查確認LDAP連結參數
               B.SFS3系統是否安裝php-ldap函式
             3.此模組會同時更改學務系統和LDAP SERVER密碼。
    建議:所有教職員皆有可能使用此基本功能故建議授權所有教職員並置於系統首頁/教職員
201305021


201305022

2013050502

2013050503
     不用傷腦筋去修改程式只要鍵入正確模組參數就能成功連結LDAP SERVER
    本模組會依據模組參數與LDAP SERVER先做連線綁定判斷確定綁定成功才會執行SFS3和LDAP雙方密碼變更因此不會發生只有單方面密碼變更造成密碼不一致窘況
    為何會有啟用教職員LDAP功能?
1.為了將LDAP SERVER設置之前已存在的教職員帳號和密碼移轉到LDAP SERVER,所以請資訊組長記得提醒同仁做啟用動作!!
2.貴校LDAP SERVER設置之後才新增的教職員帳號,不需使用此功能!

(2).管理LDAP模組
    功能: 1.新增教職員帳號至LDAP SERVER。
           A.手動新增教職員帳號至LDAP SERVER,並非絕對必要程序
             教職員以是否在職為LDAP帳號建立依據。
             (顯示新增資料筆數功能  20131008)
            B.可設定系統排程,自動同步 SFS 和 LDAP SERVER 帳號。
           2.教職員SFS密碼同步為LDAP預設密碼
          3.新增學生LDAP帳號
           已修正為學生在學與否作為LDAP帳號增減依據(20140113)
           A.新增帳號對象是某一年度入學的全體學生
             (顯示新增資料筆數功能  20131008)
           B.有學生轉入,先處理學生學務系統密碼,再執行一次新增LDAP功能
           C.既有帳號不會重覆。 
           D.學生LDAP密碼不再限定生日四碼改由抓取學生的學務系統密碼欄位所以新增學生LDAP 帳號前請先處理學生的學務系統密碼(20131008)
         4.刪除學生LDAP帳號
           已修正為學生在學與否作為LDAP帳號增減依據(20140113)
           (為簡化操作程序,刪除帳號對象是某一年度入學的全體學生。)
           (顯示刪除資料筆數功能 20131008)

    注意事項:
    建議:此模組功能會影響LDAP核心運作,並揭露密碼重要資訊,強烈建議只授權系統管理者使用並置於系統首頁/系統管理

 20130504


2013050501

2014022201 

2014022202

2014022203

2014022204

2014022205

2014022206
2014022301 

(3).學生更改LDAP密碼模組 (20131008 新增)
    功能:同時修改學生的學務系統和LDAP SERVER密碼
    注意事項:1.勿啟用學務系統原有的學生「變更密碼」功能
             2.若模組無法正確運作請確認以下兩點:
               A.請至調整模組變數的地方再次檢查確認LDAP連結參數
               B.SFS3系統是否安裝php-ldap函式
    建議:所有學生皆有可能使用此功能故建議授權所有學生並置於系統首頁/學生專區

 模組更新紀錄
20131014 修正模組參數有關 Bind OpenLDAP SERVER 的設定  
         符合更大的彈性

學務系統非官方模組使用方法:
1.將模組程式壓縮檔下載後解壓縮。
2.將解壓縮後的資料夾上傳至var/www/html/sfs3/modules/下,注意資料夾和檔案權限。
3.以系統管理者身分登入學務系統,點選 學務系統首頁/系統管理員/模組權限管理/新增模組,就可看到剛剛上傳的模組。
4.接下來步驟,如參數設定、授權使用等,與官方模組相同,不再贅述。

20140111 修正學生LDAP帳號同步方式
    原本設計方式是以入學年度作為批次學生LDAP帳號建立和刪除的方式經過這段時間的實際運作缺點已浮現,那就是當有學生轉出和轉入時,學務系統(SFS3)和LDAP SERVER兩邊的帳號不會同步,應該類似教職員LDAP作法,以在職與否作為同步依據,那學生LDAP帳號就應以在學與否作為同步依據未來就不用管新生入學或舊生畢業,平時也無須注意學生轉出或轉入,想到就滑鼠總共點兩下,學務系統(SFS3)和LDAP SERVER帳號就同步了!如此簡單!!之前已安裝使用manage_ldap模組的學校,請務必記得更新!

20140127 更新LDAP資料結構功能
    新增LDAP資料結構更新功能,可避免以刪除再新增LDAP帳號方式,造成使用者密碼被重設為初始值。

20140215 新增學務系統學生密碼檢測和設定功能
     因密碼為LDAP的必要屬性,確認在學學生皆已設定學務系統學生密碼,新增學生LDAP帳號才會成功!檢測後若有零星轉入同學尚未設定密碼,請遵照本模組引導,完成密碼設定。千萬不要使用原學務系統模組,因少數同學轉入而將整學年同學密碼重設,萬一後來又對LDAP採刪除再建立帳號,會造成曾變更密碼的同學無法登入。

20140219 新增查詢全校在學學生LDAP密碼功能
20140224 新增查詢LDIF詳細資訊。