OpenLdap 部署


環境介紹:

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 修改以下的兩個地方
image
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相關的信息拿出來放到一個文件,如下:
image
執行導入命令:

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
主要修改下面兩項
image
4.4 system-auth
vim /etc/pam.d/system-auth 修改,把sss行的注釋掉,改成ldap的
image
同時添加一行:

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
image
注:把上述圖片里面的划線的第一行改成下面這樣,否則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登錄系統

image

測試

image

七、密碼強度配置

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM