<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    每日一得

    不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發(fā)
    最近關(guān)心的內(nèi)容:SSH,seam,flex,敏捷,TDD
    本站的官方站點是:顛覆軟件

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks
    key words : openldap ldap


    2006 年 6 月 26 日

    使用輕量級目錄訪問協(xié)議(LDAP)構(gòu)建集中的身份驗證系統(tǒng)可以減少管理成 本,增強安全性,避免數(shù)據(jù)復(fù)制的問題,并提高數(shù)據(jù)的一致性。隨著 Linux? 的不斷成熟,已經(jīng)出現(xiàn)了很多工具用來簡化用戶帳號信息到 LDAP 目錄的遷移。還開發(fā)了一些工具用來在客戶機和目錄服務(wù)器之間啟用加密通信配置,并通過復(fù)制提供容錯性。本文將向您展示如何配置服務(wù)器和客戶機在 Red Hat Linux 上使用 OpenLDAP。

    簡介

    Linux 發(fā)行版中提供的 OpenLDAP 軟件按照一個客戶機/服務(wù)器模型實現(xiàn)了輕量級目錄訪問協(xié)議(LDAP)。LDAP 的設(shè)計目的是提供一種有效的方法來查找和管理信息。OpenLDAP 軟件和包提供了創(chuàng)建目錄信息樹(一個主要進行讀操作的數(shù)據(jù)庫)的工具。本文向您展示如何存儲用戶的帳號信息,并修改身份驗證服務(wù)來使用 LDAP 獲取所需要的信息。內(nèi)部細節(jié)并不重要,因為這些工具可以將數(shù)據(jù)庫的內(nèi)容以文本格式(LDAP 數(shù)據(jù)交換格式,LDIF)呈現(xiàn)在您的面前。

    LDAP 信息被組織成屬性和值的組合,稱為 條目(entry)。條目可能會具有必須的屬性或可選屬性。一個條目的屬性必須要遵循 /etc/openldap/schema/ 模式文件中定義的規(guī)則。規(guī)則包含在條目的 objectclass 屬性中??匆幌孪旅娴年P(guān)系,我們可以看出 posixAccount objectclass 中包含了密碼文件條目的信息(posixAccount userPassword 是文件條目的 base64 編碼)。


    圖 1. LDAP 目錄條目和 Linux 密碼文件之間的關(guān)系
    LDAP 目錄條目和 Linux 密碼文件之間的關(guān)系

    文件 /etc/openldap/schema/nis.schema 為 posixAccount 對象類中的條目定義了所有的屬性和 objectclass。例如,下面是對 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 條目具有一個識別名屬性 dn,它用作用戶名,并與 userPassword 一起用來在 LDAP 目錄中記錄信息,或與 LDAP 目錄綁定在一起使用。

    LDAP 為作為容器使用的特殊條目提供了將這些條目組織成樹結(jié)構(gòu)的功能。在這個例子中,我們將使用一個容器 People 保存用戶帳號信息,使用另外一個容器 Groups 保存組帳號信息。所生成的目錄信息樹如圖 2 所示。


    圖 2. 用戶帳號信息使用的目錄信息樹
    用戶帳號信息使用的目錄信息樹

    讓我們來看一下如何配置 OpenLDAP 服務(wù)器,如何將信息從系統(tǒng)文件遷移到 LDAP 目錄中,如何配置 OpenLDAP 客戶機通過 LDAP 對用戶進行身份驗證。在使用一個集中的身份驗證數(shù)據(jù)庫時,應(yīng)該通過使用復(fù)制技術(shù)采用第二個 LDAP 服務(wù)器提供高可用性,這樣在主服務(wù)器出現(xiàn)問題時,就可以使用第二個 LDAP 服務(wù)器響應(yīng)客戶機的請求。由于諸如密碼之類的身份驗證數(shù)據(jù)會通過網(wǎng)絡(luò)進行傳輸,因此希望使用 TSL 協(xié)議建立加密通信連接。

    我們的 OpenLDAP 服務(wù)器和客戶機都是虛擬機,上面運行的是 Red Hat Enterprise Linux AS release 4(Nahant Update 1)。在我們的例子中使用了 表 1 所列出的系統(tǒng)。如果想模仿這些例子,請使用適合您自己的設(shè)置。


    表 1. 系統(tǒng)網(wǎng)絡(luò)信息
    角色主機名IP 地址
    OpenLDAP 主服務(wù)器dhcp64-233.ibm.com9.47.64.233
    OpenLDAP 從服務(wù)器dhcp64-253.ibm.com9.47.64.253
    OpenLDAP 客戶機dhcp64-251.ibm.com9.47.64.251





    回頁首


    配置 LDAP 服務(wù)器

    我們使用 Red Hat Enterprise Linux release 4 Update 1 上的包來構(gòu)建服務(wù)器:

    • openldap-2.2.13-2:包含 OpenLDAP 配置文件、庫和文檔
    • openldap-servers-2.2.13-2:包含 slapd 和 slurpd 服務(wù)器、遷移腳本和相關(guān)文件
    • openldap-clients-2.2.13-2:包含客戶機程序,用來訪問和修改 OpenLDAP 目錄

    OpenLDAP 包在服務(wù)器上安裝了很多程序:

    • 守護進程:
      • slapd:主 LDAP 服務(wù)器
      • slurpd:負責(zé)與復(fù)制 LDAP 服務(wù)器保持同步的服務(wù)器
    • 對網(wǎng)絡(luò)上的目錄進行操作的客戶機程序。下面這兩個程序是一對兒:
      • ldapadd:打開一個到 LDAP 服務(wù)器的連接,綁定、修改或增加條目
      • ldapsearch:打開一個到 LDAP 服務(wù)器的連接,綁定并使用指定的參數(shù)進行搜索
    • 對本地系統(tǒng)上的數(shù)據(jù)庫進行操作的幾個程序:
      • slapadd:將以 LDAP 目錄交換格式(LDIF)指定的條目添加到 LDAP 數(shù)據(jù)庫中
      • slapcat:打開 LDAP 數(shù)據(jù)庫,并將對應(yīng)的條目輸出為 LDIF 格式

    OpenLDAP 的主要服務(wù)器配置文件是 /etc/openldap/slapd.conf。本例所使用的完整 slapd.conf 文件如 清單 18 所示。slapd.conf 文件中包括一系列全局配置選項,它們作為一個整體應(yīng)用到 slapd 上面,后面是包含數(shù)據(jù)庫特有信息的數(shù)據(jù)庫后端定義。如果一行內(nèi)容是以空格開始的,就認為它是上一行的延續(xù)。空行和以 “#” 字符開頭的注釋行都會被忽略。

    如果您正把本文當(dāng)作練習(xí)來做,那就可以按照下面指定的方式進行修改,從而啟動 LDAP 服務(wù)器。一旦確認服務(wù)器正常工作之后,就可以添加復(fù)制功能,然后再添加安全性支持。首先是全局配置信息段的設(shè)置。其中每個選項的值都是我們想要的。

    正如上面介紹的一樣,信息被組織成屬性和值的組合,稱為條目。條目屬性必須遵循的規(guī)則是使用 objectclass 專用屬性進行組織的,這可以在 /etc/openldap/schema/ 模式文件中找到。對于身份驗證來說,需要使用在 nis.schema 中定義的 posixAccountshadowAccount objectclasses:

    include /etc/openldap/schema/nis.schema

    loglevel 行設(shè)置的是日志選項。可以將其設(shè)置為這樣的級別:調(diào)試語句和操作統(tǒng)計信息都會被記錄到 /var/log/slapd.log 中。日志級別是累加的:296 = 256 日志連接/操作/結(jié)果 + 32 搜索過濾器處理 + 8 連接管理:

    loglevel 296

    日志信息會被記錄到 syslogd LOG_LOCAL4 機制中。還需要將下面的內(nèi)容添加到 /etc/syslog.conf 中,并讓 syslogd 重新讀取自己的配置文件:

    local4.debug /var/log/slapd.log

    access 行定義了誰可以訪問目錄中的內(nèi)容。我們希望用戶可以修改自己的密碼,并更新自己的 shadow 信息來反映密碼的變化。希望身份驗證程序能夠檢索用戶的密碼。還希望用戶能夠讀取所有其他條目。注意密碼條目是不可讀的,shadow 屬性的惟一用處就是管理密碼的過期問題。

    access to attrs=shadowLastChange,userPassword
    by self write
    by * auth

    access to *
    by * read

    接下來,在 database 部分,要定義下面的內(nèi)容。

    使用新的 bdb 后端數(shù)據(jù)庫:

    database bdb

    指定后端數(shù)據(jù)庫需要響應(yīng)的查詢的 DN 前綴。為了確保惟一性,根前綴應(yīng)該從自己的網(wǎng)絡(luò)域名構(gòu)建出來。在本例的情況中,它是 .dc=svc,dc=beaverton,dc=ibm,dc=com.,但是在下面的例子中我們對其進行了簡化:

    suffix "dc=ibm,dc=com"

    指定管理 DN,它不用于訪問控制或限制數(shù)據(jù)庫的操作。也不需要在目錄中為這個 DN 指定一個條目。為具有 rootpw 密碼的管理員使用 DN 可以跳過 ACL 規(guī)則中的所有訪問控制:

    rootdn "cn=Manager,dc=ibm,dc=com"
    rootpw {MD5}ijFYNcSNctBYg

    這就是我們現(xiàn)在想要設(shè)置的選項。稍后將返回 slapd.conf 文件來配置復(fù)制,然后在配置安全性。

    現(xiàn)在,我們希望將數(shù)據(jù)添加到目錄中,并確認可以訪問這些信息。要實現(xiàn)這種功能,需要配置服務(wù)器來使用 ldap 客戶機工具,例如 ldapadd 和 ldapsearch。ldap 客戶機工具的配置文件是 /etc/openldap/ldap.conf。我們使用的這個文件的完整列表如本文末尾的 清單 19 所示。要在 ldap 服務(wù)器上運行這些工具,只需要將該行修改成下面的內(nèi)容:

    BASE dc=ibm,dc=com

    設(shè)置啟動腳本在級別 2、3 和 5 時啟動 LDAP:


    清單 1. 設(shè)置啟動運行級別
    # chkconfig --levels 235 ldap on

    從命令行中啟動服務(wù):


    清單 2. 啟動服務(wù)
    # service ldap start
    Starting slapd: [ OK ]

    OpenLDAP 守護進程 slapd 應(yīng)該已經(jīng)運行了:


    清單 3. 檢查服務(wù)正在運行
    # ps -ef | grep slap
    ldap 13521 1 0 Oct24 ? 00:00:00 /usr/sbin/slapd -u ldap -h ldap:/// ldaps:///

    ldapsearch -x 命令應(yīng)該可以成功完成,但不會返回任何數(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ù)庫信息的一種文本格式的表示。這種格式是行界定、冒號分隔的屬性-值對。

    有一組 Perl 腳本被安裝到 /usr/share/openldap/migration/ 中執(zhí)行遷移。這些 Perl 腳本的配置信息包含在 migrate_common.ph 文件的開頭。對于我們的目的來說,只需要修改命名前綴的變量來使用條目的識別名就足夠了,如下所示:

    $DEFAULT_BASE = "dc=ibm,dc=com"

    在進行這些修改之后,請運行腳本 migrate_base.pl,它會創(chuàng)建根項,并為 Hosts、Networks、Group 和 People 等創(chuàng)建低一級的組織單元:


    清單 4. 運行 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 客戶機工具 ldapadd 將以下條目插入到數(shù)據(jù)庫中。簡單身份驗證必須要使用 -x 選項指定。在 slapd.conf 中定義的 rootdn 身份驗證識別名是 “cn=Manager,dc=ibm,dc=com”。對于簡單身份驗證來說,必須使用密碼。選項 -W 強制提示輸入密碼。這個密碼就是在 slapd.conf 文件中指定的 rootpw 參數(shù)的值。包含這些條目的 LDIF 文件是使用 -f 選項指定的:


    清單 6. 使用 ldapadd 插入條目
    # ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f base.ldif

    接下來,從 /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ù)庫中的信息。清單 9 給出了全部輸出結(jié)果:


    清單 9. 以 LDIF 格式填充的 OpenLDAP 數(shù)據(jù)庫
    # 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 客戶機

    用來設(shè)置客戶機的 Red Hat Enterprise Linux release 4 Update 1 包包括:

    • nss_ldap-226-6:包括兩個 LDAP 訪問客戶機:nss_ldap 和 pam_ldap
      • nss_ldap 是一組 C 庫擴展,它允許 LDAP 目錄服務(wù)器用作一個用戶和組信息的主源
      • pam_ldap 是一個 Linux-PAM 模塊,它支持身份驗證功能

    LDAP 身份驗證要想正確地工作,需要配置兩個服務(wù):系統(tǒng)命名服務(wù)和身份驗證服務(wù)。

    系統(tǒng)命名服務(wù)(NSS)需要配置為使用 LDAP 來解析諸如用戶和組帳號之類的資源。例如,在運行命令 ls -l 時,如果某個文件 inode 給出文件的所有者是 “user 501”,那么命名服務(wù)就需要將 “uid 501” 解析成用戶名,并在 ls 命令輸出結(jié)果中輸出。通常來說,這是通過查找 /etc/passwd 文件中的所有用戶帳號實現(xiàn)的。由于用戶現(xiàn)在都存儲在 LDAP 目錄中,因此系統(tǒng)需要配置成同時對 passwd 文件和 LDAP 目錄中的帳號進行解析。這種功能是通過 /usr/lib/libnss_ldap.so 庫提供的。

    身份驗證服務(wù)是實際向 LDAP 驗證用戶身份的服務(wù)。可插入身份驗證模塊(PAM)提供了本地 Linux 身份驗證服務(wù)。下面我們將配置 PAM 先對本地的 /etc/passwd 文件檢查用戶帳號,然后再對 LDAP 服務(wù)器進行檢查。PAM LDAP 模塊可以用來將身份驗證重定向到 LDAP 目錄上。/lib/security/pam_ldap.so PAM 模塊提供了 LDAP 身份驗證功能。

    身份驗證本身是由 PAM 程序執(zhí)行的,它從身份驗證候選機制中獲取用戶名,將其綁定到 OpenLDAP 服務(wù)器上,檢索與這個 uid 條目(用戶名條目)相關(guān)的 DN;從身份驗證候選機制中獲取密碼,然后使用這個 DN 和密碼試圖將其綁定到 OpenLDAP 服務(wù)器上。如果綁定成功,PAM 會報告說這個用戶已經(jīng)成功通過了 pam_ldap.so 提供的身份驗證測試。根據(jù) PAM 的配置不同,在用戶看到命令行提示符之前可能會執(zhí)行其他測試。

    我們可以采用兩種方法來配置 LDAP 客戶機。一種快速而簡單的方法是運行 /usr/sbin/authconfig,并在兩個屏幕中輸入信息。另外一種方法是通過編輯客戶機 LDAP 配置文件 /etc/ldap.conf,然后修改 /etc/nsswitch.conf、/etc/sysconfig/authconfig 和 /etc/pam.d/system-auth。首先讓我們來看一下如何運行 authconfig。

    如圖 3 所示進行選擇,然后點擊 Next


    圖 3. 執(zhí)行 authconfig 命令的第一個頁面
    執(zhí)行 authconfig 命令的第一個頁面

    在如圖 4 所示的第二個屏幕中輸入對應(yīng)的信息,然后點擊 OK


    圖 4. 執(zhí)行 authconfig 命令的第二個頁面
    執(zhí)行 authconfig 命令的第二個頁面

    要手工配置 OpenLDAP 客戶機,請遵循下面的步驟。

    用來跟蹤特定身份驗證機制是否已經(jīng)啟用的文件是 /etc/sysconfig/。我們可以希望以下條目的值都是 “yes”:

    USELDAP=yes
    USELDAPAUTH=yes
    USEMD5=yes
    USESHADOW=yes
    USELOCAUTHORIZE=yes

    PAM 和 NSS 模塊使用的基本配置文件是 /etc/ldap.conf。host 選項指定 LDAP 服務(wù)器,base 選項指定這個目錄使用的 DN,最初我們希望關(guān)閉加密功能:

    host dhcp64-233.ibm.com
    base dc=ibm,dc=com
    ssl off

    要讓 NSS 服務(wù)使用 OpenLDAP 服務(wù)器,需要將 “l(fā)dap” 添加到 /etc/nsswitch.conf 文件的 passwd、shadow 和 group 行中,如下所示:

    passwd: files ldap
    shadow: files ldap
    group: files ldap

    要讓 PAM 身份驗證服務(wù)使用 OpenLDAP 服務(wù)器,請將 pam_ldap 行加入到 /etc/pam.d/system-auth 中,位置在對應(yīng)的標準 pam_unix.so 條目之后。盡管其他設(shè)置也可以實現(xiàn)相同的結(jié)果,但是我使用下面的文件設(shè)置:

    auth required /lib/security/$ISA/pam_env.so
    auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok
    auth sufficient /lib/security/$ISA/pam_ldap.so use_first_pass
    auth required /lib/security/$ISA/pam_deny.so

    account required /lib/security/$ISA/pam_unix.so broken_shadow
    account sufficient /lib/security/$ISA/pam_localuser.so
    account sufficient /lib/security/$ISA/pam_succeed_if.so uid %lt; 100 quiet
    account [default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_ldap.so
    account required /lib/security/$ISA/pam_permit.so

    password requisite /lib/security/$ISA/pam_cracklib.so retry=3
    password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
    password sufficient /lib/security/$ISA/pam_ldap.so use_authtok
    password required /lib/security/$ISA/pam_deny.so

    session required /lib/security/$ISA/pam_limits.so
    session required /lib/security/$ISA/pam_unix.so
    session optional /lib/security/$ISA/pam_ldap.so

    現(xiàn)在,用戶帳號信息可以從客戶機系統(tǒng)中刪除并從 LDAP 目錄中進行獲取了。當(dāng)用戶試圖登錄客戶機系統(tǒng)時,PAM 身份驗證服務(wù)就會從用戶那里獲取用戶名,在我們的例子中是 ldapuser。PAM 會從 LDAP 服務(wù)器中檢索識別名(DN)條目 .dn: uid=ldapuser, ou=People, dc=ibm, dc=com.。PAM 然后會從用戶那里獲取密碼。然后 PAM 試圖使用這個 DN 和密碼與 LDAP 服務(wù)器進行綁定。DN 和密碼都以正文文本的格式發(fā)送給 LDAP 服務(wù)器。在對密碼進行散列操作之后,如果服務(wù)器可以讓用戶登錄,就會向 PAM 報告說已經(jīng)成功進行了綁定。成功綁定可以完全滿足 PAM 對 pam_ldap 模塊匯報成功的標準,如果所有其他 PAM 標準都已經(jīng)滿足了,那么就允許用戶登錄到系統(tǒng)中。

    當(dāng) LDAP 服務(wù)器對身份驗證進行處理時,需要解決另外兩個問題才能滿足提供可靠安全的身份驗證的目標?,F(xiàn)在,任何客戶機系統(tǒng)不能成功地與 LDAP 服務(wù)器進行通信都會阻止用戶登錄客戶機系統(tǒng)。在下一節(jié)中我們將看到如何消除這種單點故障,這將顯示客戶機如何從備份服務(wù)器上訪問 LDAP 目錄。由于用戶密碼是在網(wǎng)絡(luò)上以正文文本格式傳輸?shù)模虼诉@并不能滿足安全身份驗證的需求。配置 TLS 安全性 將解決這個問題。





    回頁首


    配置復(fù)制

    為了防止出現(xiàn)客戶機由于 LDAP 服務(wù)器的問題而不能登錄的情況,我們需要采用復(fù)制技術(shù)來實現(xiàn)可靠性目標。復(fù)制是通過 OpenLDAP 復(fù)制進程 slurpd 提供的,它會周期性地喚醒,并檢查主服務(wù)器上的日志文件,從而確定是否有任何更新。這些更新然后會傳播到從服務(wù)器上。讀請求可以由任何一個服務(wù)器進行解 析,而更新請求則只能由主服務(wù)器進行解析。客戶機需要負責(zé)在推薦地址上重試更新操作。

    要配置復(fù)制,需要停止 OpenLDAP 服務(wù)器的 slapd 守護進程:


    清單 10. 停止服務(wù)
    # service ldap stop

    將以下內(nèi)容添加到服務(wù)器的 /etc/openldap/slapd.conf 文件中,從而啟用對新從服務(wù)器的復(fù)制。replogfile 行的內(nèi)容指定類 LDIF 變化應(yīng)該寫入的文件。replica 原語定義了變化應(yīng)該傳播到的主機:

    #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

    在運行從 OpenLDAP 服務(wù)器的系統(tǒng)上,請遵循 配置 LDAP 服務(wù)器 一節(jié)給出的步驟。然后通過將信息導(dǎo)出到一個 ldif 文件中并將其添加到從服務(wù)器數(shù)據(jù)庫上,從而將數(shù)據(jù)庫從主服務(wù)器拷貝到復(fù)制服務(wù)器上。

    在主服務(wù)器上:


    清單 11. 將數(shù)據(jù)導(dǎo)出到 LDIF 文件中
    # ldapsearch -x > database.ldif

    在復(fù)制服務(wù)器上:


    清單 12. 將數(shù)據(jù)添加到從服務(wù)器數(shù)據(jù)庫中
    # ldapadd -x -D "cn=Manager,dc=ibm,dc=com" -W -f database.ldif

    將以下內(nèi)容添加到復(fù)制服務(wù)器的 /etc/openldap/slapd.conf 文件中。updatedn 指定了在更新從目錄時主 slurpd 守護進程使用的 DN。updateref 指定的是主目錄服務(wù)器。當(dāng)一個 LDAP 客戶機請求從服務(wù)器進行更新時,從服務(wù)器就將客戶機重定向到這個主服務(wù)器上。

    updatedn "cn=Manager,dc=ibm,dc=com"
    updateref ldap://dhcp64-233.ibm.com:389/

    啟動復(fù)制 OpenLDAP 服務(wù)器,當(dāng)它運行之后,再啟動主 OpenLDAP 服務(wù)器。在主服務(wù)器上,slapd 和 slurpd 都會啟動。

    現(xiàn)在,可以讓 OpenLDAP 客戶機除了主服務(wù)器之外還可以使用復(fù)制服務(wù)器,這可以通過運行 authconfig 并將復(fù)制主機名添加到第二個屏幕中的 Server 行中實現(xiàn),也可以通過在 /etc/ldap.conf 中修改 host 實現(xiàn):

    host dhcp64-253.ibm.com dhcp64-233.ibm.com

    為了確認復(fù)制可以正常工作,需要研究一下在更新 gecos 屬性時到底發(fā)生了什么。復(fù)制日志使用了與 LDIF 類似的格式。在讀取 replogfile 之后,slurpd 會將這個條目拷貝到自己的重做日志中。實際的變化都以 LDIF 格式保存在主 LDAP 服務(wù)器上 /var/lib/ldap/replica/ 中的 slurpd.replog 文件中。

    使用文件 user_mod 中的變化,客戶機程序 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 是以明文的格式通過網(wǎng)絡(luò)來發(fā)送所有信息的,包括密碼。我們將采用 TLS 所提供的加密機制(SSL 的后繼者)來解決這個問題。在傳輸層,數(shù)據(jù)使用 TLS 協(xié)議進行加密和封裝,然后通過網(wǎng)絡(luò)進行傳輸。用來配置加密的工具都是由 OpenSSL 包提供的。

    雖然加密是一個復(fù)雜的主題,但是要使用 OpenSSL 包,我們依然需要簡要介紹一下 TLS 是如何工作的。數(shù)據(jù)塊使用一個對稱密鑰算法進行加密,它使用一個密鑰來實現(xiàn)對數(shù)據(jù)的加密和解密。我們還有一個問題:如何防止出現(xiàn)以正文文本格式將密鑰從 LDAP 服務(wù)器發(fā)送到 LDAP 客戶機上的情況。我們使用公鑰算法來解決這個問題,其中客戶機可以使用一個自由獲取的公鑰對自己的密鑰進行加密,而只有服務(wù)器才可以對這個密鑰進行解密。

    公鑰是作為證書的一部分來創(chuàng)建和分發(fā)的,其中包含了一些支持信息,例如 ID、過期日期、提供這個證書的 LDAP 服務(wù)器的完整域名(FQDN)。在 LDAP 客戶機使用證書進行加密之前,它會驗證自己正在與之進行交談的服務(wù)器擁有這個證書,這是通過加密一個挑戰(zhàn)并驗證服務(wù)器可以對其進行解密實現(xiàn)的。

    要驗證發(fā)行這個證書的服務(wù)器是一個已經(jīng)批準過的 LDAP 服務(wù)器,客戶機被配置為只接受本地證書機構(gòu)(CA)所簽署的證書。它使用 CA 所生成的證書中的公鑰,這個公鑰保存到客戶機中以驗證這個 LDAP 所產(chǎn)生的證書是有效的。

    在這個例子中,我們將自己的 LDAP 服務(wù)器設(shè)置為證書機構(gòu),并創(chuàng)建一個自簽署的證書供 LDAP 客戶機和服務(wù)器在加密信息中使用。

    用來構(gòu)建 TLS 服務(wù)器的 Red Hat Enterprise Linux release 4 Update 1 包是:

    • openssl-0.9.7a-43.1:包括一個證書管理工具和提供各種加密算法和協(xié)議的共享庫

    要構(gòu)建證書機構(gòu)的工作環(huán)境并生成自己的自簽署證書,需要運行 /usr/share/ssl/misc/CA shell 腳本,這是一個對 openssl 命令的封裝程序。私密性增強郵件(PEM)是一種用來對數(shù)據(jù)進行加密和編碼的格式:


    清單 14. 運行 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

    接下來,要生成由證書機構(gòu)進行簽署的服務(wù)器證書。其余的步驟只會對主 LDAP 服務(wù)器執(zhí)行一次,此時指定的是 CN=dhcp64-233.ibm.com;然后對從服務(wù)器執(zhí)行一次,此時指定的是 CN=dhcp64-253.ibm.com。還要使用 nodes 選項,這樣就不用在每次啟動 OpenLDAP 服務(wù)器守護進程 slapd 時都需要輸入密碼了。簽署后的公鑰被嵌入到證書請求 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'
    -----

    使用在第一個步驟中創(chuàng)建的 CA 證書對這個證書進行簽署:


    清單 16. 對證書進行簽署
    # 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

    下一個步驟將所有需要的證書拷貝到 slapd 可以找到的地方。另外,還要對每個文件強制采用正確的權(quán)限:


    清單 17. 拷貝證書并強制設(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 段下面。TLSCertificateFileTLSCertificateKeyFile 指定了證書文件和私鑰文件的路徑。TLSCipherSuite 指定了一個 OpenSSL 密碼的列表,slapd 在與 TLS 協(xié)商建立連接時可以從中按照降序順序依次選擇。HIGH 的意思是 “所有密鑰的長度都大于 128 位”;MEDIUM 表示 “所有密鑰的長度都等于 128 位”;+SSLv2 表示 “不管密鑰強度如何,所有密碼都是以 SSL 協(xié)議版本 2 的形式指定的”。

    TLSCipherSuite HIGH:MEDIUM:+SSLv2
    TLSCACertificateFile /etc/openldap/cacerts/cacert.pem
    TLSCertificateFile /etc/openldap/slapdcert.pem
    TLSCertificateKeyFile /etc/openldap/slapdkey.pem

    將以下內(nèi)容添加到 LDAP 服務(wù)器的第二個配置文件 /etc/openldap/ldap.conf 中:

    TLS_CACERTDIR /etc/openldap/cacerts
    TLS_REQCERT allow

    為了允許從 OpenLDAP 客戶機上使用安全連接,需要將以下內(nèi)容添加到 /etc/openldap/ldap.conf 文件中:

    ssl start_tls
    tls_checkpeer yes
    tls_cacertfile /etc/openldap/cacerts/cacert.pem





    回頁首


    結(jié)束語

    按照本文給出的提示,我們現(xiàn)在已經(jīng)使用輕量級目錄訪問協(xié)議(LDAP)構(gòu)建了一個集中的身份驗證系統(tǒng)。我們最初是通過配置 LDAP 服務(wù)器來響應(yīng)對 “dc=ibm,dc=com” 的基本請求開始入手的。我們使用了一組 Perl 腳本來將用戶帳號信息遷移到 LDAP 目錄中。我們對 Linux 用戶帳號服務(wù)、PAM 和 NSS 服務(wù)進行了修改,從而可以從 LDAP 服務(wù)器中檢索用戶信息。還設(shè)置了一個 LDAP 服務(wù)器副本作為備用服務(wù)器來響應(yīng)客戶機的請求。然后,使用 TLS 協(xié)議在 LDAP 客戶機和服務(wù)器之間對通信進行安全加密。恭喜!

    為了參考方便,下面給出了本文中使用的配置文件的完整清單。


    清單 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. 本文例子中使用的客戶機 /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
    # http://www.padl.com
    #

    # 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





    回頁首


    參考資料

    學(xué)習(xí)

    獲得產(chǎn)品和技術(shù)
    • 索取免費的 SEK for Linux,這有兩張 DVD,包括最新的 IBM for Linux 的試用版軟件,包括 DB2?、Lotus?、Rational?、Tivoli? 和 WebSphere?。

    • 在您的下一個開發(fā)項目中采用 IBM 試用版軟件,這可以從 developerWorks 上直接下載。


    討論




    回頁首


    關(guān)于作者

    Mike O'Reilly

    Mike O'Reilly 是 IBM Linux 和 VMware ESX 產(chǎn)品支持小組的一員,他為 Linux 產(chǎn)品提供支持已經(jīng)有 5 年的時間了。另外,他支持 VMware 超


    posted on 2006-08-10 09:19 Alex 閱讀(864) 評論(0)  編輯  收藏 所屬分類: linux
    主站蜘蛛池模板: 久久精品亚洲日本波多野结衣| 婷婷综合缴情亚洲狠狠尤物| 久久精品视频亚洲| 天堂亚洲免费视频| 亚洲欧洲国产成人综合在线观看| 国产午夜亚洲精品不卡电影| 国产一区二区视频免费| 麻豆亚洲AV成人无码久久精品| 青青草国产免费久久久下载 | 在线观看免费高清视频| 91亚洲国产在人线播放午夜 | 99re热免费精品视频观看 | 日本免费一区二区在线观看| 久久亚洲AV成人无码| 国产99视频精品免费专区| 亚洲Av无码精品色午夜| 1000部拍拍拍18勿入免费视频软件 | 看成年女人免费午夜视频| 亚洲第一成人影院| 两个人看的www视频免费完整版| 亚洲成AV人片在线播放无码| 8x8×在线永久免费视频| 中中文字幕亚洲无线码| 国产免费午夜a无码v视频| 国产精品免费大片一区二区| 久久久亚洲精品无码| 国内精自视频品线六区免费 | 免费很黄无遮挡的视频毛片| 国产亚洲色视频在线| 最近2019中文字幕免费直播| 亚洲一级毛片视频| 免费人成激情视频| 久9这里精品免费视频| 亚洲av一本岛在线播放| 免费播放春色aⅴ视频| 日本一区午夜艳熟免费| 亚洲二区在线视频| 亚洲精品老司机在线观看| 99re免费在线视频| 真正全免费视频a毛片| 91嫩草私人成人亚洲影院|