OpenLDAP 的安裝和配置
OpenLDAP 常規組件:
- ldap 伺服器管理套件:軟體包名為 openldap-servers 。包含服務程式(slapd、slurpd)及一些服務端管理工具(如:slapadd、slappasswd 等)。設定檔為:/etc/openldap/slapd.conf
- ldap 用戶端支援:軟體包名為 openldap 。包含 OpenLDAP 的設定檔、庫和 OpenLDAP 文檔。設定檔為:/etc/openldap/ldap.conf
- ldap 用戶端目錄管理套件:軟體包名為 openldap-clients 。包含訪問和修改 OpenLDAP
目錄所需的客戶程式(如:ldapsearch、ldapadd 、ldappasswd等)。推薦使用基於Web的GUI管理工具 phpLDAPadmin 。但基本的這些命令還是需要瞭解的。
- nss_ldap 統一認證模組:LDAP 的 NSS 庫和 PAM 模組(pam_ldap.so),提供系統命名服務和驗證服務。
- nss_ldap 是一組 C 庫擴充,它允許 LDAP 目錄伺服器用作一個使用者和組資訊的主源
- pam_ldap 是一個 Linux-PAM 模組,它支援身分識別驗證功能。pam_ldap為很多應用系統(如系統登入、vsftpd FTP伺服器)提供LDAP統一認證和密碼更新等服務。
OpenLDAP 依賴的一些軟體:
- 後端資料庫:Oracle Berkeley DB
- 安全性通訊協定:openssl (可選,讓LDAP使用TLS安全傳輸)
- 時間伺服器:ntp(可選)
軟體安裝
使用 yum install 命令分別安裝上面提到的三個軟體包。
伺服器配置(slapd.conf)
修改/etc/openldap/slapd.conf,主要修改項如下:
- 包含要用到的 schema 文法檔案(include )。include 檔案定義了條目所屬的類(objectClasses)和條目要用到的屬性(attribute)
- 設定目錄的存取控制清單(ACL)(access to … by …):即指定目錄對象(如屬性)可由哪些使用者怎樣訪問。如密碼只供認證不可查看。
- 定義目錄的搜尋域尾碼(suffix),如:"dc=bt,dc=cn"。目錄結構有三種形式,參見本文後一節內容。
- 指定目錄的管理員帳號和密碼(rootdn、rootpw),如:"cn= Manager,dc=bt,dc=com"
- 定義一些索引對象,以加快查詢(index)
後端資料庫配置(DB_CONFIG)
建立DB_CONFIG檔案到/var/lib/ldap/目錄下, 其實/etc/openldap/目錄中存在DB_CONFIG.example,複製到/var/lib/ldap/目錄下就可以,否則在啟動ldap時會出現警告錯誤提示。
用戶端配置(ldap.conf)
配置目標LDAP伺服器的一些屬性,以方便所有的用戶端程式共用使用。配置項主要有:
- BASE:指定LDAP目錄資料庫的根域,如:dc=bt,dc=com
- URI:指定LDAP伺服器的訪問地址,如:ldap://ldap.bt.com
啟動LDAP伺服器
啟動命令:# service ldap start
設定開機啟動(運行層級):ntsysv
測試LDAP伺服器:# ldapsearch –x
OpenLDAP 目錄管理
安裝和配置好後,啟動服務,slapd 自動在“/var/lib/ldap/”目錄下建立了一個BDB資料庫,但此時資料庫是空的,即沒有任務目錄資訊(連根DN“dc=bt,dc=com”都不存在)。
伺服器正常運作後,就可以錄入資訊了。目錄資訊的管理(錄入)方法有以下幾種:
- 命令列錄入。藉助openldap-clients提供的幾個管理程式(ldapadd),手工錄入。
- LDIF檔案匯入。這些.ldap檔案可以是從其它目錄庫中匯出的,也可以是預先輸入的檔案。因為ldif格式是文字格式設定,很方便查閱和修改。
- GUI管理工具。這些工具跟openldap-clients是同一層級的,即把它圖形化了。已經有很多圖形介面的目錄管理工具,常用的有:
- phpLDAPadmin :網頁用戶端
- LDAPAdmin :Windows 用戶端
- Softerra LDAP Administrator:Windows 用戶端
- Ldap Browser/Editor
- Apache Directory Studio
- jXplorer
根目錄的屬性一般是(可以把下面的代碼儲存為ldif檔案,然後匯入):
dn: dc=bt,dc=cn
objectClass: dcObject
objectClass: organization
o: Corporation
dc: bt
description: Bintree Corp.
OpenLDAP 統一認證
nss_ldap 提供了一個PAM模組“pam_ldap.so”,用於為各應用系統提供統一的LDAP認證模組。pam_ldap 在Linux 中是一個很基礎的認證模組。pam_ldap 的設定檔為“/etc/ldap.conf”,可以配置pam_ldap.so作為LDAP的用戶端串連LDAP伺服器的各個參數。請參考《pam_ldap 詳細配置》。
關於各應用系統如何使用LDAP進行認證,請參考PAM的相關介紹。各應用系統的PAM設定檔統一存放在“/etc/pam.d”中。
LDAP 和 Linux 系統帳號對應關係
自從 Sun 推出了 Sun Yellow Pages (就是現在在 Unix/Linux 常聽到的 Network Information Service,NIS) 之後,Unix/Linux 的帳號管理就有了完整的統一方案,在此,我在這裡介紹如何使用 LDAP 統一帳帳號密碼的管理。
LDAP 裡,只要引入 nis.schema 就可以使用和 Linux 登入相關的 attribute。
/etc/passwd、/etc/shadow 和 /etc/group
大家都知道,/etc/passwd 是存放個人的帳號資料,而 /etc/shadow 是存放著個人的密碼資訊,而 /etc/passwd 格式應該像下面這樣:
steven:x:500:500::/home/steven:/bin/bash
也就是:
id:password:uid:gid:full_name:Home Directory:Login shell
這樣的格式,然而,在 Linux login 時,對於 LDAP 也要引用相關的 atrribute 才可以正確對應登入,下表為 posix /etc/passwd 和 LDAP 的對應:
| /etc/passwd |
objectClass: posixAccount |
| id |
uid |
| password |
userPassword |
| uid |
uidNumber |
| gid |
gidNumber |
| full_name |
gecos |
| Home Directory |
homeDirectory |
| Login shell |
loginShell |
上表可以很清楚的看到,若是要讓設計 ldif 檔的話,最少需要引用 posixAccount 這個 objectClass,並且設定必要的 attribute。
介紹完了 /etc/passwd 之後,另一個很重要的檔案,也就是記錄整個 Linux 主機的 user password 的檔案就是 /etc/shadow 這個檔,那麼他的格式是:
steven:$1$xGQPf1Cs$Y/kQw5TmUXvWY/1z3QgNZ/:13001:0:99999:7:::
他們的意義依序為:
username:passwd:last:may:must:warn:expire:disable:reserved
好的,那麼和剛剛一樣,我來解釋一下要引用的 objectclass 和 attribute 對應:
| /etc/shadow |
objectClass: shadowAccount |
| username |
id |
| password |
userPassword |
| last |
shadowLastChange |
| may |
shadowMin |
| must |
shadowMax |
| warn |
shadowWarning |
| expire |
shadowExpire |
| disable |
shadowInactive |
| reserved |
shadowFlag |
上面也可以得知,在設計 ldif 時,除了要引用剛剛的 posixAccount,還有 shadowAccount 才行。
介紹完了兩個重要的 passwd 和 shadow 檔之後,再來就是群組檔 (/etc/group) 的問題啦!一樣的,也有對應的 attribute,但我還是先列出格式出來:
steven:x:500:
也就是:
group name:password:group id:other account
下面是 objectclass 和 attribute 的對應:
| /etc/group |
objectClass: posixGroup |
| group name |
cn |
| password |
userPassword |
| group id |
gidNumber |
| other account |
memberUid |