LDAP 對於存儲和檢索 AIX 用戶的用戶屬性非常有效,但使用 LDAP 進行身份驗證仍然需要用戶提供一個 AIX 密碼和一個 AD 密碼。Kerberos 支持 AIX 使用本地 AD 協議,參照用戶的 Microsoft Windows 密碼進行用戶身份驗證。
使用的 Active Directory 屬性
下列 AD 屬性可被 AIX 用於獲取用戶信息。
開始之前 - 先決條件
開始該流程之前需要對下列各項進行配置。
您的 Windows DNS 服務器中的 AIX 主機的域名系統 (DNS) 記錄(A 和 PTR)。
Active Directory 中匹配 AIX 主機名的計算機對象。
包含 AIX 對象的組織單元 (OU) 。
目標 OU 中至少包含一個支持 UNIX 的 用戶。
可用於將 LDAP 綁定到 AD 的 AD 服務帳戶。服務帳戶在任何將會具有支持 UNIX 的用戶的 OU 上都應有完整的讀權限。
確保 hostname 命令返回 AIX 服務器的完全限定域名(FQDN)。主機的 /etc/hosts 條目應為 {IP} {FQDN} {Short Name}
確保 AIX 主機將會使用 DNS 域控制器。
在 AIX 服務器上配置 Network Time Protocol (NTP) 。(如果時鐘超過 5 分鐘,Kerberos 將會失敗。)
配置 syslog 或驗證它是否按預期運行。
示例環境
示例場景可使用 AIX 6.1 TL 6 和 TL 8 以及 AIX 7.1 TL 1 進行測試,Server 2008 R2 域控制器上的 Active Directory 在 2003 功能級別運行。需要重點強調的是,域控制器必須是 Windows Server 2003 R2 或其更高版本,以便包含開箱即用的 UNIX LDAP 屬性。如果您擁有 Server 2003 域控制器,那麼可以使用 Microsoft Windows Services for UNIX 附加組件來擴展 LDAP 模式,以包括 UNIX 屬性。(本文並不打算介紹該場景。)
安裝和配置 LDAP
安裝下列 LDAP 客戶端文件集:
idsldap.clt32bit61.rte.6.1.0.40.bff
idsldap.clt64bit61.rte.6.1.0.40.bff
idsldap.cltbase61.rte.6.1.0.40.bff
idsldap.cltjava61.rte.6.1.0.40.bff
idsldap.msg61.en_US.6.1.0.40.bff
使用下列命令驗證安裝:
lslpp -L | grep ldap
示例輸出
idsldap.clt32bit61.rte 6.1.0.40 C F Directory Server - 32 bit idsldap.clt64bit61.rte 6.1.0.40 C F Directory Server - 64 bit idsldap.cltbase61.adt 6.1.0.40 C F Directory Server - Base Client idsldap.cltbase61.rte 6.1.0.40 C F Directory Server - Base Client idsldap.cltjava61.rte 6.1.0.40 C F Directory Server - Java Client idsldap.msg61.en_US 6.1.0.40 C F Directory Server - Messages -
檢查 LDAP 實用程序是否已安裝:
ls -l /opt/IBM/ldap/V6.1/
示例輸出
total 64 drwxr-xr-x 4 root system 4096 Jan 25 13:26 bin drwxr-xr-x 2 root system 8192 Apr 08 2011 codeset drwxr-xr-x 2 root system 256 Jan 25 13:26 etc drwxr-xr-x 3 root system 4096 Apr 08 2011 examples drwxr-xr-x 2 root system 4096 Apr 08 2011 include drwxr-xr-x 8 bin bin 4096 Jan 25 13:25 java drwxr-xr-x 2 bin bin 256 Apr 08 2011 javalib drwxr-xr-x 2 root system 4096 Jan 25 13:26 lib drwxr-xr-x 2 root system 4096 Jan 25 13:26 lib64 drwxr-xr-x 3 root system 256 Apr 08 2011 nls
測試 LDAP 客戶端:
/opt/IBM/ldap/V6.1/bin/ldapsearch -h pdc1.test.local -D [email protected] -w \? -b DC=test,DC=local -v sAMAccountName=aixtest
其中:
pdc1.test.local 是域控制器的 IP 地址。
[email protected] 是您的 AD 服務帳戶的名稱和領域(域)。
-w \? 提示密碼。
DC=test,DC=local 是 OU(在其中開始搜索)的可識別名稱。
sAMAccountName=aixtest 是搜索過濾器。為簡便起見,這裡選中了 sAMAccountName。
示例輸出
Enter password ==> ldap_init(pdc1.test.local, 389) filter pattern: sAMAccountName=aixtest returning: ALL filter is: (sAMAccountName=aixtest) CN=AIX TEST,OU=AIX,DC=test,DC=local objectClass=top objectClass=person objectClass=organizationalPerson objectClass=usercn=AIX TESTsn=TEST description=User to Test AIX LDAP Integration givenName=AIX distinguishedName=CN=AIX TEST,OU=AIX,DC=test,DC=local instanceType=4 whenCreated=20130124211358.0Z whenChanged=20130125174941.0Z displayName=AIX TESTuSN Created=24337388uSN Changed=24435474 name=AIX TEST objectGUID=NOT ASCII userAccountControl=4194816 codePage=0 countryCode=0 lastLogon=130036097814205000pwd LastSet=130035356383925796 primaryGroupID=513 objectSid=NOT ASCII acountExpires=130061592000000000 logonCount=1 sAMAccountName=aixtest sAMAccountType=805306368 [email protected] Category=CN=Person,CN=Schema,CN=Configuration,DC=test,DC=localdS CorePropagationData=16010101000000.0Z lastLogonTimestamp=130036097814205000 msDS-SupportedEncryptionTypes=0uid=aixtestmanager=CN=Jeff Geiger,OU=IT,DC=test, DC=local uidNumber=50001 gidNumber=10001 gecos=AIX Test User unixHomeDirectory=/home/aixtest loginShell=/usr/bin/ksh 1 matches
使用 LDAP 服務器測試 LDAP 客戶端有幾個目的:
通過檢查確保正確安裝了 LDAP 實用程序和庫。
驗證您將在配置 LDAP 時使用的選項是正確的。
配置 AIX LDAP 客戶端:
mksecldap -c -h pdc1.test.local -a "CN=AIX Service,OU=Service Accounts,DC=TEST,DC=LOCAL" -d OU=AIX,DC=test,DC=local -p examplePassword
其中:
pdc1.test.local 是域控制器的主機名。
CN=AIX Service,OU=Service Accounts,DC=TEST,DC=LOCAL 是服務帳戶的可識別名稱。
OU=AIX,DC=test,DC=local 是 OU(在此 OU 中,您的 AIX 位於 AD 中)的可識別名稱。
examplePassword 是服務帳戶密碼。 mksecldap 可在配置文件中對密碼進行加密。
注意:可在 6.1TL8 上進行加密,不能在 6.1TL6 上進行加密
該命令在成功完成時沒有產生輸出。
通過查找未注釋行來驗證 ldap.cfg 文件:
grep '^[:a-z:]' /etc/security/ldap/ldap.cfg
示例輸出
ldapservers:pdc1.test.local binddn:CN=AIX Service,OU=Service Accounts,DC=test,DC=local bindpwd:examplePassword authtype:unix_auth useSSL:no userattrmappath:/etc/security/ldap/sfur2user.map groupattrmappath:/etc/security/ldap/sfur2group.map userbasedn:OU=AIX,DC=test,DC=local groupbasedn:OU=AIX,DC=test,DC=local userclasses:user,person,organizationalperson groupclasses:group ldapport:389 searchmode:ALL defaultentrylocation:LDAP serverschematype:sfur2
通過編輯來添加額外的 LDAP 服務器,並檢查基本可識別名稱 (DN) 和緩存大小。我建議至少提供兩個 LDAP 服務器,在地理上,它們位於具有 AIX 主機的局域網中,以避免延遲並提供故障轉移。
編輯 :/etc/security/ldap/ldap.cfg 並確保以下設置正確:
userattrmappath:/etc/security/ldap/sfur2user.map
groupattrmappath:/etc/security/ldap/sfur2group.map
serverschematype:sfur2
Windows Server 2008 R2 Active Directory 包含 R2 UNIX 屬性,無需安裝 Microsoft Windows Services for UNIX 程序包。sfur2 映射最適合此場景。
注意:在 6.1TL8 上,我必須更改從 sfu30 到 sfur2 的映射;在 TL6 上不需要這樣做。
查看文本結尾 示例配置文件 中的示例 ldap.cfg。
在某些情況下,用戶的 AIX 用戶名(AD UID)可能與 AD 中的 sAMAccountName 不匹配。如果是這樣的話,請將下列代碼行添加到 /etc/security/ldap/sfur2user.map,以支持用戶更改其密碼 uring Kerberos。
auth_name SEC_CHAR sAMAccountName s na yes
啟動 LDAP 客戶端服務:
restart-secldapclntd
示例輸出
The secldapclntd daemon terminated successfully.
Starting the secldapclntd daemon.The secldapclntd daemon started successfully.
驗證 LDAP 客戶端服務正在運行:
ls-secldapclntd
示例輸出
ldapservers=pdc1.test.local ldapport=389active connections=1 ldapversion=3 userbasedn=OU=AIX,DC=test,DC=local groupbasedn=OU=AIX,DC=test,DC=local idbasedn= usercachesize=1000 usercacheused=1 groupcachesize=100 groupcacheused=2 usercachetimeout=300 groupcachetimeout=300 heartbeatT=300 numberofthread=10 connectionsperserver=10 alwaysmaster=no authtype=UNIX_AUTH searchmode=ALL defaultentrylocation=LDAP ldaptimeout=60 serverschematype=SFUR2 userobjectclass=user,person,organizationalperson groupobjectclass=group
測試 LDAP 分辨率:
lsuser -R LDAP ALL
輸出應返回您使用 UNIX 屬性創建的用戶。
示例輸出
aixtest id=50001 pgrp=AIXLDAP groups=AIXLDAP home=/home/aixtest shell=/usr/bin/ksh gecos=AIX Test User login=true su=true rlogin=true daemon=true admin=false sugroups=ALL admgroups= tpath=nosak ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22 registry=LDAP SYSTEM=KRB5LDAP or compat logintimes= loginretries=0 pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=-1 minalpha=0 minother=0 mindiff=0 maxrepeats=8 minlen=0 histexpire=0 histsize=0 pwdchecks= dictionlist= fsize=-1 cpu=-1 data=262144 stack=65536 core=2097151 rss=65536 nofiles=-1 time_last_login=1359144648 tty_last_login=/dev/pts/1 host_last_login=pc42.test.local unsuccessful_login_count=0 roles=
安裝和配置 Kerberos
驗證 Kerberos 客戶端尚未安裝:
lslpp -l | grep krb
如果未安裝 Kerberos,則不會產生輸出。
從 IBM AIX Web Download Pack Programs 網站下載 AIX Network Authentication Service (NAS) 程序包。
注意:我對 AIX 6.1 TL8 和 AIX 7.1 使用了 NAS 版本 1.5.0.4,對 AIX 6.1 TL6 使用了版本 1.5.0.2 。
提取和安裝 NAS 程序包:
#list contents to verify a good download: tar tf NAS_1.5.0.x_aix_image.tar #untar tar xf NAS_1.5.0.x_aix_image.tar #rename folder tosomething more descriptive mv images AIX_NAS
安裝下列程序包:
krb5.client.rte
krb5.client.samples
krb5.doc.en_US.html
krb5.doc.en_US.pdf
krb5.lic
krb5.client.rte
注意:在 smit 中選擇 client、doc 和 lic 程序包將向您提供要安裝的程序包。
配置 Kerberos:
mkkrb5clnt -c pdc1.test.local -r TEST.LOCAL -s pdc1.test.local -d TEST.LOCAL -i LDAP -D
其中:
pdc1.test.local 是域控制器的 FQDN(在兩個交換機中)。
TEST.LOCAL 是域名、域的 FQDN,全部大寫(在兩個交換機中)。
LDAP 是用戶注冊信息的來源。這將觸發 /etc/methods.cfg 中 KRB5LDAP stanza 的創建。
示例輸出
Initializing configuration...
Creating /etc/krb5/krb5_cfg_typeCreating /etc/krb5/krb5.confThe command mkkrb5clntcompleted successfully.
編輯 Kerberos 配置文件:
打開生成的 Kerberos 配置文件 (/etc/krb5/krb5.conf) 並進行如下修改。在示例配置文件(本文結尾處)中,可以使用 krb5.conf 作為模板。
要點:
將兩個 enctypes 都設置成 arcfour-hmac。
添加 dns_lookup_kdc 和 dns_lookup_realm,並將它們設置成 true。
將本地域控制器的其他 kdc 條目添加到 AIX 框中。(避免 WAN 遍歷。)
添加 master_kdc 條目,並讓它們指向您的主要本地域控制器。
確保具有適用於大寫域、小寫域和點分域 (dotted domain) 的解析器。
使用 /usr/krb5/bin/kinit 測試 Kerberos:
/usr/krb5/bin/kinit [email protected]
這應該提示輸入密碼,並且不會沒有輸出返回。(使用任何有效的 AD 帳戶。)
示例輸出
Password for [email protected]:
驗證是否發布了 Kerberos 票據:
/usr/krb5/bin/klist
這應該返回一個都帶有截止日期和更新截止日期的有效票據。
示例輸出
Default principal: [email protected] starting Expires Service principal01/25/13 13:56:23 01/25/13 23:56:20 krbtgt/[email protected] until 01/26/13 13:56:23
清除票據緩存(沒有輸出)。
/usr/krb5/bin/kdestroy
為了支持在 AIX 服務器和 Active Directory 之間進行無密碼 Kerberos 通信,需要在域控制器上生成一個主機主體 keytab。這可以通過域控制器中的 ktpass 命令完成,而且必須使用一個具有域管理權限的帳戶運行此命令。
生成主機主體密鑰表:
ktpass /princ host/[email protected] /ptype KRB5_NT_PRINCIPAL /out aix1.keytab /pass examplePassword /crypto RC4-HMAC-NT /mapuser TEST\aix1 /kvno 2
其中:
host/[email protected] 是 AIX 主機的 FQDN。請將 host/ 後綴記錄下來。
KRB5_NT_PRINCIPAL 是 Kerberos 主體類型。該類型不會發生改變。aix1.keytab 是將要創建的 keytab 文件。該文件將被轉移到 AIX 主機,為了清楚起見,該文件被命名為 {hostname}.keytab 。
examplePassword 是將為主機主體設置的密碼。該密碼應該比較復雜,但您可能永遠不會用到它。
RC4-HMAC-NT 是已使用的加密類型。RC4 是 2008 R2 上的 Kerberos 的默認值 。
TEST\aix1 是 AD 中的計算機對象的 {domain}\{hostname} 。
/kvno 2 是密鑰版本號。
想提示改變對象密碼時回答 yes。請記錄所用的密碼。
示例輸出
C:\Windows\system32>ktpass /princ host/[email protected] /ptype KRB 5_NT_PRINCIPAL /out aix1.keytab /pass examplePassword /crypto RC4-HMAC-NT /mapu ser TEST\aix1 /kvno 2 Targeting domain controller: PDC1.test.local Successfully mapped host/aix1.test.local to AIX1$. WARNING: Account AIX1$ is not a user account (uacflags=0x1021). WARNING: Resetting AIX1$'s password may cause authentication problems if AIX1$ is being used as a server. Reset AIX1$'s password [y/n]? y Password succesfully set! WARNING: pType and account type do not match. This might cause problems. Key created. Output keytab to st1iaxnb07.keytab: Keytab version: 0x502 keysize 70 host/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 2 etype 0x17 (RC4-HMAC) keylength 16 (0xb19656597cd0e7cec30561afaa7e09d4)
注意:/kvno 2 值是通過試驗、錯誤和程序包捕獲發現的。在沒有將該參數傳遞給 ktpass 命令的情況下,我沒有進行此設置工作。
在 AIX 中復制並導入 keytab 文件:
將您的 keytab 文件通過 SFTP 協議傳遞到 AIX 服務器。(本例中,該文件是 /tmp/aix1.keytab。)
首先,刪除所有現有 keytab。打開 ktutil 並讀取 keytab 文件 (rkt),列出密鑰 (l),然後將 keytab (wkt) 寫入默認 Kerberos keytab 文件 (/etc/krb5/krb5.keytab)。
示例輸出
rm /etc/krb5/krb5.keytab
/usr/krb5/sbin/ktutil
ktutil: rkt /tmp/aix1.keytab
ktutil: l
slot KVNO Principal------ ------ ------------------------------------------------------>
1 2 host/[email protected]: wkt /etc/krb5/krb5.keytab
ktutil: q
驗證 keytab:
/usr/krb5/bin/klist –ke
這應該在域控制器上提供 ktpass 生成的密鑰。
示例輸出
Keytab name: FILE:/etc/krb5/krb5.keytab
KVNO Principal
---- ---------
2 host/[email protected] (ArcFour with HMAC/md5)
測試 keytab:
/usr/krb5/bin/kinit -k
注意:這裡應該沒有輸出。如果您得到錯誤消息,很可能存在 DNS 問題。我花了大量時間在這一步進行 KVNO、加密類型和 DNS 錯誤的故障排除。我使用 tcpdump (tcpdump -i en0 -s 65535 -w krb5ldap_ts.pcap host 10.10.0.5) 命令捕獲傳入或傳出域控制器的程序包,並加載 Wireshark 中的 pcap 文件,查看發生了什麼。
使用 klist 實用程序查看已發布的票據:
/usr/krb5/bin/klist
這應該顯示主機主體的票據。
示例輸出
Ticket cache: FILE:/var/krb5/security/creds/krb5cc_0
Default principal: host/[email protected]
Valid starting Expires Service principal
01/25/13 13:59:10 01/25/13 23:59:03 krbtgt/[email protected]
Renew until 01/26/13 13:59:10
配置 AIX 以使用 KRB5LDAP
編輯 /etc/methods.cfg:
關鍵點:
確保 KRB5 選項包括:authonly,is_kadmind_compat=no,tgt_verify=no,allow_expired_pwd=yes
確保 KRB5LDAP stanza 包括 auth 和 db 選項。
使用示例 methods.cfg 文件(在本文結尾處提供)作為一個示例。
修改 /etc/security/user:
chsec -f /etc/security/user -s default -a SYSTEM="KRB5LDAP OR compat"
示例輸出
# lssec -f /etc/security/user -s default -a SYSTEM
default SYSTEM="compat"
# chsec -f /etc/security/user -s default -a SYSTEM="KRB5LDAP or compat"
# lssec -f /etc/security/user -s default -a SYSTEM
default SYSTEM="KRB5LDAP or compat"
將 Kerberos 添加到授權的身份認證實體並驗證:
chauthent -k5 –std
#Verify
lsauthent
這應該返回 Kerberos 5 和 Standard AIX。
示例輸出
Kerberos 5
Standard Aix
測試 KRB5LDAP
通過查詢您使用 AIX 屬性(本例中是 aixtest)在 AD 中創建的用戶來測試 KRB5LDAP:
lsuser –R KRB5LDAP aixtest
這應該從 AIX 上下文中返回有關 AD 用戶的細節。
示例輸出
aixtest id=50001 pgrp=AIXLDAP groups=AIXLDAP home=/home/aixtest shell=/usr/bin/ksh
gecos=AIX Test User login=true su=true rlogin=true daemon=true admin=false sugroups=ALL
admgroups= tpath=nosak ttys=ALL expires=0 auth1=SYSTEM auth2=NONE umask=22
registry=KRB5LDAP SYSTEM=KRB5LDAP or compat logintimes= loginretries=0
pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=-1 minalpha=0
minother=0 mindiff=0 maxrepeats=8 minlen=0
histexpire=0 histsize=0 pwdchecks= dictionlist= fsize=-1 cpu=-1
data=262144 stack=65536 core=2097151 rss=65536 nofiles=-1 roles=
查看本欄目更多精彩內容:http://www.bianceng.cn/OS/unix/
試著將用戶轉換成 AD 定義的用戶:
su – aixtest
這應該可以正常運行。如果用戶主目錄不存在的話,您可能看到無法將目錄更改為用戶主目錄的錯誤。(這可以通過將該選項設置成自動創建主目錄來修復。)如果沒有對用戶的主要組進行設置,或者如果沒有將該組定義成一個 AD 對象,那麼有可能也會出現錯誤。
嘗試以 AD 定義的用戶的身份使用 Secure Shell (SSH) 連接到主機:
ssh aixtest@localhost
您應該能夠進行登錄。登錄之後,檢查 AUTHSTATE 環境變量和 klist 輸出(類似下列示例),以確保 Kerberos 被用於身份驗證。
示例輸出
aixtest@localhost's password: ******************************************************************************* * * * * * Welcome to AIX Version 6.1! * * * * * * Please see the README file in /usr/lpp/bos for information pertinent to * * this release of the AIX Operating System. * * * * * ******************************************************************************* Could not chdir to home directory /home/aixtest: The file access permissions do not allow the specified action. $ pwd / $ echo $AUTHSTATE KRB5LDAP $ /usr/krb5/bin/klist Ticket cache: FILE:/var/krb5/security/creds/krb5cc_x0000000000000001 Default principal: [email protected] Valid starting Expires Service principal 01/25/13 14:02:59 01/26/13 00:02:52 krbtgt/[email protected] Renew until 01/26/13 14:02:59 $ exit Connection to localhost closed.
注意:AUTHSTATE 變量應包含 KRB5LDAP,而且運行 klist 應該返回一個有效的 Kerberos 票據。
示例配置文件
/etc/krb5/krb5.conf
[libdefaults] default_realm = TEST.LOCAL default_keytab_name = FILE:/etc/krb5/krb5.keytab default_tkt_enctypes = arcfour-hmac default_tgs_enctypes = arcfour-hmac dns_lookup_kdc = true dns_lookup_realm = true [realms] TEST.LOCAL = { kdc = PDC1.TEST.LOCAL:88 kdc = PDC2.TEST.LOCAL:88 admin_server = PDC1.TEST.LOCAL:749 master_kdc = PDC1.TEST.LOCAL default_domain = TEST.LOCAL } [domain_realm] .TEST.LOCAL = TEST.LOCAL TEST.LOCAL = TEST.LOCAL PDC1.TEST.LOCAL = TEST.LOCAL PDC2.TEST.LOCAL = TEST.LOCAL test.local = TEST.LOCAL .test.local = TEST.LOCAL [logging] default = SYSLOG:debug:local1
/etc/security/ldap/ldap.cfg
ldapservers:pdc1.test.local binddn:CN=AIX Service,OU=AIX,DC=test,DC=local bindpwd:{DESv2}AAAAAAAAAAAABBBBBBBBBBCCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEEE authtype:unix_auth useSSL:no userattrmappath:/etc/security/ldap/sfur2user.map groupattrmappath:/etc/security/ldap/sfur2group.map userbasedn:OU=AIX,DC=test,DC=local groupbasedn:OU=AIX,DC=test,DC=local userclasses:user,person,organizationalperson groupclasses:group ldapport:389 searchmode:ALL defaultentrylocation:LDAP serverschematype:sfur2
/etc/methods.cfg
LDAP: program = /usr/lib/security/LDAP program_64 =/usr/lib/security/LDAP64 NIS: program = /usr/lib/security/NIS program_64 = /usr/lib/security/NIS_64 DCE: program = /usr/lib/security/DCE KRB5: program = /usr/lib/security/KRB5 program_64 = /usr/lib/security/KRB5_64 options = authonly,is_kadmind_compat=no,tgt_verify=no,allow_expired_pwd=yes KRB5LDAP: options = auth=KRB5,db=LDAP