本檔案介紹如何在Cisco IOS®前端上使用輕量型目錄存取通訊協定(LDAP)驗證,以及如何將預設的相對可分辨名稱(RDN)從一般名稱(CN)變更為sAMAccountName。
本文件沒有特定需求。
本檔案中的資訊是根據執行Cisco IOS軟體版本15.0或更新版本的Cisco IOS裝置。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路正在作用,請確保您已瞭解任何指令可能造成的影響。
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
大多數具有LDAP的Microsoft Active Directory(AD)使用者通常將其RDN定義為sAMAccountName。如果使用身份驗證代理(auth-proxy)和自適應安全裝置(ASA)作為VPN客戶端的前端,則如果在定義AAA伺服器時定義AD伺服器型別,或者輸入ldap-naming-attribute 命令,則很容易解決此問題。但是在Cisco IOS軟體中,這兩種選項均不可用。預設情況下,Cisco IOS軟體使用AD中的CN屬性值進行使用者名稱身份驗證。例如,在AD中建立一個名為John Fernandes的使用者,但其使用者ID儲存為jfern。預設情況下,Cisco IOS軟體會檢查CN值。即,軟體檢查John Fernandes的使用者名稱身份驗證,而不是jfern的sAMAccountName值進行身份驗證。若要強制Cisco IOS軟體從sAMAccountName屬性值檢查使用者名稱,請使用動態屬性對映,如本檔案中所述。
雖然Cisco IOS裝置不支援這些RDN修改方法,但是您可以在Cisco IOS軟體中使用動態屬性對映來獲得類似的結果。如果您在Cisco IOS頭端上輸入show ldap attribute命令,將會看到以下輸出:
LDAP屬性 | 格式 | AAA屬性 |
---|---|---|
airespaceBwDataBurstContract | 烏龍 | bsn-data-bandwidth-burst-control |
userPassword | 字串 | 密碼 |
airespaceBwRealBurstContract | 烏龍 | bsn-realtime-bandwidth-burst-c |
員工型別 | 字串 | 員工型別 |
airespace服務型別 | 烏龍 | service-type |
airespaceACLName | 字串 | bsn-acl-name |
priv-lvl | 烏龍 | priv-lvl |
成員 | 字串DN | Supplicant客戶端組 |
cn | 字串 | 使用者名稱 |
airespaceDSCP | 烏龍 | bsn-dscp |
policyTag | 字串 | tag-name |
airespaceQOSLevel | 烏龍 | bsn-qos-level |
airespace8021PType | 烏龍 | bsn-8021p-type |
airespaceBwRealAveContract | 烏龍 | bsn-realtime-bandwidth-average |
airespaceVlan介面名稱 | 字串 | bsn-vlan-interface-name |
airespaceVapId | 烏龍 | bsn-wlan-id |
airespaceBwDataAveContract | 烏龍 | bsn-data-bandwidth-average-con |
sAMAccountName | 字串 | sam-account-name |
meetingContactInfo | 字串 | contact-info |
電話號碼 | 字串 | 電話號碼 |
從突出顯示的屬性可以看出,Cisco IOS網路接入裝置(NAD)將此屬性對映用於身份驗證請求和響應。基本上,Cisco IOS裝置中的動態LDAP屬性對映是雙向運行的。換句話說,屬性不僅在接收到響應時對映,而且在發出LDAP請求時對映。如果沒有任何使用者定義的屬性對映(NAD上的基本LDAP配置),則在發出請求時會顯示以下日誌消息:
*Jul 24 11:04:50.568: LDAP: Check the default map for aaa type=username *Jul 24 11:04:50.568: LDAP: Ldap Search Req sent ld 1054176200 base dn DC=csco,DC=com scope 2 filter (&(objectclass=*)(cn=xyz))ldap_req_encode put_filter "(&(objectclass=person)(cn=xyz))" put_filter: AND put_filter_list "(objectclass=person)(cn=xyz)" put_filter "(objectclass=person)" put_filter: simple put_filter "(cn=xyz)" put_filter: simple Doing socket write *Jul 24 11:04:50.568: LDAP: LDAP search request sent successfully (reqid:13)
若要更改此行為並強制其使用sAMAccountName屬性進行使用者名稱驗證,請輸入ldap attribute map username命令以首先建立此動態屬性對映:
ldap attribute map username map type sAMAccountName username
定義此屬性對映後,輸入attribute map <dynamic-attribute-map-name> 命令以將此屬性對映對映到所選AAA伺服器組(aaa-server)。
注意:為了簡化整個流程,思科錯誤ID CSCtr45874(僅限註冊客戶)已存檔。如果實施此增強請求,使用者將可以識別正在使用的LDAP伺服器型別,並自動更改某些預設對映以反映該特定伺服器使用的值。
本節提供用於設定本文件中所述功能的資訊。
註:使用Command Lookup Tool(僅供已註冊客戶使用)可獲取本節中使用的命令的詳細資訊。
本檔案會使用以下設定:
輸入以下命令以定義動態屬性對映:
ldap attribute mapmap type sAMAccountName username
輸入以下命令可定義AAA伺服器群組:
aaa group server ldapserver
輸入以下命令以定義伺服器:
ldap serveripv4 attribute map bind authentication root-dn password base-dn
輸入以下命令可定義要使用的身份驗證方法清單:
aaa authentication logingroup
若要檢查使用者的絕對區分名稱(DN),請在AD命令提示符下輸入以下命令之一:
dsquery user -name user1
或
dsquery user -samid user1
注意:上面提到的「user1」位於regex字串中。您還可以使用regex字串作為"user*",從使用者開始登記所有使用者名稱的DN。
若要登記單個使用者的所有屬性,請在AD命令提示符下輸入以下命令:
dsquery * -filter "(&(objectCategory=Person)(sAMAccountName=username))" -attr *
在LDAP部署中,首先執行搜尋操作,之後執行繫結操作。之所以執行此操作,是因為,如果在搜尋操作過程中返回了密碼屬性,則密碼驗證可以在LDAP客戶端本地完成,不需要額外的繫結操作。如果未返回password屬性,則可以稍後執行繫結操作。當您先執行搜尋操作,然後再執行繫結操作時,另一個優點是當使用者名稱(CN值)以基本DN字首時,搜尋結果中接收的DN可用作使用者DN,而不是形成DN。
將authentication bind-first命令與使用者定義屬性一起使用時,可能會出現問題,該屬性會更改使用者名稱屬性對映的位置。例如,如果使用此設定,可能會在驗證嘗試中看到失敗:
ldap server ss-ldap ipv4 192.168.1.3 attribute map ad-map transport port 3268 bind authenticate root-dn CN=abcd,OU=Employees,OU=qwrt Users,DC=qwrt,DC=com password blabla base-dn DC=qwrt,DC=com authentication bind-first ldap attribute-map ad-map map type sAMAccountName username
因此,您將看到Invalid credentials, Result code = 49錯誤消息。日誌消息將類似於以下內容:
Oct 4 13:03:08.503: LDAP: LDAP: Queuing AAA request 0 for processing Oct 4 13:03:08.503: LDAP: Received queue event, new AAA request Oct 4 13:03:08.503: LDAP: LDAP authentication request Oct 4 13:03:08.503: LDAP: Attempting first next available LDAP server Oct 4 13:03:08.503: LDAP: Got next LDAP server :ss-ldap Oct 4 13:03:08.503: LDAP: First Task: Send bind req Oct 4 13:03:08.503: LDAP: Authentication policy: bind-first Oct 4 13:03:08.503: LDAP: Dynamic map configured Oct 4 13:03:08.503: LDAP: Dynamic map found for aaa type=username Oct 4 13:03:08.503: LDAP: Bind: User-DN=sAMAccountName=abcd,DC=qwrt,DC=com ldap_req_encode Doing socket write Oct 4 13:03:08.503: LDAP: LDAP bind request sent successfully (reqid=36) Oct 4 13:03:08.503: LDAP: Sent the LDAP request to server Oct 4 13:03:08.951: LDAP: Received socket event Oct 4 13:03:08.951: LDAP: Checking the conn status Oct 4 13:03:08.951: LDAP: Socket read event socket=0 Oct 4 13:03:08.951: LDAP: Found socket ctx Oct 4 13:03:08.951: LDAP: Receive event: read=1, errno=9 (Bad file number) Oct 4 13:03:08.951: LDAP: Passing the client ctx=314BA6ECldap_result wait4msg (timeout 0 sec, 1 usec) ldap_select_fd_wait (select) ldap_read_activity lc 0x296EA104 Doing socket read LDAP-TCP:Bytes read = 109 ldap_match_request succeeded for msgid 36 h 0 changing lr 0x300519E0 to COMPLETE as no continuations removing request 0x300519E0 from list as lm 0x296C5170 all 0 ldap_msgfree ldap_msgfree Oct 4 13:03:08.951: LDAP:LDAP Messages to be processed: 1 Oct 4 13:03:08.951: LDAP: LDAP Message type: 97 Oct 4 13:03:08.951: LDAP: Got ldap transaction context from reqid 36ldap_parse_result Oct 4 13:03:08.951: LDAP: resultCode: 49 (Invalid credentials) Oct 4 13:03:08.951: LDAP: Received Bind Responseldap_parse_result ldap_err2string Oct 4 13:03:08.951: LDAP: Ldap Result Msg: FAILED:Invalid credentials, Result code =49 Oct 4 13:03:08.951: LDAP: LDAP Bind operation result : failed Oct 4 13:03:08.951: LDAP: Restoring root bind status of the connection Oct 4 13:03:08.951: LDAP: Performing Root-Dn bind operationldap_req_encode Doing socket write Oct 4 13:03:08.951: LDAP: Root Bind on CN=abcd,DC=qwrt,DC=com initiated.ldap_msgfree Oct 4 13:03:08.951: LDAP: Closing transaction and reporting error to AAA Oct 4 13:03:08.951: LDAP: Transaction context removed from list [ldap reqid=36] Oct 4 13:03:08.951: LDAP: Notifying AAA: REQUEST FAILED Oct 4 13:03:08.951: LDAP: Received socket event Oct 4 13:03:09.491: LDAP: Received socket event Oct 4 13:03:09.491: LDAP: Checking the conn status Oct 4 13:03:09.491: LDAP: Socket read event socket=0 Oct 4 13:03:09.491: LDAP: Found socket ctx Oct 4 13:03:09.495: LDAP: Receive event: read=1, errno=9 (Bad file number) Oct 4 13:03:09.495: LDAP: Passing the client ctx=314BA6ECldap_result wait4msg (timeout 0 sec, 1 usec) ldap_select_fd_wait (select) ldap_read_activity lc 0x296EA104 Doing socket read LDAP-TCP:Bytes read= 22 ldap_match_request succeeded for msgid 37 h 0 changing lr 0x300519E0 to COMPLETE as no continuations removing request 0x300519E0 from list as lm 0x296C5170 all 0 ldap_msgfree ldap_msgfree Oct 4 13:03:09.495: LDAP: LDAP Messages to be processed: 1 Oct 4 13:03:09.495: LDAP: LDAP Message type: 97 Oct 4 13:03:09.495: LDAP: Got ldap transaction context from reqid 37ldap_parse_result Oct 4 13:03:09.495: LDAP: resultCode: 0 (Success)P: Received Bind Response Oct 4 13:03:09.495: LDAP: Received Root Bind Response ldap_parse_result Oct 4 13:03:09.495: LDAP: Ldap Result Msg: SUCCESS, Result code =0 Oct 4 13:03:09.495: LDAP: Root DN bind Successful on:CN=abcd,DC=qwrt,DC=com Oct 4 13:03:09.495: LDAP: Transaction context removed from list [ldap reqid=37] ldap_msgfree ldap_result wait4msg (timeout 0 sec, 1 usec) ldap_select_fd_wait (select) ldap_err2string Oct 4 13:03:09.495: LDAP: Finished processing ldap msg, Result:Success Oct 4 13:03:09.495: LDAP: Received socket event
突出顯示的行表示身份驗證之前的初始繫結出現了什麼錯誤。如果從上述組態中移除authentication bind-first指令,此命令會正常運作。
使用本節內容,確認您的組態是否正常運作。
輸出直譯器工具(僅供已註冊客戶使用)(OIT)支援某些show命令。使用OIT檢視show命令輸出的分析。
顯示ldap屬性
show ldap server all
本節提供的資訊可用於對組態進行疑難排解。
輸出直譯器工具(僅供已註冊客戶使用)(OIT)支援某些show命令。使用OIT檢視show命令輸出的分析。
附註:使用 debug 指令之前,請先參閱有關 Debug 指令的重要資訊。
debug ldap all
debug ldap event
debug aaa authentication
debug aaa authorization
修訂 | 發佈日期 | 意見 |
---|---|---|
1.0 |
17-Jan-2013 |
初始版本 |