環境介紹:
OS: centos7.x
slapd: 2.4.44
防火牆和selinux都已經關閉
所有的操作均在root用戶下執行。
一、服務端搭建
1.1 安裝軟件包
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-devel migrationtools
安裝完成以后,主要關注以下的目錄:
/etc/openldap/slapd.d/* // 具體的數據配置信息
/etc/openldap/schema/* // 官方寫好的一些配置信息
/var/lib/ldap/* //OpenLDAP的數據文件
/usr/share/openldap-servers/DB_CONFIG.example //模板數據庫配置文件
1.2 啟動服務
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
systemctl start slapd
systemctl enable slapd
OpenLDAP監聽的端口:
默認監聽端口:389(明文數據傳輸)
加密監聽端口:636(密文數據傳輸)
1.3 配置
1.3.1 設置管理員密碼
[root@hadoop4 ~]# slappasswd -s "123456"
{SSHA}UhjtP0mnNz6g2WS9ZgNj1V051DIwydvT
注意:上述生成的這個加密的密碼是需要用到的。
創建修改密碼的文件
cat chrootpw.ldif
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}UhjtP0mnNz6g2WS9ZgNj1V051DIwydvT
說明:上述這塊的意思是修改數據庫olcDatabase={0}config,添加olcRootPW字段。在ldap里面,組織關系是樹形結構。所以叫輕量級目錄服務。
在centos6上面配置的時候,主要是使用slapd.conf文件來生成對應的信息。但是在centos7上面,建議是使用編寫以ldif后綴的文件來定義。
執行如下命令,配置管理員密碼
ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
1.3.2 導入基本Schema模式
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
1.3.3 配置訪問權限和設置基本的域名
cat chdomain.ldif
# replace to your own domain name for "dc=***,dc=***" section
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
read by dn.base="cn=admin,dc=example,dc=com" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=example,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}UhjtP0mnNz6g2WS9ZgNj1V051DIwydvT
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=example,dc=com" write by * read
執行如下命令進行創建
ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
1.3.4 配置基本域
cat basedomain.ldif
# replace to your own domain name for "dc=***,dc=***" section
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: Server com
dc: example
dn: cn=admin,dc=example,dc=com
objectClass: organizationalRole
cn: admin
description: Directory Manager
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group
執行命令
ldapadd -x -D cn=admin,dc=example,dc=com -W -f basedomain.ldif
1.3.5 添加用戶
cat user.ldif
# replace to your own domain name for "dc=***,dc=***" section
dn: uid=yjt,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: yjt
sn: Linux
userPassword:123456
loginShell: /bin/bash
uidNumber: 1100
gidNumber: 1100
homeDirectory: /home/yjt
dn: cn=yjt,ou=Group,dc=example,dc=com
objectClass: posixGroup
cn: yjt
gidNumber: 1100
memberUid: yjt
執行命令:
ldapadd -x -D "cn=admin,dc=example,dc=com" -w123456 -f user.ldif
查詢用戶,以下幾種方式均可
ldapsearch -x -LLL uid=yjt +
ldapsearch -x -b "uid=yjt,ou=People,dc=example,dc=com"
ldapsearch -x -b "dc=example,dc=com"|grep yjt
二、配置日志信息
1、在 vim /etc/rsyslog.conf加上
local4.* /var/log/ldap.log
2、重啟rsyslog
/etc/init.d/rsyslog restart
3、重啟slapd服務
/etc/init.d/slapd restart
4、查看日志信息
cat /var/log/slapd/slapd.log
三 、OpenLDAP與migrationtools實現導入系統賬號的相關信息
1、安裝migrationtools
這個已經安裝過
2、修改migrationtools的配置文件
vim /usr/share/migrationtools/migrate_common.ph 修改以下的兩個地方
3、生成數據文件
生成基礎的數據文件,可以自己修改這個生成的base.ldif文件,把不需要的去掉。
執行命令
/usr/share/migrationtools/migrate_base.pl > base.ldif
這一步主要就是創建一些ou,也就是組
執行命令
ldapadd -c -x -D "cn=admin,dc=example,dc=com" -W -f base.ldif
記得加-c,表示遇到錯誤繼續執行
4、把系統的用戶生成ldif文件
[root@hadoop4 openldap]# /usr/share/migrationtools/migrate_passwd.pl /etc/passwd passwd.ldif
[root@hadoop4 openldap]# /usr/share/migrationtools/migrate_group.pl /etc/group groupwd.ldif
把uid小於1000的最好都去掉。
這里用於演示,把passwd.ldif和groupwd.ldif里面的hduser相關的信息拿出來放到一個文件,如下:
執行導入命令:
ldapadd -c -x -D "cn=admin,dc=example,dc=com" -W -f passwd.ldif
查詢:
ldapsearch -x -LLL uid=hduser +
四、OpenLDAP客戶端的配置
4.1 關閉ssd服務
systemctl status sssd
4.2 安裝nslcd服務
yum install nss-pam-ldapd
4.3 修改nslcd配置
vim /etc/nslcd.conf
主要修改下面兩項
4.4 system-auth
vim /etc/pam.d/system-auth 修改,把sss行的注釋掉,改成ldap的
同時添加一行:
session optional pam_mkhomedir.so skel=/etc/skel/ umask=0022
這個是解決登錄用戶的時候不能創建家目錄問題
4.5 修改 nsswitch.conf
vim /etc/nsswitch.conf 修改nsswitch.conf配置文件,修改后,默認登錄的用戶通過本地配置文件進行查找並匹配。當匹配不到用戶信息時,會通過后端配置的LDAP認證服務進行匹配
4.6 修改authconfig
vim /etc/sysconfig/authconfig 確保標記的已打開為yes
USESHADOW=yes 啟用密碼驗證
USELDAPAUTH=yes 啟用OpenLDAP驗證
USELOCAUTHORIZE=yes 啟用本地驗證
USELDAP=yes 啟用LDAP認證協議
4.7 重啟nslcd服務
/etc/init.d/nslcd restart
如果Linux操作系統要與ldap連接,也可以使用setup來配置
五、與ssh集成
5.1 修改sshd_config
vim /etc/ssh/sshd_config
UsePAM yes // 開啟
5.2 修改sshd
vim /etc/pam.d/sshd 用於第一次登陸的賬戶自動創建家目錄
在最后添加:
session required pam_mkhomedir.so
5.3 password-auth
vim /etc/pam.d/password-auth
注:把上述圖片里面的划線的第一行改成下面這樣,否則ssh連接的時候,輸入密碼總是失敗
auth sufficient pam_ldap.so forward_pass
重啟sshd
六、限制用戶登錄
6.1 修改/etc/pam.d/sshd
添加上pam_access.so模塊
account required pam_access.so
6.2 修改/etc/security/access.conf
測試限制hduser用戶ssh登錄系統
測試
七、密碼強度配置
7.1 加載ppolicy模塊
檢查模塊是否存在:
slapcat -n 0 | grep olcModuleLoad
如果上面命令沒有任何輸出,使用ldapadd加載模塊
7.2 創建模塊ldif文件
cat add_ppolicy_module.ldif
dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModulePath: /usr/lib64/openldap
olcModuleLoad: ppolicy.la
執行命令
ldapadd -Y EXTERNAL -Q -H ldapi:/// -f add_ppolicy_module.ldif
執行完在用上面的命令驗證是否加載進來
slapcat -n 0 | grep olcModuleLoad
輸出:olcModuleLoad: {0}ppolicy.la
說明加載成功
加載ppolicy模塊的方法二
加載 PPolicy 模塊
定義 olcModuleList 對象:
cat << EOF | ldapadd -Y EXTERNAL -H ldapi:///
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModuleLoad: ppolicy.la
EOF
添加olcModulePath
cat << EOF | ldapadd -Y EXTERNAL -H ldapi:///
dn: cn=module{0},cn=config
changetype: modify
add: olcModulePath
olcModulePath: /usr/lib64/openldap/
EOF
7.3 導入ppolicy的schema
1、查看ppolicy的schema是否添加
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn | grep ppolicy
如果沒有添加進行添加
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/ppolicy.ldif
7.4 修改olcAccess規則
cat << EOF | ldapmodify -c -Y EXTERNAL -Q -H ldapi:///
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by dn="cn=root,dc=example,dc=com" write by anonymous auth by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=root,dc=example,dc=com" write by * read
EOF
7.5 添加默認密碼策略
cat << EOF | ldapadd -Y EXTERNAL -H ldapi:///
dn: olcOverlay=ppolicy,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=admin,ou=pwpolicies,dc=example,dc=com
olcPPolicyHashCleartext: TRUE
olcPPolicyUseLockout: TRUE
EOF
查看
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={2}hdb,cn=config
7.6 添加pwpolicies條目
cat << EOF | ldapadd -x -D "cn=root,dc=example,dc=com" -w123456
dn: ou=pwpolicies,dc=example,dc=com
objectClass: organizationalUnit
ou: pwpolicies
EOF
7.7 添加默認密碼策略
添加默認密碼策略:(pwdLockoutDuration:密碼連續輸入錯誤次數后,賬號鎖定時間 pwdMaxFailure:密碼最大失效次數,超過后賬號被鎖定)
cat << EOF | ldapadd -x -D cn=admin,dc=example,dc=com -w123456
dn: cn=admin,ou=pwpolicies,dc=example,dc=com
objectClass: pwdPolicy
objectClass: person
cn: admin
pwdMaxAge: 2592000
pwdAttribute: userPassword
pwdExpireWarning: 3600
#pwdInHistory: 0
#pwdCheckQuality: 0
pwdMaxFailure: 5
pwdLockout: TRUE
#pwdLockoutDuration: 0
#pwdGraceAuthNLimit: 0
#pwdFailureCountInterval: 0
pwdMustChange: TRUE
pwdMinLength: 6
#pwdAllowUserChange: TRUE
pwdSafeModify: FALSE
pwdCheckQuality: 2
sn: dummy value
7.8 添加pqchecker密碼檢查模塊
具有ppolicy覆蓋的OpenLDAP目錄服務器允許管理功能強大的密碼策略。除密碼內容質量外,策略覆蓋還直接支持此策略的所有方面。密碼內容強度管理留給外部插件,該插件必須是本機共享庫。pqChecker組件提供了此功能。它允許檢查密碼的內容,即:
必需的大寫字符數。
必需的小寫字符數。
所需的特殊字符數(非字母字符)。
所需的位數(0-9)。
禁止使用的字符。
用官網給出的方法安裝pqchecker
rpm -iv http://www.meddeb.net/pub/pqchecker/rhel/7/pqchecker-2.0.0-1.el7.x86_64.rpm
# 找到二進制包安裝的位置后續會用到
ls /usr/lib64/openldap/pqchecker.so*
# /usr/lib64/openldap/pqchecker.so.2.0.0
配置
add_pqchecker.ldif
dn: cn=admin,ou=pwpolicies,dc=example,dc=com
changetype: modify
add: objectClass
objectclass: pwdPolicyChecker
-
add: pwdcheckmodule
pwdCheckModule: pqchecker.so.2.0.0
通過命令將上面的設置,生效
ldapmodify -a -D "cn=admin,dc=example,dc=com" -w 123456 -f add_pqchecker.ldif
7.8 查看用戶的密碼策略
ldapsearch -x -b 'ou=pwpolicies,dc=asiainfo,dc=com'
八、主從
借鑒:
https://www.cnblogs.com/lemon-le/p/6266921.html
https://www.tqwba.com/x_d/jishu/396459.html
https://blog.csdn.net/u011607971/article/details/86378361
https://blog.csdn.net/weixin_33758863/article/details/93631997
http://www.zytrax.com/books/ldap/ch6/ppolicy.html#pwdpolicyattributes
https://blog.csdn.net/liumiaocn/article/details/83991112