- openldap密碼策略
- OpenLDAP服務端定製密碼策略
- 客戶端策劃策略實例
- 定義用戶第一次登陸就修改密碼
問題排查手冊
重點推薦官方文檔
備註:本文依然承接系列文。html
OpenLDAP密碼策略包括如下幾個方面shell
密碼策略涉及的屬性以下:數據庫
編輯slapd.conf,修改添加以下內容,從新生成數據庫並加載slapd進程vim
[root@mldap01 ~]# vim /etc/openldap/slapd.conf 修改部分: modulepath /usr/lib/openldap modulepath /usr/lib64/openldap moduleload ppolicy.la 添加部分:添加在最後一行 overlay ppolicy ppolicy_default cn=default,ou=Pwpolicies,dc=gdy,dc=com ppolicy_hash_cleartext ppolicy_use_lockout // 解釋 overlay ppolicy 必須添加 ppolicy_default cn=default,ou=Pwpolicies,dc=gdy,dc=com 指定默認的密碼規則條目, 若是例外條目須要在用戶中定義pwdPolicySubentry DN ppolicy_hash_cleartext 密碼加密存儲, 默認支持明文存儲不安全 ppolicy_use_lockout 超過最多失敗次數後,鎖定帳號時的提示 [root@mldap01 ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ config file testing succeeded [root@mldap01 ~]# chown -R ldap.ldap /etc/openldap [root@mldap01 ~]# /etc/init.d/slapd restart Stopping slapd: [ OK ] Starting slapd: [ OK ]
查看是否加載了ppolicy.la模塊安全
查看屬性是否認義bash
定義密碼策略組服務器
```shell添加ou條目
[root@mldap01 slapd.d]# cat << EOF | ldapadd -x -D "cn=Manager,dc=gdy,dc=com" -Wssh
dn: ou=ppolicy,dc=gdy,dc=com
objectClass: organizationalUnit
ou: ppolicy
EOF
Enter LDAP Password:
adding new entry "ou=ppolicy,dc=gdy,dc=com"測試
定義默認密碼規則ui
[root@mldap01 slapd.d]# cat << EOF | ldapadd -x -D "cn=Manager,dc=gdy,dc=com" -W dn: cn=default,ou=ppolicy,dc=gdy,dc=com cn: default objectClass: pwdPolicy objectClass: person pwdAllowUserChange: TRUE pwdAttribute: userPassword pwdExpireWarning: 259200 pwdFailureCountInterval: 0 pwdGraceAuthNLimit: 5 pwdInHistory: 5 pwdLockout: TRUE pwdLockoutDuration: 300 pwdMaxAge: 2592000 pwdMaxFailure: 5 pwdMinAge: 0 pwdMinLength: 8 pwdMustChange: TRUE sn: summy value EOF Enter LDAP Password: adding new entry "cn=default,ou=ppolicy,dc=gdy,dc=com" // 備註 注意此處不用添加 pwdSafeModify: TRUE, 可能會致使錯誤。
定義用戶遵照指定的密碼策略
默認狀況下,全部OpenLDAP遵照默認密碼策略。要實現不通用戶或者不一樣組具備不通的密碼策略,能夠根據本身的需求定製密碼策略。例如, cn=security,ou=policy,dc=gdy,dc=com定義安所有門所擁有的密碼策略,命令以下:
dn: uid=wulei,dc=gdy,dc=com objectClass: inetOrgPerson uid: wulei cn: wu lei sn: lei loginShell: /bin/bash homeDirectory: /home/wulei homePhone: xxxxxxxxx employeeNumber: 123456 mail: wulei@gdy.com pwdPolicySubentry: cn=security,ou=policy,dc=gdy,dc=com // 備註 在用戶添加pwdPolicySubentry: DN, 那麼就能夠不用遵循默認的條例, 而使用這裏定義的條例
pwdInHistory
密碼歷史記錄
```shell
在客戶端先使用ssh登陸一個用戶user3, 而後執行passwd修改6次密碼。在服務端查看以下
[root@mldap01 ~]# ldapsearch -x -LLL uid=user3 +
dn: uid=user3,ou=people,dc=gdy,dc=com
structuralObjectClass: account
entryUUID: 5c68cef0-f82d-1037-8087-6ff088bb15ae
creatorsName: cn=Manager,dc=gdy,dc=com
createTimestamp: 20180530081530Z
pwdHistory: 20180530094257Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}\(1\)MrxsXdF
k$gM/H7GbqYBjqz5yU4zaag/
pwdHistory: 20180530094316Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}\(1\)tblcN7B
d$WUiE.5vNb5A8sTImEBbtZ.
pwdHistory: 20180530094347Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}\(1\)khuMHWG
v$29N0SMJg6.tJSNOXXGCOV.
pwdHistory: 20180530094418Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}\(1\)CTydGID
O$akbXWqVk2xXffBz50dSIA0
pwdHistory: 20180530094442Z#1.3.6.1.4.1.1466.115.121.1.40#41#{crypt}$1\(98Y14qO W\)helhYVnLFfSp68qEdo/j4.
pwdChangedTime: 20180530094442Z
entryCSN: 20180530094442.343733Z#000000#000#000000
modifiersName: uid=user3,ou=people,dc=gdy,dc=com
modifyTimestamp: 20180530094442Z
entryDN: uid=user3,ou=people,dc=gdy,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE
pwdHistory 最多隻記錄5次(已定義5次)
```
密碼複雜度
shell 在客戶端輸入密碼123456 [user1@test01 ~]$ passwd Changing password for user user1. Enter login(LDAP) password: New password: BAD PASSWORD: it is too simplistic/systematic
密碼鎖定pwdLockout
在客戶端的用戶user1上連續輸入錯誤密碼5次, 而後查看該用戶屬性。
當超過了指定次數後,會自動在隱藏屬性打上pwdAccountLockedTime
標誌。如上圖。
並經過pwdFailureTime
屬性記錄錯誤輸入時間及次數
解決方法:
```shell
[root@mldap01 slapd]# cat << EOF | ldapadd -x -D "cn=Manager,dc=gdy,dc=com" -W
dn: uid=user1,ou=people,dc=gdy,dc=com
changetype: modify
delete: pwdAccountLockedTime
EOF
Enter LDAP Password:
modifying entry "uid=user1,ou=people,dc=gdy,dc=com"
刪除該屬性便可
```
密碼過時解決方案pwdGraceAuthNLimit
等等屬性
```shell 1. 定義用戶密碼控制策略 [root@mldap01 ~]# cat << EOF | ldapadd -x -D "cn=Manager,dc=gdy,dc=com" -W > dn: uid=user3,ou=People,dc=gdy,dc=com > changetype: modify > replace: pwdReset > pwdReset: TRUE > EOF Enter LDAP Password: modifying entry "uid=user3,ou=People,dc=gdy,dc=com" 2. 查看定義用戶的策略信息, pwdReset屬於隱藏屬性,須要+查看 [root@mldap01 ~]# ldapsearch -x -LLL uid=user3 + dn: uid=user3,ou=People,dc=gdy,dc=com structuralObjectClass: account entryUUID: 92945c00-f29d-1037-9978-7f120cbb343e creatorsName: cn=Manager,dc=gdy,dc=com createTimestamp: 20180523062337Z pwdReset: TRUE entryCSN: 20180524081057.839314Z#000000#000#000000 modifiersName: cn=Manager,dc=gdy,dc=com modifyTimestamp: 20180524081057Z entryDN: uid=user3,ou=People,dc=gdy,dc=com subschemaSubentry: cn=Subschema hasSubordinates: FALSE 主要查看pwdReset: TRUE 3. 另外一種查看用戶策略信息 [root@mldap01 cn=config]# ldapwhoami -x -D uid=user3,ou=People,dc=gdy,dc=com -W -e ppolicy -v ldap_initialize( <DEFAULT> ) Enter LDAP Password: # 輸入user3用戶的密碼 ldap_bind: Success (0); Password must be changed (Password expires in 0 seconds) # 關鍵有這行 dn:uid=user3,ou=People,dc=gdy,dc=com Result: Success (0) ```
修改pam_ldap.conf配置文件
必須有以下配置 bind_policy soft pam_password md5 pam_lookup_policy yes pam_password clear_remove_old
重啓nslcd進程
shell [root@test01 ~]# /etc/init.d/nslcd restart
測試user5登陸系統
```shell
[root@test01 ~]# ssh user3@127.0.0.1
user3@127.0.0.1's password: # 輸入密碼
You are required to change your LDAP password immediately.
Creating directory '/home/user3'.
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user user3.
Enter login(LDAP) password: # 輸入密碼
New password: # 輸入新密碼
Retype new password: # 重複輸入新密碼
LDAP password information changed for user3
passwd: all authentication tokens updated successfully.
Connection to 127.0.0.1 closed.
[root@test01 ~]# ssh user3@127.0.0.1
user3@127.0.0.1's password:
Last login: Wed May 30 17:00:23 2018 from localhost
```
因爲在搭建時老是出現問題,致使走一步坑一步。特意總結一些排查問題的方法。
場景描述:在作密碼策略的時候,openldap客戶端老是ssh登陸不上,密碼命名正確,也要從新輸入,一直重試3遍後,到期失敗。看服務器日誌也看不出什麼。
排查方法:按照一層一層排查。
其次2:使用ldapwhoami看密碼是否正常。
ldapwhoami -x -D uid=user2,ou=People,dc=gdy,dc=com -W -e ppolicy -v -h 192.168.244.17
最後4:在網上找到一篇,在pam模塊中添加一條實例,重試,結果正常。
場景描述: 在作登陸後即修改密碼的實驗的時候, 老是報錯
passwd: Authentication token manipulation error
, 不論是第一次登陸就修改密碼, 仍是正常的執行passwd
修改, 都會報錯如上, openldap客戶端/var/log/secure
也報錯May 25 15:17:29 1 passwd: pam_unix(passwd:chauthtok): user "user4" does not exist in /etc/passwd
排查方法: 須要靜下心一層一層排查
其次2: 搜索引擎搜索相關報錯, 搜到須要添加access, 但是我已經添加。這次方式失敗, 參考連接以下:
https://www.cnblogs.com/lemon-le/p/d668fc96897e0aed2d3f5a2fa0ce0497.html https://stackoverflow.com/questions/26254767/ldap-users-not-able-to-change-their-password-using-passwd-command
密碼策略屬性
逐個添加, 邊添加邊更改密碼, 最後發現是屬性pwdSafeModify
有問題。最後五: 找到屬性pwdSafeModify
問題, 再來解決。發現當有屬性pwdSafeModify FALSE
時, 沒法登陸後立馬修改密碼, 而修改執行passwd
, 而當pwdSafeModify TRUE
時, 修改密碼報錯如上。而當屬性pwdSafeModify
不存在時, 功能正常。
最後官網找了下pwdSafeModify
的解釋。
該屬性控制用戶在密碼修改操做期間是否必須發送當前密碼。若是屬性值爲FALSE(缺省值),則用戶沒必要發送其當前密碼。若是屬性值爲TRUE,那麼修改密碼值時用戶必須發送當前密碼。
本人暫時也還沒理解透