使用 OpenLDAP 集中管理用户帐号
生活随笔
收集整理的這篇文章主要介紹了
使用 OpenLDAP 集中管理用户帐号
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
關(guān)鍵字: OpenLDAP ReiserFS SCTP nmon 正則表達(dá)式
DESC 'An integer uniquely identifying a user in an administrative domain'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )所有的屬性類型都已經(jīng)定義了,它們被收集到 posixAccount objectclass 中。例如:objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY
DESC 'Abstraction of an account with POSIX attributes'
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
MAY ( userPassword $ loginShell $ gecos $ description ) )ldapuser 條目具有一個(gè)識(shí)別名屬性 dn,它用作用戶名,并與 userPassword 一起用來(lái)在 LDAP 目錄中記錄信息,或與 LDAP 目錄綁定在一起使用。LDAP 為作為容器使用的特殊條目提供了將這些條目組織成樹結(jié)構(gòu)的功能。在這個(gè)例子中,我們將使用一個(gè)容器 People 保存用戶帳號(hào)信息,使用另外一個(gè)容器 Groups 保存組帳號(hào)信息。所生成的目錄信息樹如圖 2 所示。圖 2. 用戶帳號(hào)信息使用的目錄信息樹讓 我們來(lái)看一下如何配置 OpenLDAP 服務(wù)器,如何將信息從系統(tǒng)文件遷移到 LDAP 目錄中,如何配置 OpenLDAP 客戶機(jī)通過(guò) LDAP 對(duì)用戶進(jìn)行身份驗(yàn)證。在使用一個(gè)集中的身份驗(yàn)證數(shù)據(jù)庫(kù)時(shí),應(yīng)該通過(guò)使用復(fù)制技術(shù)采用第二個(gè) LDAP 服務(wù)器提供高可用性,這樣在主服務(wù)器出現(xiàn)問(wèn)題時(shí),就可以使用第二個(gè) LDAP 服務(wù)器響應(yīng)客戶機(jī)的請(qǐng)求。由于諸如密碼之類的身份驗(yàn)證數(shù)據(jù)會(huì)通過(guò)網(wǎng)絡(luò)進(jìn)行傳輸,因此希望使用 TSL 協(xié)議建立加密通信連接。我們的 OpenLDAP 服務(wù)器和客戶機(jī)都是虛擬機(jī),上面運(yùn)行的是 Red Hat Enterprise Linux AS release 4(Nahant Update 1)。在我們的例子中使用了 表 1 所列出的系統(tǒng)。如果想模仿這些例子,請(qǐng)使用適合您自己的設(shè)置。表 1. 系統(tǒng)網(wǎng)絡(luò)信息
配置 LDAP 服務(wù)器我們使用 Red Hat Enterprise Linux release 4 Update 1 上的包來(lái)構(gòu)建服務(wù)器:openldap-2.2.13-2:包含 OpenLDAP 配置文件、庫(kù)和文檔 openldap-servers-2.2.13-2:包含 slapd 和 slurpd 服務(wù)器、遷移腳本和相關(guān)文件 openldap-clients-2.2.13-2:包含客戶機(jī)程序,用來(lái)訪問(wèn)和修改 OpenLDAP 目錄 OpenLDAP 包在服務(wù)器上安裝了很多程序:守護(hù)進(jìn)程: slapd:主 LDAP 服務(wù)器 slurpd:負(fù)責(zé)與復(fù)制 LDAP 服務(wù)器保持同步的服務(wù)器 對(duì)網(wǎng)絡(luò)上的目錄進(jìn)行操作的客戶機(jī)程序。下面這兩個(gè)程序是一對(duì)兒: ldapadd:打開(kāi)一個(gè)到 LDAP 服務(wù)器的連接,綁定、修改或增加條目 ldapsearch:打開(kāi)一個(gè)到 LDAP 服務(wù)器的連接,綁定并使用指定的參數(shù)進(jìn)行搜索 對(duì)本地系統(tǒng)上的數(shù)據(jù)庫(kù)進(jìn)行操作的幾個(gè)程序: slapadd:將以 LDAP 目錄交換格式(LDIF)指定的條目添加到 LDAP 數(shù)據(jù)庫(kù)中 slapcat:打開(kāi) LDAP 數(shù)據(jù)庫(kù),并將對(duì)應(yīng)的條目輸出為 LDIF 格式 OpenLDAP 的主要服務(wù)器配置文件是 /etc/openldap/slapd.conf。本例所使用的完整 slapd.conf 文件如 清單 18 所示。slapd.conf 文件中包括一系列全局配置選項(xiàng),它們作為一個(gè)整體應(yīng)用到 slapd 上面,后面是包含數(shù)據(jù)庫(kù)特有信息的數(shù)據(jù)庫(kù)后端定義。如果一行內(nèi)容是以空格開(kāi)始的,就認(rèn)為它是上一行的延續(xù)??招泻鸵?“#” 字符開(kāi)頭的注釋行都會(huì)被忽略。如果您正把本文當(dāng)作練習(xí)來(lái)做,那就可以按照下面指定的方式進(jìn)行修改,從而啟動(dòng) LDAP 服務(wù)器。一旦確認(rèn)服務(wù)器正常工作之后,就可以添加復(fù)制功能,然后再添加安全性支持。首先是全局配置信息段的設(shè)置。其中每個(gè)選項(xiàng)的值都是我們想要的。正如上面介紹的一樣,信息被組織成屬性和值的組合,稱為條目。條目屬性必須遵循的規(guī)則是使用 objectclass 專用屬性進(jìn)行組織的,這可以在 /etc/openldap/schema/ 模式文件中找到。對(duì)于身份驗(yàn)證來(lái)說(shuō),需要使用在 nis.schema 中定義的 posixAccount 和 shadowAccount objectclasses:include /etc/openldap/schema/nis.schema loglevel 行設(shè)置的是日志選項(xiàng)??梢詫⑵湓O(shè)置為這樣的級(jí)別:調(diào)試語(yǔ)句和操作統(tǒng)計(jì)信息都會(huì)被記錄到 /var/log/slapd.log 中。日志級(jí)別是累加的:296 = 256 日志連接/操作/結(jié)果 + 32 搜索過(guò)濾器處理 + 8 連接管理:loglevel 296 日志信息會(huì)被記錄到 syslogd LOG_LOCAL4 機(jī)制中。還需要將下面的內(nèi)容添加到 /etc/syslog.conf 中,并讓 syslogd 重新讀取自己的配置文件:local4.debug /var/log/slapd.log access 行定義了誰(shuí)可以訪問(wèn)目錄中的內(nèi)容。我們希望用戶可以修改自己的密碼,并更新自己的 shadow 信息來(lái)反映密碼的變化。希望身份驗(yàn)證程序能夠檢索用戶的密碼。還希望用戶能夠讀取所有其他條目。注意密碼條目是不可讀的,shadow 屬性的惟一用處就是管理密碼的過(guò)期問(wèn)題。access to attrs=shadowLastChange,userPassword
by self write
by * auth
access to *
by * read接下來(lái),在 database 部分,要定義下面的內(nèi)容。使用新的 bdb 后端數(shù)據(jù)庫(kù):database bdb 指定后端數(shù)據(jù)庫(kù)需要響應(yīng)的查詢的 DN 前綴。為了確保惟一性,根前綴應(yīng)該從自己的網(wǎng)絡(luò)域名構(gòu)建出來(lái)。在本例的情況中,它是 .dc=svc,dc=beaverton,dc=ibm,dc=com.,但是在下面的例子中我們對(duì)其進(jìn)行了簡(jiǎn)化:suffix "dc=ibm,dc=com" 指定管理 DN,它不用于訪問(wèn)控制或限制數(shù)據(jù)庫(kù)的操作。也不需要在目錄中為這個(gè) DN 指定一個(gè)條目。為具有 rootpw 密碼的管理員使用 DN 可以跳過(guò) ACL 規(guī)則中的所有訪問(wèn)控制:rootdn "cn=Manager,dc=ibm,dc=com"rootpw {MD5}ijFYNcSNctBYg 這就是我們現(xiàn)在想要設(shè)置的選項(xiàng)。稍后將返回 slapd.conf 文件來(lái)配置復(fù)制,然后在配置安全性?,F(xiàn)在,我們希望將數(shù)據(jù)添加到目錄中,并確認(rèn)可以訪問(wèn)這些信息。要實(shí)現(xiàn)這種功能,需要配置服務(wù)器來(lái)使用 ldap 客戶機(jī)工具,例如 ldapadd 和 ldapsearch。ldap 客戶機(jī)工具的配置文件是 /etc/openldap/ldap.conf。我們使用的這個(gè)文件的完整列表如本文末尾的 清單 19 所示。要在 ldap 服務(wù)器上運(yùn)行這些工具,只需要將該行修改成下面的內(nèi)容:BASE dc=ibm,dc=com 設(shè)置啟動(dòng)腳本在級(jí)別 2、3 和 5 時(shí)啟動(dòng) LDAP:清單 1. 設(shè)置啟動(dòng)運(yùn)行級(jí)別# chkconfig --levels 235 ldap on從命令行中啟動(dòng)服務(wù):清單 2. 啟動(dòng)服務(wù)# service ldap start
Starting slapd: [ OK ]OpenLDAP 守護(hù)進(jìn)程 slapd 應(yīng)該已經(jīng)運(yùn)行了:清單 3. 檢查服務(wù)正在運(yùn)行# ps -ef | grep slap
ldap 13521 1 0 Oct24 ? 00:00:00 /usr/sbin/slapd -u ldap -h ldap:/// ldaps:///ldapsearch -x 命令應(yīng)該可以成功完成,但不會(huì)返回任何數(shù)據(jù)。遷移密碼和 shadow 信息Red Hat 所提供的 openldap-servers 包包含 PADL Software Pty Ltd. 公司的 MigrationTools 工具。我們將使用這些工具將數(shù)據(jù)從 Linux 系統(tǒng)文件(例如 /etc/group 和 /etc/password)轉(zhuǎn)換成 LDAP LDIF 格式,這是數(shù)據(jù)庫(kù)信息的一種文本格式的表示。這種格式是行界定、冒號(hào)分隔的屬性-值對(duì)。有一組 Perl 腳本被安裝到 /usr/share/openldap/migration/ 中執(zhí)行遷移。這些 Perl 腳本的配置信息包含在 migrate_common.ph 文件的開(kāi)頭。對(duì)于我們的目的來(lái)說(shuō),只需要修改命名前綴的變量來(lái)使用條目的識(shí)別名就足夠了,如下所示:$DEFAULT_BASE = "dc=ibm,dc=com" 在進(jìn)行這些修改之后,請(qǐng)運(yùn)行腳本 migrate_base.pl,它會(huì)創(chuàng)建根項(xiàng),并為 Hosts、Networks、Group 和 People 等創(chuàng)建低一級(jí)的組織單元:清單 4. 運(yùn)行 migrate_base.pl# migrate_base.pl > base.ldif編輯 base.ldif,刪除除下面之外的所有條目:清單 5. base.ldif 條目# cat base.ldif
dn: dc=ibm,dc=com
dc: ibm
objectClass: top
objectClass: domain
dn: ou=People,dc=ibm,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=ibm,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit在 LDAP 服務(wù)器上,使用 OpenLDAP 客戶機(jī)工具 ldapadd 將以下條目插入到數(shù)據(jù)庫(kù)中。簡(jiǎn)單身份驗(yàn)證必須要使用 -x 選項(xiàng)指定。在 slapd.conf 中定義的 rootdn 身份驗(yàn)證識(shí)別名是 “cn=Manager,dc=ibm,dc=com”。對(duì)于簡(jiǎn)單身份驗(yàn)證來(lái)說(shuō),必須使用密碼。選項(xiàng) -W 強(qiáng)制提示輸入密碼。這個(gè)密碼就是在 slapd.conf 文件中指定的 rootpw 參數(shù)的值。包含這些條目的 LDIF 文件是使用 -f 選項(xiàng)指定的:清單 6. 使用 ldapadd 插入條目# ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f base.ldif接下來(lái),從 /etc/group 中遷移 ldapuser 組:清單 7. 遷移 ldapuser 組# grep ldapuser /etc/group > group.in
# ./migrate_group.pl group.in > group.ldif
# cat group.ldif
dn: cn=ldapuser,ou=Group,dc=ibm,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapuser
userPassword: {crypt}x
gidNumber: 500
# ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f group.ldif最后,從 /etc/passwd 和 /etc/shadow 中遷移 ldapuser 的信息:清單 8. 遷移 ldapuser 信息# grep ldapuser /etc/passwd > passwd.in
# ./migrate_passwd.pl passwd.in > passwd.ldif
# cat passwd.ldif
dn: uid=ldapuser,ou=People,dc=ibm,dc=com
uid: ldapuser
cn: ldapuser
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt$1$TeOlOcMc$cpQaa0WpLSFRC1HIHW5bt1
shadowLastChange: 13048
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/ldapuser
gecos: ldapuser
# ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f passwd.ldif現(xiàn)在檢查已經(jīng)添加到數(shù)據(jù)庫(kù)中的信息。清單 9 給出了全部輸出結(jié)果:清單 9. 以 LDIF 格式填充的 OpenLDAP 數(shù)據(jù)庫(kù)# ldapsearch -x
# extended LDIF
#
# LDAPv3
# base <> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#
# ibm.com
dn: dc=ibm,dc=com
dc: ibm
objectClass: top
objectClass: domain
# People, ibm.com
dn: ou=People,dc=ibm,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
# Group, ibm.com
dn: ou=Group,dc=ibm,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
# ldapuser, Group, ibm.com
dn: cn=ldapuser,ou=Group,dc=ibm,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapuser
gidNumber: 500
# ldapuser, People, ibm.com
dn: uid=ldapuser,ou=People,dc=ibm,dc=com
uid: ldapuser
cn: ldapuser
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/ldapuser
gecos: test2
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5配置 LDAP 客戶機(jī)用來(lái)設(shè)置客戶機(jī)的 Red Hat Enterprise Linux release 4 Update 1 包包括:nss_ldap-226-6:包括兩個(gè) LDAP 訪問(wèn)客戶機(jī):nss_ldap 和 pam_ldap nss_ldap 是一組 C 庫(kù)擴(kuò)展,它允許 LDAP 目錄服務(wù)器用作一個(gè)用戶和組信息的主源 pam_ldap 是一個(gè) Linux-PAM 模塊,它支持身份驗(yàn)證功能 LDAP 身份驗(yàn)證要想正確地工作,需要配置兩個(gè)服務(wù):系統(tǒng)命名服務(wù)和身份驗(yàn)證服務(wù)。系統(tǒng)命名服務(wù)(NSS)需要配置為使用 LDAP 來(lái)解析諸如用戶和組帳號(hào)之類的資源。例如,在運(yùn)行命令 ls -l 時(shí),如果某個(gè)文件 inode 給出文件的所有者是 “user 501”,那么命名服務(wù)就需要將 “uid 501” 解析成用戶名,并在 ls 命令輸出結(jié)果中輸出。通常來(lái)說(shuō),這是通過(guò)查找 /etc/passwd 文件中的所有用戶帳號(hào)實(shí)現(xiàn)的。由于用戶現(xiàn)在都存儲(chǔ)在 LDAP 目錄中,因此系統(tǒng)需要配置成同時(shí)對(duì) passwd 文件和 LDAP 目錄中的帳號(hào)進(jìn)行解析。這種功能是通過(guò) /usr/lib/libnss_ldap.so 庫(kù)提供的。身份驗(yàn)證服務(wù)是實(shí)際向 LDAP 驗(yàn)證用戶身份的服務(wù)。可插入身份驗(yàn)證模塊(PAM)提供了本地 Linux 身份驗(yàn)證服務(wù)。下面我們將配置 PAM 先對(duì)本地的 /etc/passwd 文件檢查用戶帳號(hào),然后再對(duì) LDAP 服務(wù)器進(jìn)行檢查。PAM LDAP 模塊可以用來(lái)將身份驗(yàn)證重定向到 LDAP 目錄上。/lib/security/pam_ldap.so PAM 模塊提供了 LDAP 身份驗(yàn)證功能。身份驗(yàn)證本身是由 PAM 程序執(zhí)行的,它從身份驗(yàn)證候選機(jī)制中獲取用戶名,將其綁定到 OpenLDAP 服務(wù)器上,檢索與這個(gè) uid 條目(用戶名條目)相關(guān)的 DN;從身份驗(yàn)證候選機(jī)制中獲取密碼,然后使用這個(gè) DN 和密碼試圖將其綁定到 OpenLDAP 服務(wù)器上。如果綁定成功,PAM 會(huì)報(bào)告說(shuō)這個(gè)用戶已經(jīng)成功通過(guò)了 pam_ldap.so 提供的身份驗(yàn)證測(cè)試。根據(jù) PAM 的配置不同,在用戶看到命令行提示符之前可能會(huì)執(zhí)行其他測(cè)試。我們可以采用兩種方法來(lái)配置 LDAP 客戶機(jī)。一種快速而簡(jiǎn)單的方法是運(yùn)行 /usr/sbin/authconfig,并在兩個(gè)屏幕中輸入信息。另外一種方法是通過(guò)編輯客戶機(jī) LDAP 配置文件 /etc/ldap.conf,然后修改 /etc/nsswitch.conf、/etc/sysconfig/authconfig 和 /etc/pam.d/system-auth。首先讓我們來(lái)看一下如何運(yùn)行 authconfig。如圖 3 所示進(jìn)行選擇,然后點(diǎn)擊 Next。圖 3. 執(zhí)行 authconfig 命令的第一個(gè)頁(yè)面在如圖 4 所示的第二個(gè)屏幕中輸入對(duì)應(yīng)的信息,然后點(diǎn)擊 OK。圖 4. 執(zhí)行 authconfig 命令的第二個(gè)頁(yè)面要手工配置 OpenLDAP 客戶機(jī),請(qǐng)遵循下面的步驟。用來(lái)跟蹤特定身份驗(yàn)證機(jī)制是否已經(jīng)啟用的文件是 /etc/sysconfig/。我們可以希望以下條目的值都是 “yes”:USELDAP=yesUSELDAPAUTH=yesUSEMD5=yesUSESHADOW=yesUSELOCAUTHORIZE=yes PAM 和 NSS 模塊使用的基本配置文件是 /etc/ldap.conf。host 選項(xiàng)指定 LDAP 服務(wù)器,base 選項(xiàng)指定這個(gè)目錄使用的 DN,最初我們希望關(guān)閉加密功能:host dhcp64-233.ibm.combase dc=ibm,dc=comssl off 要讓 NSS 服務(wù)使用 OpenLDAP 服務(wù)器,需要將 “l(fā)dap” 添加到 /etc/nsswitch.conf 文件的 passwd、shadow 和 group 行中,如下所示: passwd: files ldapshadow: files ldapgroup: files ldap 要讓 PAM 身份驗(yàn)證服務(wù)使用 OpenLDAP 服務(wù)器,請(qǐng)將 pam_ldap 行加入到 /etc/pam.d/system-auth 中,位置在對(duì)應(yīng)的標(biāo)準(zhǔn) pam_unix.so 條目之后。盡管其他設(shè)置也可以實(shí)現(xiàn)相同的結(jié)果,但是我使用下面的文件設(shè)置:auth required /lib/security/$ISA/pam_env.soauth sufficient /lib/security/$ISA/pam_unix.so likeauth nullokauth sufficient /lib/security/$ISA/pam_ldap.so use_first_passauth required /lib/security/$ISA/pam_deny.soaccount required /lib/security/$ISA/pam_unix.so broken_shadowaccount sufficient /lib/security/$ISA/pam_localuser.soaccount sufficient /lib/security/$ISA/pam_succeed_if.so uid %lt; 100 quietaccount [default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_ldap.soaccount required /lib/security/$ISA/pam_permit.sopassword requisite /lib/security/$ISA/pam_cracklib.so retry=3password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadowpassword sufficient /lib/security/$ISA/pam_ldap.so use_authtokpassword required /lib/security/$ISA/pam_deny.sosession required /lib/security/$ISA/pam_limits.sosession required /lib/security/$ISA/pam_unix.sosession optional /lib/security/$ISA/pam_ldap.so 現(xiàn)在,用戶帳號(hào)信息可以從客戶機(jī)系統(tǒng)中刪除并從 LDAP 目錄中進(jìn)行獲取了。當(dāng)用戶試圖登錄客戶機(jī)系統(tǒng)時(shí),PAM 身份驗(yàn)證服務(wù)就會(huì)從用戶那里獲取用戶名,在我們的例子中是 ldapuser。PAM 會(huì)從 LDAP 服務(wù)器中檢索識(shí)別名(DN)條目 .dn: uid=ldapuser, ou=People, dc=ibm, dc=com.。PAM 然后會(huì)從用戶那里獲取密碼。然后 PAM 試圖使用這個(gè) DN 和密碼與 LDAP 服務(wù)器進(jìn)行綁定。DN 和密碼都以正文文本的格式發(fā)送給 LDAP 服務(wù)器。在對(duì)密碼進(jìn)行散列操作之后,如果服務(wù)器可以讓用戶登錄,就會(huì)向 PAM 報(bào)告說(shuō)已經(jīng)成功進(jìn)行了綁定。成功綁定可以完全滿足 PAM 對(duì) pam_ldap 模塊匯報(bào)成功的標(biāo)準(zhǔn),如果所有其他 PAM 標(biāo)準(zhǔn)都已經(jīng)滿足了,那么就允許用戶登錄到系統(tǒng)中。當(dāng) LDAP 服務(wù)器對(duì)身份驗(yàn)證進(jìn)行處理時(shí),需要解決另外兩個(gè)問(wèn)題才能滿足提供可靠安全的身份驗(yàn)證的目標(biāo)。現(xiàn)在,任何客戶機(jī)系統(tǒng)不能成功地與 LDAP 服務(wù)器進(jìn)行通信都會(huì)阻止用戶登錄客戶機(jī)系統(tǒng)。在下一節(jié)中我們將看到如何消除這種單點(diǎn)故障,這將顯示客戶機(jī)如何從備份服務(wù)器上訪問(wèn) LDAP 目錄。由于用戶密碼是在網(wǎng)絡(luò)上以正文文本格式傳輸?shù)?#xff0c;因此這并不能滿足安全身份驗(yàn)證的需求。配置 TLS 安全性 將解決這個(gè)問(wèn)題。配置復(fù)制為了防止出現(xiàn)客戶機(jī)由于 LDAP 服務(wù)器的問(wèn)題而不能登錄的情況,我們需要采用復(fù)制技術(shù)來(lái)實(shí)現(xiàn)可靠性目標(biāo)。復(fù)制是通過(guò) OpenLDAP 復(fù)制進(jìn)程 slurpd 提供的,它會(huì)周期性地喚醒,并檢查主服務(wù)器上的日志文件,從而確定是否有任何更新。這些更新然后會(huì)傳播到從服務(wù)器上。讀請(qǐng)求可以由任何一個(gè)服務(wù)器進(jìn)行解 析,而更新請(qǐng)求則只能由主服務(wù)器進(jìn)行解析??蛻魴C(jī)需要負(fù)責(zé)在推薦地址上重試更新操作。要配置復(fù)制,需要停止 OpenLDAP 服務(wù)器的 slapd 守護(hù)進(jìn)程:清單 10. 停止服務(wù)# service ldap stop將以下內(nèi)容添加到服務(wù)器的 /etc/openldap/slapd.conf 文件中,從而啟用對(duì)新從服務(wù)器的復(fù)制。replogfile 行的內(nèi)容指定類 LDIF 變化應(yīng)該寫入的文件。replica 原語(yǔ)定義了變化應(yīng)該傳播到的主機(jī):#Replicas of this database
replogfile /var/lib/ldap/replog
replica host=dhcp64-253.ibm.com:389
binddn="cn=Manager,dc=ibm,dc=com"
credentials=secret
bindmethod=simple在運(yùn)行從 OpenLDAP 服務(wù)器的系統(tǒng)上,請(qǐng)遵循 配置 LDAP 服務(wù)器 一節(jié)給出的步驟。然后通過(guò)將信息導(dǎo)出到一個(gè) ldif 文件中并將其添加到從服務(wù)器數(shù)據(jù)庫(kù)上,從而將數(shù)據(jù)庫(kù)從主服務(wù)器拷貝到復(fù)制服務(wù)器上。在主服務(wù)器上:清單 11. 將數(shù)據(jù)導(dǎo)出到 LDIF 文件中# ldapsearch -x > database.ldif在復(fù)制服務(wù)器上:清單 12. 將數(shù)據(jù)添加到從服務(wù)器數(shù)據(jù)庫(kù)中# ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f database.ldif將以下內(nèi)容添加到復(fù)制服務(wù)器的 /etc/openldap/slapd.conf 文件中。updatedn 指定了在更新從目錄時(shí)主 slurpd 守護(hù)進(jìn)程使用的 DN。updateref 指定的是主目錄服務(wù)器。當(dāng)一個(gè) LDAP 客戶機(jī)請(qǐng)求從服務(wù)器進(jìn)行更新時(shí),從服務(wù)器就將客戶機(jī)重定向到這個(gè)主服務(wù)器上。updatedn "cn=Manager,dc=ibm,dc=com"updateref ldap://dhcp64-233.ibm.com:389/ 啟動(dòng)復(fù)制 OpenLDAP 服務(wù)器,當(dāng)它運(yùn)行之后,再啟動(dòng)主 OpenLDAP 服務(wù)器。在主服務(wù)器上,slapd 和 slurpd 都會(huì)啟動(dòng)?,F(xiàn)在,可以讓 OpenLDAP 客戶機(jī)除了主服務(wù)器之外還可以使用復(fù)制服務(wù)器,這可以通過(guò)運(yùn)行 authconfig 并將復(fù)制主機(jī)名添加到第二個(gè)屏幕中的 Server 行中實(shí)現(xiàn),也可以通過(guò)在 /etc/ldap.conf 中修改 host 實(shí)現(xiàn):host dhcp64-253.ibm.com dhcp64-233.ibm.com 為了確認(rèn)復(fù)制可以正常工作,需要研究一下在更新 gecos 屬性時(shí)到底發(fā)生了什么。復(fù)制日志使用了與 LDIF 類似的格式。在讀取 replogfile 之后,slurpd 會(huì)將這個(gè)條目拷貝到自己的重做日志中。實(shí)際的變化都以 LDIF 格式保存在主 LDAP 服務(wù)器上 /var/lib/ldap/replica/ 中的 slurpd.replog 文件中。使用文件 user_mod 中的變化,客戶機(jī)程序 ldapmodify 應(yīng)用這些變化:清單 13. 應(yīng)用 user_mod 的變化# cat user_mod
dn: uid=ldapuser,ou=People,dc=ibm,dc=com
changetype: modify
replace: gecos
gecos: test2
# tail -f /var/lib/ldap/replog &
# ldapmodify -x -r -f /home/ldapuser/user_mod -D'cn=Manager,dc=ibm,dc=com' -W
Enter LDAP Password:
modifying entry "uid=ldapuser,ou=People,dc=ibm,dc=com"
replica: dhcp64-253.ibm.com:389
time: 1130111686
dn: uid=ldapuser,ou=People,dc=ibm,dc=com
changetype: modify
replace: gecos
gecos: test2
-
replace: entryCSN
entryCSN: 20051023235446Z#000001#00#000000
-
replace: modifiersName
modifiersName: cn=Manager,dc=ibm,dc=com
-
replace: modifyTimestamp
modifyTimestamp: 20051023235446Z
-配置 TLS 安全性LDAP 是以明文的格式通過(guò)網(wǎng)絡(luò)來(lái)發(fā)送所有信息的,包括密碼。我們將采用 TLS 所提供的加密機(jī)制(SSL 的后繼者)來(lái)解決這個(gè)問(wèn)題。在傳輸層,數(shù)據(jù)使用 TLS 協(xié)議進(jìn)行加密和封裝,然后通過(guò)網(wǎng)絡(luò)進(jìn)行傳輸。用來(lái)配置加密的工具都是由 OpenSSL 包提供的。雖然加密是一個(gè)復(fù)雜的主題,但是要使用 OpenSSL 包,我們依然需要簡(jiǎn)要介紹一下 TLS 是如何工作的。數(shù)據(jù)塊使用一個(gè)對(duì)稱密鑰算法進(jìn)行加密,它使用一個(gè)密鑰來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的加密和解密。我們還有一個(gè)問(wèn)題:如何防止出現(xiàn)以正文文本格式將密鑰從 LDAP 服務(wù)器發(fā)送到 LDAP 客戶機(jī)上的情況。我們使用公鑰算法來(lái)解決這個(gè)問(wèn)題,其中客戶機(jī)可以使用一個(gè)自由獲取的公鑰對(duì)自己的密鑰進(jìn)行加密,而只有服務(wù)器才可以對(duì)這個(gè)密鑰進(jìn)行解密。公鑰是作為證書的一部分來(lái)創(chuàng)建和分發(fā)的,其中包含了一些支持信息,例如 ID、過(guò)期日期、提供這個(gè)證書的 LDAP 服務(wù)器的完整域名(FQDN)。在 LDAP 客戶機(jī)使用證書進(jìn)行加密之前,它會(huì)驗(yàn)證自己正在與之進(jìn)行交談的服務(wù)器擁有這個(gè)證書,這是通過(guò)加密一個(gè)挑戰(zhàn)并驗(yàn)證服務(wù)器可以對(duì)其進(jìn)行解密實(shí)現(xiàn)的。要驗(yàn)證發(fā)行這個(gè)證書的服務(wù)器是一個(gè)已經(jīng)批準(zhǔn)過(guò)的 LDAP 服務(wù)器,客戶機(jī)被配置為只接受本地證書機(jī)構(gòu)(CA)所簽署的證書。它使用 CA 所生成的證書中的公鑰,這個(gè)公鑰保存到客戶機(jī)中以驗(yàn)證這個(gè) LDAP 所產(chǎn)生的證書是有效的。在這個(gè)例子中,我們將自己的 LDAP 服務(wù)器設(shè)置為證書機(jī)構(gòu),并創(chuàng)建一個(gè)自簽署的證書供 LDAP 客戶機(jī)和服務(wù)器在加密信息中使用。用來(lái)構(gòu)建 TLS 服務(wù)器的 Red Hat Enterprise Linux release 4 Update 1 包是:openssl-0.9.7a-43.1:包括一個(gè)證書管理工具和提供各種加密算法和協(xié)議的共享庫(kù) 要構(gòu)建證書機(jī)構(gòu)的工作環(huán)境并生成自己的自簽署證書,需要運(yùn)行 /usr/share/ssl/misc/CA shell 腳本,這是一個(gè)對(duì) openssl 命令的封裝程序。私密性增強(qiáng)郵件(PEM)是一種用來(lái)對(duì)數(shù)據(jù)進(jìn)行加密和編碼的格式:清單 14. 運(yùn)行 CA shell 腳本# cd /usr/share/ssl/misc
# ./CA -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 1024 bit RSA private key
.........++++++
......++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated into
your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:US
State or Province Name (full name) [Berkshire]:Oregon
Locality Name (eg, city) [Newbury]:Beaverton
Organization Name (eg, company) [My Company Ltd]:IBM
Organizational Unit Name (eg, section) []:its
Common Name (eg, your name or your server's hostname) []:dhcp64-233.ibm.com
Email Address []:root@dhcp64-233.ibm.com接下來(lái),要生成由證書機(jī)構(gòu)進(jìn)行簽署的服務(wù)器證書。其余的步驟只會(huì)對(duì)主 LDAP 服務(wù)器執(zhí)行一次,此時(shí)指定的是 CN=dhcp64-233.ibm.com;然后對(duì)從服務(wù)器執(zhí)行一次,此時(shí)指定的是 CN=dhcp64-253.ibm.com。還要使用 nodes 選項(xiàng),這樣就不用在每次啟動(dòng) OpenLDAP 服務(wù)器守護(hù)進(jìn)程 slapd 時(shí)都需要輸入密碼了。簽署后的公鑰被嵌入到證書請(qǐng)求 slapd-req.pem 中,與之匹配的私鑰嵌入在 slapd-key.pem 中:清單 15. 生成服務(wù)器證書# openssl req -new -nodes -subj
'/CN=dhcp64-233.ibm.com/O=IBM/C=US/ST=Oregon/L=Beaverton'
-keyout slapd-key.pem -out slapd-req.pem -days 365
Generating a 1024 bit RSA private key
...............++++++
.....................................++++++
writing new private key to 'slapd-key.pem'
-----使用在第一個(gè)步驟中創(chuàng)建的 CA 證書對(duì)這個(gè)證書進(jìn)行簽署:清單 16. 對(duì)證書進(jìn)行簽署# openssl ca -out slapd-cert.pem -infiles slapd-req.pem
Using configuration from /usr/share/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Oct 25 02:50:05 2005 GMT
Not After : Oct 25 02:50:05 2006 GMT
Subject:
countryName = US
stateOrProvinceName = Oregon
organizationName = IBM
commonName = dhcp64-233.ibm.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
11:A2:FB:59:42:A4:B3:26:73:1D:6D:F5:4D:2F:80:F0:FA:10:38:F5
X509v3 Authority Key Identifier:
keyid:F7:6A:25:F5:76:BE:20:E7:8D:0F:51:EF:D8:86:7B:AF:2C:74:2F:80
DirName:/C=US/ST=Oregon/L=Beaverton/O=IBM/OU=its/CN=dhcp64-233.ibm.com
/emailAddress=root@dhcp64-233.ibm.com
serial:00
Certificate is to be certified until Oct 25 02:50:05 2006 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated下一個(gè)步驟將所有需要的證書拷貝到 slapd 可以找到的地方。另外,還要對(duì)每個(gè)文件強(qiáng)制采用正確的權(quán)限:清單 17. 拷貝證書并強(qiáng)制設(shè)置權(quán)限# cp -p slapd-key.pem /etc/openldap/slapdkey.pem
# cp -p slapd-cert.pem /etc/openldap/slapdcert.pem
# chown ldap:ldap /etc/openldap/slapdcert.pem
# chmod 644 /etc/openldap/slapdcert.pem
# chown ldap:ldap /etc/openldap/slapdkey.pem
# chmod 400 /etc/openldap/slapdkey.pem
# mkdir /etc/openldap/cacerts/
# cp /usr/share/ssl/misc/demoCA/cacert.pem /etc/openldap/cacerts/cacert.pem
# chown ldap:ldap /etc/openldap/cacerts cacert.pem
# chmod 644 /etc/openldap/cacerts cacert.pem在 OpenLDAP 服務(wù)器上,將以下內(nèi)容添加到 /etc/openldap/slapd.conf 文件的 global 段下面。TLSCertificateFile 和 TLSCertificateKeyFile 指定了證書文件和私鑰文件的路徑。TLSCipherSuite 指定了一個(gè) OpenSSL 密碼的列表,slapd 在與 TLS 協(xié)商建立連接時(shí)可以從中按照降序順序依次選擇。HIGH 的意思是 “所有密鑰的長(zhǎng)度都大于 128 位”;MEDIUM 表示 “所有密鑰的長(zhǎng)度都等于 128 位”;+SSLv2 表示 “不管密鑰強(qiáng)度如何,所有密碼都是以 SSL 協(xié)議版本 2 的形式指定的”。TLSCipherSuite HIGH:MEDIUM:+SSLv2TLSCACertificateFile /etc/openldap/cacerts/cacert.pemTLSCertificateFile /etc/openldap/slapdcert.pemTLSCertificateKeyFile /etc/openldap/slapdkey.pem 將以下內(nèi)容添加到 LDAP 服務(wù)器的第二個(gè)配置文件 /etc/openldap/ldap.conf 中:TLS_CACERTDIR /etc/openldap/cacertsTLS_REQCERT allow 為了允許從 OpenLDAP 客戶機(jī)上使用安全連接,需要將以下內(nèi)容添加到 /etc/openldap/ldap.conf 文件中:ssl start_tlstls_checkpeer yestls_cacertfile /etc/openldap/cacerts/cacert.pem 結(jié)束語(yǔ)按照本文給出的提示,我們現(xiàn)在已經(jīng)使用輕量級(jí)目錄訪問(wèn)協(xié)議(LDAP)構(gòu)建了一個(gè)集中的身份驗(yàn)證系統(tǒng)。我們最初是通過(guò)配置 LDAP 服務(wù)器來(lái)響應(yīng)對(duì) “dc=ibm,dc=com” 的基本請(qǐng)求開(kāi)始入手的。我們使用了一組 Perl 腳本來(lái)將用戶帳號(hào)信息遷移到 LDAP 目錄中。我們對(duì) Linux 用戶帳號(hào)服務(wù)、PAM 和 NSS 服務(wù)進(jìn)行了修改,從而可以從 LDAP 服務(wù)器中檢索用戶信息。還設(shè)置了一個(gè) LDAP 服務(wù)器副本作為備用服務(wù)器來(lái)響應(yīng)客戶機(jī)的請(qǐng)求。然后,使用 TLS 協(xié)議在 LDAP 客戶機(jī)和服務(wù)器之間對(duì)通信進(jìn)行安全加密。恭喜!為了參考方便,下面給出了本文中使用的配置文件的完整清單。清單 18. 本文例子中使用的服務(wù)器 /etc/openldap/slapd.conf 文件#
# See slapd.conf (5) for details on configuration options.
#
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
loglevel 256
pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args
# The next three lines allow use of TLS for encrypting connections.
TLSCipherSuite HIGH:MEDIUM:+SSLv2
TLSCACertificateFile /etc/openldap/cacerts/cacert.pem
TLSCertificateFile /etc/openldap/slapdcert.pem
TLSCertificateKeyFile /etc/openldap/slapdkey.pem
# access control policy:
# Restrict password access to change by owner and authentication.
# Allow read access by everyone to all other attributes.
access to attrs=shadowLastChange,userPassword
by self write
by * auth
access to *
by * read
#######################################################################
# database definition
#######################################################################
database bdb
suffix "dc=ibm,dc=com"
rootdn "cn=Manager,dc=ibm,dc=com"
rootpw {MD5}ijFYNcSNctBYg
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
replica host=dhcp64-253.ibm.com:389
binddn="cn=Manager,dc=ibm,dc=com"
credentials=secret
bindmethod=simple
replogfile /var/lib/ldap/replog清單 19. 本文例子中使用的服務(wù)器 /etc/openldap/ldap.conf 文件#
# LDAP Defaults
#
# See ldap.conf(5) for details
HOST 127.0.0.1
BASE dc=ibm,dc=com
TLS_CACERTDIR /etc/openldap/cacerts
TLS_REQCERT allow清單 20. 本文例子中使用的客戶機(jī) /etc/ldap.conf 文件a
# @(#)$Id: ldap.conf,v 1.34 2004/09/16 23:32:02 lukeh Exp $
#
# This is the configuration file for the LDAP nameservice
# switch library and the LDAP PAM module.
#
# PADL Software
# [url]http://www.padl.com[/url]
#
# Your LDAP server.
# Multiple hosts may be specified, each separated by a
# space.
host dhcp64-233.ibm.com dhcp64-233.ibm.com
# The distinguished name of the search base.
base dc=ibm,dc=com
# OpenLDAP SSL mechanism, start_tls mechanism uses the normal LDAP port 389
ssl start_tls
#Require and verify server certificate
tls_checkpeer yes
# CA certificates for server certificate verification
tls_cacertfile /etc/openldap/cacerts/cacert.pem
pam_password md5
本文轉(zhuǎn)載于:[url]http://tech.ddvip.com/2008-11/122654066191943.html[/url]
使用輕量級(jí)目錄訪問(wèn)協(xié)議(LDAP)構(gòu)建集中的身份驗(yàn)證系統(tǒng)可以減少管理成本,增強(qiáng)安全性,避免數(shù)據(jù)復(fù)制的問(wèn)題,并提高數(shù)據(jù)的一致性。隨著 Linux® 的不斷成熟,已經(jīng)出現(xiàn)了很多工具用來(lái)簡(jiǎn)化用戶帳號(hào)信息到 LDAP 目錄的遷移。還開(kāi)發(fā)了一些工具用來(lái)在客戶機(jī)和目錄服務(wù)器之間啟用加密通信配置,并通過(guò)復(fù)制提供容錯(cuò)性。本文將向您展示如何配置服務(wù)器和客戶機(jī)在 Red Hat Linux 上使用 OpenLDAP。
簡(jiǎn)介L(zhǎng)inux 發(fā)行版中提供的 OpenLDAP 軟件按照一個(gè)客戶機(jī)/服務(wù)器模型實(shí)現(xiàn)了輕量級(jí)目錄訪問(wèn)協(xié)議(LDAP)。LDAP 的設(shè)計(jì)目的是提供一種有效的方法來(lái)查找和管理信息。OpenLDAP 軟件和包提供了創(chuàng)建目錄信息樹(一個(gè)主要進(jìn)行讀操作的數(shù)據(jù)庫(kù))的工具。本文向您展示如何存儲(chǔ)用戶的帳號(hào)信息,并修改身份驗(yàn)證服務(wù)來(lái)使用 LDAP 獲取所需要的信息。內(nèi)部細(xì)節(jié)并不重要,因?yàn)檫@些工具可以將數(shù)據(jù)庫(kù)的內(nèi)容以文本格式(LDAP 數(shù)據(jù)交換格式,LDIF)呈現(xiàn)在您的面前。LDAP 信息被組織成屬性和值的組合,稱為 條目(entry)。條目可能會(huì)具有必須的屬性或可選屬性。一個(gè)條目的屬性必須要遵循 /etc/openldap/schema/ 模式文件中定義的規(guī)則。規(guī)則包含在條目的 objectclass 屬性中??匆幌孪旅娴年P(guān)系,我們可以看出 posixAccount objectclass 中包含了密碼文件條目的信息(posixAccount userPassword 是文件條目的 base64 編碼)。圖 1. LDAP 目錄條目和 Linux 密碼文件之間的關(guān)系文件 /etc/openldap/schema/nis.schema 為 posixAccount 對(duì)象類中的條目定義了所有的屬性和 objectclass。例如,下面是對(duì) uidNumber 屬性的描述:attributetype ( 1.3.6.1.1.1.1.0 NAME 'uidNumber'DESC 'An integer uniquely identifying a user in an administrative domain'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )所有的屬性類型都已經(jīng)定義了,它們被收集到 posixAccount objectclass 中。例如:objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY
DESC 'Abstraction of an account with POSIX attributes'
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
MAY ( userPassword $ loginShell $ gecos $ description ) )ldapuser 條目具有一個(gè)識(shí)別名屬性 dn,它用作用戶名,并與 userPassword 一起用來(lái)在 LDAP 目錄中記錄信息,或與 LDAP 目錄綁定在一起使用。LDAP 為作為容器使用的特殊條目提供了將這些條目組織成樹結(jié)構(gòu)的功能。在這個(gè)例子中,我們將使用一個(gè)容器 People 保存用戶帳號(hào)信息,使用另外一個(gè)容器 Groups 保存組帳號(hào)信息。所生成的目錄信息樹如圖 2 所示。圖 2. 用戶帳號(hào)信息使用的目錄信息樹讓 我們來(lái)看一下如何配置 OpenLDAP 服務(wù)器,如何將信息從系統(tǒng)文件遷移到 LDAP 目錄中,如何配置 OpenLDAP 客戶機(jī)通過(guò) LDAP 對(duì)用戶進(jìn)行身份驗(yàn)證。在使用一個(gè)集中的身份驗(yàn)證數(shù)據(jù)庫(kù)時(shí),應(yīng)該通過(guò)使用復(fù)制技術(shù)采用第二個(gè) LDAP 服務(wù)器提供高可用性,這樣在主服務(wù)器出現(xiàn)問(wèn)題時(shí),就可以使用第二個(gè) LDAP 服務(wù)器響應(yīng)客戶機(jī)的請(qǐng)求。由于諸如密碼之類的身份驗(yàn)證數(shù)據(jù)會(huì)通過(guò)網(wǎng)絡(luò)進(jìn)行傳輸,因此希望使用 TSL 協(xié)議建立加密通信連接。我們的 OpenLDAP 服務(wù)器和客戶機(jī)都是虛擬機(jī),上面運(yùn)行的是 Red Hat Enterprise Linux AS release 4(Nahant Update 1)。在我們的例子中使用了 表 1 所列出的系統(tǒng)。如果想模仿這些例子,請(qǐng)使用適合您自己的設(shè)置。表 1. 系統(tǒng)網(wǎng)絡(luò)信息
| 角色 | 主機(jī)名 | IP 地址 |
| OpenLDAP 主服務(wù)器 | dhcp64-233.ibm.com | 9.47.64.233 |
| OpenLDAP 從服務(wù)器 | dhcp64-253.ibm.com | 9.47.64.253 |
| OpenLDAP 客戶機(jī) | dhcp64-251.ibm.com | 9.47.64.251 |
by self write
by * auth
access to *
by * read接下來(lái),在 database 部分,要定義下面的內(nèi)容。使用新的 bdb 后端數(shù)據(jù)庫(kù):database bdb 指定后端數(shù)據(jù)庫(kù)需要響應(yīng)的查詢的 DN 前綴。為了確保惟一性,根前綴應(yīng)該從自己的網(wǎng)絡(luò)域名構(gòu)建出來(lái)。在本例的情況中,它是 .dc=svc,dc=beaverton,dc=ibm,dc=com.,但是在下面的例子中我們對(duì)其進(jìn)行了簡(jiǎn)化:suffix "dc=ibm,dc=com" 指定管理 DN,它不用于訪問(wèn)控制或限制數(shù)據(jù)庫(kù)的操作。也不需要在目錄中為這個(gè) DN 指定一個(gè)條目。為具有 rootpw 密碼的管理員使用 DN 可以跳過(guò) ACL 規(guī)則中的所有訪問(wèn)控制:rootdn "cn=Manager,dc=ibm,dc=com"rootpw {MD5}ijFYNcSNctBYg 這就是我們現(xiàn)在想要設(shè)置的選項(xiàng)。稍后將返回 slapd.conf 文件來(lái)配置復(fù)制,然后在配置安全性?,F(xiàn)在,我們希望將數(shù)據(jù)添加到目錄中,并確認(rèn)可以訪問(wèn)這些信息。要實(shí)現(xiàn)這種功能,需要配置服務(wù)器來(lái)使用 ldap 客戶機(jī)工具,例如 ldapadd 和 ldapsearch。ldap 客戶機(jī)工具的配置文件是 /etc/openldap/ldap.conf。我們使用的這個(gè)文件的完整列表如本文末尾的 清單 19 所示。要在 ldap 服務(wù)器上運(yùn)行這些工具,只需要將該行修改成下面的內(nèi)容:BASE dc=ibm,dc=com 設(shè)置啟動(dòng)腳本在級(jí)別 2、3 和 5 時(shí)啟動(dòng) LDAP:清單 1. 設(shè)置啟動(dòng)運(yùn)行級(jí)別# chkconfig --levels 235 ldap on從命令行中啟動(dòng)服務(wù):清單 2. 啟動(dòng)服務(wù)# service ldap start
Starting slapd: [ OK ]OpenLDAP 守護(hù)進(jìn)程 slapd 應(yīng)該已經(jīng)運(yùn)行了:清單 3. 檢查服務(wù)正在運(yùn)行# ps -ef | grep slap
ldap 13521 1 0 Oct24 ? 00:00:00 /usr/sbin/slapd -u ldap -h ldap:/// ldaps:///ldapsearch -x 命令應(yīng)該可以成功完成,但不會(huì)返回任何數(shù)據(jù)。遷移密碼和 shadow 信息Red Hat 所提供的 openldap-servers 包包含 PADL Software Pty Ltd. 公司的 MigrationTools 工具。我們將使用這些工具將數(shù)據(jù)從 Linux 系統(tǒng)文件(例如 /etc/group 和 /etc/password)轉(zhuǎn)換成 LDAP LDIF 格式,這是數(shù)據(jù)庫(kù)信息的一種文本格式的表示。這種格式是行界定、冒號(hào)分隔的屬性-值對(duì)。有一組 Perl 腳本被安裝到 /usr/share/openldap/migration/ 中執(zhí)行遷移。這些 Perl 腳本的配置信息包含在 migrate_common.ph 文件的開(kāi)頭。對(duì)于我們的目的來(lái)說(shuō),只需要修改命名前綴的變量來(lái)使用條目的識(shí)別名就足夠了,如下所示:$DEFAULT_BASE = "dc=ibm,dc=com" 在進(jìn)行這些修改之后,請(qǐng)運(yùn)行腳本 migrate_base.pl,它會(huì)創(chuàng)建根項(xiàng),并為 Hosts、Networks、Group 和 People 等創(chuàng)建低一級(jí)的組織單元:清單 4. 運(yùn)行 migrate_base.pl# migrate_base.pl > base.ldif編輯 base.ldif,刪除除下面之外的所有條目:清單 5. base.ldif 條目# cat base.ldif
dn: dc=ibm,dc=com
dc: ibm
objectClass: top
objectClass: domain
dn: ou=People,dc=ibm,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=ibm,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit在 LDAP 服務(wù)器上,使用 OpenLDAP 客戶機(jī)工具 ldapadd 將以下條目插入到數(shù)據(jù)庫(kù)中。簡(jiǎn)單身份驗(yàn)證必須要使用 -x 選項(xiàng)指定。在 slapd.conf 中定義的 rootdn 身份驗(yàn)證識(shí)別名是 “cn=Manager,dc=ibm,dc=com”。對(duì)于簡(jiǎn)單身份驗(yàn)證來(lái)說(shuō),必須使用密碼。選項(xiàng) -W 強(qiáng)制提示輸入密碼。這個(gè)密碼就是在 slapd.conf 文件中指定的 rootpw 參數(shù)的值。包含這些條目的 LDIF 文件是使用 -f 選項(xiàng)指定的:清單 6. 使用 ldapadd 插入條目# ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f base.ldif接下來(lái),從 /etc/group 中遷移 ldapuser 組:清單 7. 遷移 ldapuser 組# grep ldapuser /etc/group > group.in
# ./migrate_group.pl group.in > group.ldif
# cat group.ldif
dn: cn=ldapuser,ou=Group,dc=ibm,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapuser
userPassword: {crypt}x
gidNumber: 500
# ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f group.ldif最后,從 /etc/passwd 和 /etc/shadow 中遷移 ldapuser 的信息:清單 8. 遷移 ldapuser 信息# grep ldapuser /etc/passwd > passwd.in
# ./migrate_passwd.pl passwd.in > passwd.ldif
# cat passwd.ldif
dn: uid=ldapuser,ou=People,dc=ibm,dc=com
uid: ldapuser
cn: ldapuser
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt$1$TeOlOcMc$cpQaa0WpLSFRC1HIHW5bt1
shadowLastChange: 13048
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/ldapuser
gecos: ldapuser
# ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f passwd.ldif現(xiàn)在檢查已經(jīng)添加到數(shù)據(jù)庫(kù)中的信息。清單 9 給出了全部輸出結(jié)果:清單 9. 以 LDIF 格式填充的 OpenLDAP 數(shù)據(jù)庫(kù)# ldapsearch -x
# extended LDIF
#
# LDAPv3
# base <> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#
# ibm.com
dn: dc=ibm,dc=com
dc: ibm
objectClass: top
objectClass: domain
# People, ibm.com
dn: ou=People,dc=ibm,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
# Group, ibm.com
dn: ou=Group,dc=ibm,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
# ldapuser, Group, ibm.com
dn: cn=ldapuser,ou=Group,dc=ibm,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapuser
gidNumber: 500
# ldapuser, People, ibm.com
dn: uid=ldapuser,ou=People,dc=ibm,dc=com
uid: ldapuser
cn: ldapuser
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/ldapuser
gecos: test2
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5配置 LDAP 客戶機(jī)用來(lái)設(shè)置客戶機(jī)的 Red Hat Enterprise Linux release 4 Update 1 包包括:nss_ldap-226-6:包括兩個(gè) LDAP 訪問(wèn)客戶機(jī):nss_ldap 和 pam_ldap nss_ldap 是一組 C 庫(kù)擴(kuò)展,它允許 LDAP 目錄服務(wù)器用作一個(gè)用戶和組信息的主源 pam_ldap 是一個(gè) Linux-PAM 模塊,它支持身份驗(yàn)證功能 LDAP 身份驗(yàn)證要想正確地工作,需要配置兩個(gè)服務(wù):系統(tǒng)命名服務(wù)和身份驗(yàn)證服務(wù)。系統(tǒng)命名服務(wù)(NSS)需要配置為使用 LDAP 來(lái)解析諸如用戶和組帳號(hào)之類的資源。例如,在運(yùn)行命令 ls -l 時(shí),如果某個(gè)文件 inode 給出文件的所有者是 “user 501”,那么命名服務(wù)就需要將 “uid 501” 解析成用戶名,并在 ls 命令輸出結(jié)果中輸出。通常來(lái)說(shuō),這是通過(guò)查找 /etc/passwd 文件中的所有用戶帳號(hào)實(shí)現(xiàn)的。由于用戶現(xiàn)在都存儲(chǔ)在 LDAP 目錄中,因此系統(tǒng)需要配置成同時(shí)對(duì) passwd 文件和 LDAP 目錄中的帳號(hào)進(jìn)行解析。這種功能是通過(guò) /usr/lib/libnss_ldap.so 庫(kù)提供的。身份驗(yàn)證服務(wù)是實(shí)際向 LDAP 驗(yàn)證用戶身份的服務(wù)。可插入身份驗(yàn)證模塊(PAM)提供了本地 Linux 身份驗(yàn)證服務(wù)。下面我們將配置 PAM 先對(duì)本地的 /etc/passwd 文件檢查用戶帳號(hào),然后再對(duì) LDAP 服務(wù)器進(jìn)行檢查。PAM LDAP 模塊可以用來(lái)將身份驗(yàn)證重定向到 LDAP 目錄上。/lib/security/pam_ldap.so PAM 模塊提供了 LDAP 身份驗(yàn)證功能。身份驗(yàn)證本身是由 PAM 程序執(zhí)行的,它從身份驗(yàn)證候選機(jī)制中獲取用戶名,將其綁定到 OpenLDAP 服務(wù)器上,檢索與這個(gè) uid 條目(用戶名條目)相關(guān)的 DN;從身份驗(yàn)證候選機(jī)制中獲取密碼,然后使用這個(gè) DN 和密碼試圖將其綁定到 OpenLDAP 服務(wù)器上。如果綁定成功,PAM 會(huì)報(bào)告說(shuō)這個(gè)用戶已經(jīng)成功通過(guò)了 pam_ldap.so 提供的身份驗(yàn)證測(cè)試。根據(jù) PAM 的配置不同,在用戶看到命令行提示符之前可能會(huì)執(zhí)行其他測(cè)試。我們可以采用兩種方法來(lái)配置 LDAP 客戶機(jī)。一種快速而簡(jiǎn)單的方法是運(yùn)行 /usr/sbin/authconfig,并在兩個(gè)屏幕中輸入信息。另外一種方法是通過(guò)編輯客戶機(jī) LDAP 配置文件 /etc/ldap.conf,然后修改 /etc/nsswitch.conf、/etc/sysconfig/authconfig 和 /etc/pam.d/system-auth。首先讓我們來(lái)看一下如何運(yùn)行 authconfig。如圖 3 所示進(jìn)行選擇,然后點(diǎn)擊 Next。圖 3. 執(zhí)行 authconfig 命令的第一個(gè)頁(yè)面在如圖 4 所示的第二個(gè)屏幕中輸入對(duì)應(yīng)的信息,然后點(diǎn)擊 OK。圖 4. 執(zhí)行 authconfig 命令的第二個(gè)頁(yè)面要手工配置 OpenLDAP 客戶機(jī),請(qǐng)遵循下面的步驟。用來(lái)跟蹤特定身份驗(yàn)證機(jī)制是否已經(jīng)啟用的文件是 /etc/sysconfig/。我們可以希望以下條目的值都是 “yes”:USELDAP=yesUSELDAPAUTH=yesUSEMD5=yesUSESHADOW=yesUSELOCAUTHORIZE=yes PAM 和 NSS 模塊使用的基本配置文件是 /etc/ldap.conf。host 選項(xiàng)指定 LDAP 服務(wù)器,base 選項(xiàng)指定這個(gè)目錄使用的 DN,最初我們希望關(guān)閉加密功能:host dhcp64-233.ibm.combase dc=ibm,dc=comssl off 要讓 NSS 服務(wù)使用 OpenLDAP 服務(wù)器,需要將 “l(fā)dap” 添加到 /etc/nsswitch.conf 文件的 passwd、shadow 和 group 行中,如下所示: passwd: files ldapshadow: files ldapgroup: files ldap 要讓 PAM 身份驗(yàn)證服務(wù)使用 OpenLDAP 服務(wù)器,請(qǐng)將 pam_ldap 行加入到 /etc/pam.d/system-auth 中,位置在對(duì)應(yīng)的標(biāo)準(zhǔn) pam_unix.so 條目之后。盡管其他設(shè)置也可以實(shí)現(xiàn)相同的結(jié)果,但是我使用下面的文件設(shè)置:auth required /lib/security/$ISA/pam_env.soauth sufficient /lib/security/$ISA/pam_unix.so likeauth nullokauth sufficient /lib/security/$ISA/pam_ldap.so use_first_passauth required /lib/security/$ISA/pam_deny.soaccount required /lib/security/$ISA/pam_unix.so broken_shadowaccount sufficient /lib/security/$ISA/pam_localuser.soaccount sufficient /lib/security/$ISA/pam_succeed_if.so uid %lt; 100 quietaccount [default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_ldap.soaccount required /lib/security/$ISA/pam_permit.sopassword requisite /lib/security/$ISA/pam_cracklib.so retry=3password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadowpassword sufficient /lib/security/$ISA/pam_ldap.so use_authtokpassword required /lib/security/$ISA/pam_deny.sosession required /lib/security/$ISA/pam_limits.sosession required /lib/security/$ISA/pam_unix.sosession optional /lib/security/$ISA/pam_ldap.so 現(xiàn)在,用戶帳號(hào)信息可以從客戶機(jī)系統(tǒng)中刪除并從 LDAP 目錄中進(jìn)行獲取了。當(dāng)用戶試圖登錄客戶機(jī)系統(tǒng)時(shí),PAM 身份驗(yàn)證服務(wù)就會(huì)從用戶那里獲取用戶名,在我們的例子中是 ldapuser。PAM 會(huì)從 LDAP 服務(wù)器中檢索識(shí)別名(DN)條目 .dn: uid=ldapuser, ou=People, dc=ibm, dc=com.。PAM 然后會(huì)從用戶那里獲取密碼。然后 PAM 試圖使用這個(gè) DN 和密碼與 LDAP 服務(wù)器進(jìn)行綁定。DN 和密碼都以正文文本的格式發(fā)送給 LDAP 服務(wù)器。在對(duì)密碼進(jìn)行散列操作之后,如果服務(wù)器可以讓用戶登錄,就會(huì)向 PAM 報(bào)告說(shuō)已經(jīng)成功進(jìn)行了綁定。成功綁定可以完全滿足 PAM 對(duì) pam_ldap 模塊匯報(bào)成功的標(biāo)準(zhǔn),如果所有其他 PAM 標(biāo)準(zhǔn)都已經(jīng)滿足了,那么就允許用戶登錄到系統(tǒng)中。當(dāng) LDAP 服務(wù)器對(duì)身份驗(yàn)證進(jìn)行處理時(shí),需要解決另外兩個(gè)問(wèn)題才能滿足提供可靠安全的身份驗(yàn)證的目標(biāo)。現(xiàn)在,任何客戶機(jī)系統(tǒng)不能成功地與 LDAP 服務(wù)器進(jìn)行通信都會(huì)阻止用戶登錄客戶機(jī)系統(tǒng)。在下一節(jié)中我們將看到如何消除這種單點(diǎn)故障,這將顯示客戶機(jī)如何從備份服務(wù)器上訪問(wèn) LDAP 目錄。由于用戶密碼是在網(wǎng)絡(luò)上以正文文本格式傳輸?shù)?#xff0c;因此這并不能滿足安全身份驗(yàn)證的需求。配置 TLS 安全性 將解決這個(gè)問(wèn)題。配置復(fù)制為了防止出現(xiàn)客戶機(jī)由于 LDAP 服務(wù)器的問(wèn)題而不能登錄的情況,我們需要采用復(fù)制技術(shù)來(lái)實(shí)現(xiàn)可靠性目標(biāo)。復(fù)制是通過(guò) OpenLDAP 復(fù)制進(jìn)程 slurpd 提供的,它會(huì)周期性地喚醒,并檢查主服務(wù)器上的日志文件,從而確定是否有任何更新。這些更新然后會(huì)傳播到從服務(wù)器上。讀請(qǐng)求可以由任何一個(gè)服務(wù)器進(jìn)行解 析,而更新請(qǐng)求則只能由主服務(wù)器進(jìn)行解析??蛻魴C(jī)需要負(fù)責(zé)在推薦地址上重試更新操作。要配置復(fù)制,需要停止 OpenLDAP 服務(wù)器的 slapd 守護(hù)進(jìn)程:清單 10. 停止服務(wù)# service ldap stop將以下內(nèi)容添加到服務(wù)器的 /etc/openldap/slapd.conf 文件中,從而啟用對(duì)新從服務(wù)器的復(fù)制。replogfile 行的內(nèi)容指定類 LDIF 變化應(yīng)該寫入的文件。replica 原語(yǔ)定義了變化應(yīng)該傳播到的主機(jī):#Replicas of this database
replogfile /var/lib/ldap/replog
replica host=dhcp64-253.ibm.com:389
binddn="cn=Manager,dc=ibm,dc=com"
credentials=secret
bindmethod=simple在運(yùn)行從 OpenLDAP 服務(wù)器的系統(tǒng)上,請(qǐng)遵循 配置 LDAP 服務(wù)器 一節(jié)給出的步驟。然后通過(guò)將信息導(dǎo)出到一個(gè) ldif 文件中并將其添加到從服務(wù)器數(shù)據(jù)庫(kù)上,從而將數(shù)據(jù)庫(kù)從主服務(wù)器拷貝到復(fù)制服務(wù)器上。在主服務(wù)器上:清單 11. 將數(shù)據(jù)導(dǎo)出到 LDIF 文件中# ldapsearch -x > database.ldif在復(fù)制服務(wù)器上:清單 12. 將數(shù)據(jù)添加到從服務(wù)器數(shù)據(jù)庫(kù)中# ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f database.ldif將以下內(nèi)容添加到復(fù)制服務(wù)器的 /etc/openldap/slapd.conf 文件中。updatedn 指定了在更新從目錄時(shí)主 slurpd 守護(hù)進(jìn)程使用的 DN。updateref 指定的是主目錄服務(wù)器。當(dāng)一個(gè) LDAP 客戶機(jī)請(qǐng)求從服務(wù)器進(jìn)行更新時(shí),從服務(wù)器就將客戶機(jī)重定向到這個(gè)主服務(wù)器上。updatedn "cn=Manager,dc=ibm,dc=com"updateref ldap://dhcp64-233.ibm.com:389/ 啟動(dòng)復(fù)制 OpenLDAP 服務(wù)器,當(dāng)它運(yùn)行之后,再啟動(dòng)主 OpenLDAP 服務(wù)器。在主服務(wù)器上,slapd 和 slurpd 都會(huì)啟動(dòng)?,F(xiàn)在,可以讓 OpenLDAP 客戶機(jī)除了主服務(wù)器之外還可以使用復(fù)制服務(wù)器,這可以通過(guò)運(yùn)行 authconfig 并將復(fù)制主機(jī)名添加到第二個(gè)屏幕中的 Server 行中實(shí)現(xiàn),也可以通過(guò)在 /etc/ldap.conf 中修改 host 實(shí)現(xiàn):host dhcp64-253.ibm.com dhcp64-233.ibm.com 為了確認(rèn)復(fù)制可以正常工作,需要研究一下在更新 gecos 屬性時(shí)到底發(fā)生了什么。復(fù)制日志使用了與 LDIF 類似的格式。在讀取 replogfile 之后,slurpd 會(huì)將這個(gè)條目拷貝到自己的重做日志中。實(shí)際的變化都以 LDIF 格式保存在主 LDAP 服務(wù)器上 /var/lib/ldap/replica/ 中的 slurpd.replog 文件中。使用文件 user_mod 中的變化,客戶機(jī)程序 ldapmodify 應(yīng)用這些變化:清單 13. 應(yīng)用 user_mod 的變化# cat user_mod
dn: uid=ldapuser,ou=People,dc=ibm,dc=com
changetype: modify
replace: gecos
gecos: test2
# tail -f /var/lib/ldap/replog &
# ldapmodify -x -r -f /home/ldapuser/user_mod -D'cn=Manager,dc=ibm,dc=com' -W
Enter LDAP Password:
modifying entry "uid=ldapuser,ou=People,dc=ibm,dc=com"
replica: dhcp64-253.ibm.com:389
time: 1130111686
dn: uid=ldapuser,ou=People,dc=ibm,dc=com
changetype: modify
replace: gecos
gecos: test2
-
replace: entryCSN
entryCSN: 20051023235446Z#000001#00#000000
-
replace: modifiersName
modifiersName: cn=Manager,dc=ibm,dc=com
-
replace: modifyTimestamp
modifyTimestamp: 20051023235446Z
-配置 TLS 安全性LDAP 是以明文的格式通過(guò)網(wǎng)絡(luò)來(lái)發(fā)送所有信息的,包括密碼。我們將采用 TLS 所提供的加密機(jī)制(SSL 的后繼者)來(lái)解決這個(gè)問(wèn)題。在傳輸層,數(shù)據(jù)使用 TLS 協(xié)議進(jìn)行加密和封裝,然后通過(guò)網(wǎng)絡(luò)進(jìn)行傳輸。用來(lái)配置加密的工具都是由 OpenSSL 包提供的。雖然加密是一個(gè)復(fù)雜的主題,但是要使用 OpenSSL 包,我們依然需要簡(jiǎn)要介紹一下 TLS 是如何工作的。數(shù)據(jù)塊使用一個(gè)對(duì)稱密鑰算法進(jìn)行加密,它使用一個(gè)密鑰來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的加密和解密。我們還有一個(gè)問(wèn)題:如何防止出現(xiàn)以正文文本格式將密鑰從 LDAP 服務(wù)器發(fā)送到 LDAP 客戶機(jī)上的情況。我們使用公鑰算法來(lái)解決這個(gè)問(wèn)題,其中客戶機(jī)可以使用一個(gè)自由獲取的公鑰對(duì)自己的密鑰進(jìn)行加密,而只有服務(wù)器才可以對(duì)這個(gè)密鑰進(jìn)行解密。公鑰是作為證書的一部分來(lái)創(chuàng)建和分發(fā)的,其中包含了一些支持信息,例如 ID、過(guò)期日期、提供這個(gè)證書的 LDAP 服務(wù)器的完整域名(FQDN)。在 LDAP 客戶機(jī)使用證書進(jìn)行加密之前,它會(huì)驗(yàn)證自己正在與之進(jìn)行交談的服務(wù)器擁有這個(gè)證書,這是通過(guò)加密一個(gè)挑戰(zhàn)并驗(yàn)證服務(wù)器可以對(duì)其進(jìn)行解密實(shí)現(xiàn)的。要驗(yàn)證發(fā)行這個(gè)證書的服務(wù)器是一個(gè)已經(jīng)批準(zhǔn)過(guò)的 LDAP 服務(wù)器,客戶機(jī)被配置為只接受本地證書機(jī)構(gòu)(CA)所簽署的證書。它使用 CA 所生成的證書中的公鑰,這個(gè)公鑰保存到客戶機(jī)中以驗(yàn)證這個(gè) LDAP 所產(chǎn)生的證書是有效的。在這個(gè)例子中,我們將自己的 LDAP 服務(wù)器設(shè)置為證書機(jī)構(gòu),并創(chuàng)建一個(gè)自簽署的證書供 LDAP 客戶機(jī)和服務(wù)器在加密信息中使用。用來(lái)構(gòu)建 TLS 服務(wù)器的 Red Hat Enterprise Linux release 4 Update 1 包是:openssl-0.9.7a-43.1:包括一個(gè)證書管理工具和提供各種加密算法和協(xié)議的共享庫(kù) 要構(gòu)建證書機(jī)構(gòu)的工作環(huán)境并生成自己的自簽署證書,需要運(yùn)行 /usr/share/ssl/misc/CA shell 腳本,這是一個(gè)對(duì) openssl 命令的封裝程序。私密性增強(qiáng)郵件(PEM)是一種用來(lái)對(duì)數(shù)據(jù)進(jìn)行加密和編碼的格式:清單 14. 運(yùn)行 CA shell 腳本# cd /usr/share/ssl/misc
# ./CA -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 1024 bit RSA private key
.........++++++
......++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated into
your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:US
State or Province Name (full name) [Berkshire]:Oregon
Locality Name (eg, city) [Newbury]:Beaverton
Organization Name (eg, company) [My Company Ltd]:IBM
Organizational Unit Name (eg, section) []:its
Common Name (eg, your name or your server's hostname) []:dhcp64-233.ibm.com
Email Address []:root@dhcp64-233.ibm.com接下來(lái),要生成由證書機(jī)構(gòu)進(jìn)行簽署的服務(wù)器證書。其余的步驟只會(huì)對(duì)主 LDAP 服務(wù)器執(zhí)行一次,此時(shí)指定的是 CN=dhcp64-233.ibm.com;然后對(duì)從服務(wù)器執(zhí)行一次,此時(shí)指定的是 CN=dhcp64-253.ibm.com。還要使用 nodes 選項(xiàng),這樣就不用在每次啟動(dòng) OpenLDAP 服務(wù)器守護(hù)進(jìn)程 slapd 時(shí)都需要輸入密碼了。簽署后的公鑰被嵌入到證書請(qǐng)求 slapd-req.pem 中,與之匹配的私鑰嵌入在 slapd-key.pem 中:清單 15. 生成服務(wù)器證書# openssl req -new -nodes -subj
'/CN=dhcp64-233.ibm.com/O=IBM/C=US/ST=Oregon/L=Beaverton'
-keyout slapd-key.pem -out slapd-req.pem -days 365
Generating a 1024 bit RSA private key
...............++++++
.....................................++++++
writing new private key to 'slapd-key.pem'
-----使用在第一個(gè)步驟中創(chuàng)建的 CA 證書對(duì)這個(gè)證書進(jìn)行簽署:清單 16. 對(duì)證書進(jìn)行簽署# openssl ca -out slapd-cert.pem -infiles slapd-req.pem
Using configuration from /usr/share/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Oct 25 02:50:05 2005 GMT
Not After : Oct 25 02:50:05 2006 GMT
Subject:
countryName = US
stateOrProvinceName = Oregon
organizationName = IBM
commonName = dhcp64-233.ibm.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
11:A2:FB:59:42:A4:B3:26:73:1D:6D:F5:4D:2F:80:F0:FA:10:38:F5
X509v3 Authority Key Identifier:
keyid:F7:6A:25:F5:76:BE:20:E7:8D:0F:51:EF:D8:86:7B:AF:2C:74:2F:80
DirName:/C=US/ST=Oregon/L=Beaverton/O=IBM/OU=its/CN=dhcp64-233.ibm.com
/emailAddress=root@dhcp64-233.ibm.com
serial:00
Certificate is to be certified until Oct 25 02:50:05 2006 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated下一個(gè)步驟將所有需要的證書拷貝到 slapd 可以找到的地方。另外,還要對(duì)每個(gè)文件強(qiáng)制采用正確的權(quán)限:清單 17. 拷貝證書并強(qiáng)制設(shè)置權(quán)限# cp -p slapd-key.pem /etc/openldap/slapdkey.pem
# cp -p slapd-cert.pem /etc/openldap/slapdcert.pem
# chown ldap:ldap /etc/openldap/slapdcert.pem
# chmod 644 /etc/openldap/slapdcert.pem
# chown ldap:ldap /etc/openldap/slapdkey.pem
# chmod 400 /etc/openldap/slapdkey.pem
# mkdir /etc/openldap/cacerts/
# cp /usr/share/ssl/misc/demoCA/cacert.pem /etc/openldap/cacerts/cacert.pem
# chown ldap:ldap /etc/openldap/cacerts cacert.pem
# chmod 644 /etc/openldap/cacerts cacert.pem在 OpenLDAP 服務(wù)器上,將以下內(nèi)容添加到 /etc/openldap/slapd.conf 文件的 global 段下面。TLSCertificateFile 和 TLSCertificateKeyFile 指定了證書文件和私鑰文件的路徑。TLSCipherSuite 指定了一個(gè) OpenSSL 密碼的列表,slapd 在與 TLS 協(xié)商建立連接時(shí)可以從中按照降序順序依次選擇。HIGH 的意思是 “所有密鑰的長(zhǎng)度都大于 128 位”;MEDIUM 表示 “所有密鑰的長(zhǎng)度都等于 128 位”;+SSLv2 表示 “不管密鑰強(qiáng)度如何,所有密碼都是以 SSL 協(xié)議版本 2 的形式指定的”。TLSCipherSuite HIGH:MEDIUM:+SSLv2TLSCACertificateFile /etc/openldap/cacerts/cacert.pemTLSCertificateFile /etc/openldap/slapdcert.pemTLSCertificateKeyFile /etc/openldap/slapdkey.pem 將以下內(nèi)容添加到 LDAP 服務(wù)器的第二個(gè)配置文件 /etc/openldap/ldap.conf 中:TLS_CACERTDIR /etc/openldap/cacertsTLS_REQCERT allow 為了允許從 OpenLDAP 客戶機(jī)上使用安全連接,需要將以下內(nèi)容添加到 /etc/openldap/ldap.conf 文件中:ssl start_tlstls_checkpeer yestls_cacertfile /etc/openldap/cacerts/cacert.pem 結(jié)束語(yǔ)按照本文給出的提示,我們現(xiàn)在已經(jīng)使用輕量級(jí)目錄訪問(wèn)協(xié)議(LDAP)構(gòu)建了一個(gè)集中的身份驗(yàn)證系統(tǒng)。我們最初是通過(guò)配置 LDAP 服務(wù)器來(lái)響應(yīng)對(duì) “dc=ibm,dc=com” 的基本請(qǐng)求開(kāi)始入手的。我們使用了一組 Perl 腳本來(lái)將用戶帳號(hào)信息遷移到 LDAP 目錄中。我們對(duì) Linux 用戶帳號(hào)服務(wù)、PAM 和 NSS 服務(wù)進(jìn)行了修改,從而可以從 LDAP 服務(wù)器中檢索用戶信息。還設(shè)置了一個(gè) LDAP 服務(wù)器副本作為備用服務(wù)器來(lái)響應(yīng)客戶機(jī)的請(qǐng)求。然后,使用 TLS 協(xié)議在 LDAP 客戶機(jī)和服務(wù)器之間對(duì)通信進(jìn)行安全加密。恭喜!為了參考方便,下面給出了本文中使用的配置文件的完整清單。清單 18. 本文例子中使用的服務(wù)器 /etc/openldap/slapd.conf 文件#
# See slapd.conf (5) for details on configuration options.
#
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
loglevel 256
pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args
# The next three lines allow use of TLS for encrypting connections.
TLSCipherSuite HIGH:MEDIUM:+SSLv2
TLSCACertificateFile /etc/openldap/cacerts/cacert.pem
TLSCertificateFile /etc/openldap/slapdcert.pem
TLSCertificateKeyFile /etc/openldap/slapdkey.pem
# access control policy:
# Restrict password access to change by owner and authentication.
# Allow read access by everyone to all other attributes.
access to attrs=shadowLastChange,userPassword
by self write
by * auth
access to *
by * read
#######################################################################
# database definition
#######################################################################
database bdb
suffix "dc=ibm,dc=com"
rootdn "cn=Manager,dc=ibm,dc=com"
rootpw {MD5}ijFYNcSNctBYg
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
replica host=dhcp64-253.ibm.com:389
binddn="cn=Manager,dc=ibm,dc=com"
credentials=secret
bindmethod=simple
replogfile /var/lib/ldap/replog清單 19. 本文例子中使用的服務(wù)器 /etc/openldap/ldap.conf 文件#
# LDAP Defaults
#
# See ldap.conf(5) for details
HOST 127.0.0.1
BASE dc=ibm,dc=com
TLS_CACERTDIR /etc/openldap/cacerts
TLS_REQCERT allow清單 20. 本文例子中使用的客戶機(jī) /etc/ldap.conf 文件a
# @(#)$Id: ldap.conf,v 1.34 2004/09/16 23:32:02 lukeh Exp $
#
# This is the configuration file for the LDAP nameservice
# switch library and the LDAP PAM module.
#
# PADL Software
# [url]http://www.padl.com[/url]
#
# Your LDAP server.
# Multiple hosts may be specified, each separated by a
# space.
host dhcp64-233.ibm.com dhcp64-233.ibm.com
# The distinguished name of the search base.
base dc=ibm,dc=com
# OpenLDAP SSL mechanism, start_tls mechanism uses the normal LDAP port 389
ssl start_tls
#Require and verify server certificate
tls_checkpeer yes
# CA certificates for server certificate verification
tls_cacertfile /etc/openldap/cacerts/cacert.pem
pam_password md5
本文轉(zhuǎn)載于:[url]http://tech.ddvip.com/2008-11/122654066191943.html[/url]
轉(zhuǎn)載于:https://blog.51cto.com/lanlfeng/119401
總結(jié)
以上是生活随笔為你收集整理的使用 OpenLDAP 集中管理用户帐号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: )标识符不能是c语言的关键字,标识符不能
- 下一篇: <2021SC@SDUSC> 开源游戏引