#作者:朱雷
接上篇:《LDAP從入門到實戰:環境部署與配置指南(上)》
鏈接: link
文章目錄
- 2.5.添加賬號
- 2.6.停止服務
- 2.7.使用TLS證書
- 2.7.1. TLS 證書
- 2.7.2. TLS 配置
- 2.7.3. 服務器配置
- 2.8.使用安全連接的反向代理
2.5.添加賬號
添加管理員賬號配置文件
[root@localhost openldap]# cat admin.ldif
dn: dc=zltest,dc=com
objectclass: dcObject
objectclass: organization
o: zl
dc: zltestdn: cn=admin,dc=zltest,dc=com
objectclass: organizationalRole
cn: admin
添加賬號
[root@localhost openldap]# ldapadd -x -D 'cn=admin,dc=zltest,dc=com' -W -f admin.ldif
Enter LDAP Password: # 輸入mdb數據庫配置的密碼
adding new entry "dc=zltest,dc=com"
adding new entry "cn=admin,dc=zltest,dc=com"
驗證添加
[root@localhost openldap]# ldapsearch -x -b 'dc=zltest,dc=com' '(objectclass=*)'
# extended LDIF
#
# LDAPv3
# base <dc=zltest,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
## zltest.com
dn: dc=zltest,dc=com
objectClass: dcObject
objectClass: organization
o: zl
dc: zltest# admin, zltest.com
dn: cn=admin,dc=zltest,dc=com
objectClass: organizationalRole
cn: admin# search result
search: 2
result: 0 Success# numResponses: 3
# numEntries: 2
創建具有組屬性的用戶文件
[root@localhost openldap]# cat user.ldif
dn: ou=oa,dc=zltest,dc=com
ou: oa
objectclass: organizationalUnitdn: cn=testuser,ou=oa,dc=zltest,dc=com
ou: oa
cn: testuser
sn: testuser
objectclass: inetOrgPerson
objectclass: organizationalPerson
添加用戶
[root@localhost openldap]# ldapadd -x -D 'cn=admin,dc=zltest,dc=com' -W -f user.ldif
Enter LDAP Password:
adding new entry "ou=oa,dc=zltest,dc=com"
adding new entry "cn=testuser,ou=oa,dc=zltest,dc=com"
驗證添加用戶
[root@localhost openldap]# ldapsearch -x -b 'dc=zltest,dc=com' '(objectclass=*)'
# extended LDIF
#
# LDAPv3
# base <dc=zltest,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
## zltest.com
dn: dc=zltest,dc=com
objectClass: dcObject
objectClass: organization
o: zl
dc: zltest
userPassword:: e1NIQX0rRG9XSGdBNFI0c2cyTjBCbGVOTTdqUmgyOGM9# admin, zltest.com
dn: cn=admin,dc=zltest,dc=com
objectClass: organizationalRole
cn: admin# oa, zltest.com
dn: ou=oa,dc=zltest,dc=com
ou: oa
objectClass: organizationalUnit# testuser, oa, zltest.com
dn: cn=testuser,ou=oa,dc=zltest,dc=com
ou: oa
cn: testuser
sn: testuser
objectClass: inetOrgPerson
objectClass: organizationalPerson# search result
search: 2
result: 0 Success# numResponses: 5
# numEntries: 4
修改用戶密碼
[root@localhost openldap]# ldappasswd -x -D 'cn=admin,dc=zltest,dc=com' -w 123456 -s 654321 'cn=testuser,ou=oa,dc=zltest,dc=com'
[root@localhost openldap]# ldapsearch -x -b 'cn=testuser,ou=oa,dc=zltest,dc=com' '(objectclass=*)'
# extended LDIF
#
# LDAPv3
# base <cn=testuser,ou=oa,dc=zltest,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
## testuser, oa, zltest.com
dn: cn=testuser,ou=oa,dc=zltest,dc=com
ou: oa
cn: testuser
sn: testuser
objectClass: inetOrgPerson
objectClass: organizationalPerson
userPassword:: e1NTSEF9eTZZVktFUmMraG0vcFZYTkVVbzBFcDJyZlQ0MWxUM1g=# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
給用戶添加屬性
[root@localhost openldap]# cat add_attr_testuser.ldif
dn: cn=testuser,ou=oa,dc=zltest,dc=com
changetype: modify
add: mail
mail: testuser@zltest.com
# 自己給自己添加屬性提示權限不足
[root@localhost openldap]# ldapmodify -x -W -D "cn=testuser,ou=oa,dc=zltest,dc=com" -f add_attr_testuser.ldif
Enter LDAP Password:
modifying entry "cn=testuser,ou=oa,dc=zltest,dc=com"
ldap_modify: Insufficient access (50)
# 需用管理員賬號添加
[root@localhost openldap]# ldapmodify -x -W -D "cn=admin,dc=zltest,dc=com" -f add_attr_testuser.ldif
Enter LDAP Password:
modifying entry "cn=testuser,ou=oa,dc=zltest,dc=com"
驗證添加用戶屬性結果
[root@localhost openldap]# ldapsearch -x -b 'cn=testuser,ou=oa,dc=zltest,dc=com' '(objectclass=*)'
# extended LDIF
#
# LDAPv3
# base <cn=testuser,ou=oa,dc=zltest,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
## testuser, oa, zltest.com
dn: cn=testuser,ou=oa,dc=zltest,dc=com
ou: oa
cn: testuser
sn: testuser
objectClass: inetOrgPerson
objectClass: organizationalPerson
userPassword:: e1NTSEF9eTZZVktFUmMraG0vcFZYTkVVbzBFcDJyZlQ0MWxUM1g=
mail: testuser@zltest.com# search result
search: 2
result: 0 Success# numResponses: 2
# numEntries: 1
給用戶刪除屬性
[root@localhost openldap]# cat delete_attr_testuser.ldif
dn: cn=testuser,ou=oa,dc=zltest,dc=com
changetype: modify
delete: mail
給用戶替換屬性
[root@localhost openldap]# cat replace_attr_testuser.ldif
dn: cn=testuser,ou=oa,dc=zltest,dc=com
changetype: modify
replace: mail
mail: testuser_new@zltest.com
重命名用戶條目
[root@localhost openldap]# cat replace_attr_testuser.ldif
dn: cn=testuser,ou=oa,dc=zltest,dc=com
changetype: modrdn
newrdn: oa=it
deleteoldrdn: 1
刪除用戶條目
[root@localhost openldap]# cat delete_testuser.ldif
dn: cn=testuser,ou=oa,dc=zltest,dc=com
changetype: delete
# 執行刪除命令
[root@localhost openldap]# ldapdelete -x -W -D "cn=admin,dc=zltest,dc=com" -f ./ delete_testuser.ldif
?
# 通過dn直接進行刪除
[root@localhost openldap]# ldapdelete -x -W -D "cn=admin,dc=zltest,dc=com" "cn=testuser,ou=oa,dc=zltest,dc=com"
2.6.停止服務
[root@localhost openldap]# kill -INT `cat /usr/local/var/run/slapd.pid`
[root@localhost openldap]# ps -ef|grep slapd
root 6603 5278 0 15:43 pts/1 00:00:00 grep --color=auto slapd
通過更激烈的方法殺死 slapd 可能會導致信息丟失或數據庫損壞
2.7.使用TLS證書
2.7.1. TLS 證書
OpenLDAP 客戶端和服務器能夠使用傳輸層安全性(TLS) 框架提供完整性和機密性保護。TLS 用途X.509證書用于承載客戶端和服務器身份。所有服務器都必須具有有效證書,而客戶端證書是可選的。
2.7.2. TLS 配置
獲取所需證書后,必須在客戶端和服務器上配置一些選項,以啟用 TLS 并使用證書。至少,必須為客戶端配置包含所有證書頒發機構(CA)證書。服務器必須配置加州證書以及它自己的服務器證書和私鑰。
通常,單個 CA 會頒發服務器證書和所有受信任的客戶端證書,因此服務器只需信任該簽名 CA。但是,客戶端可能希望連接到由不同組織管理的各種安全服務器,這些服務器的證書由許多不同的 CA 生成。因此,客戶端可能需要在其配置中包含許多不同的受信任 CA 的列表。
2.7.3. 服務器配置
# 簽署服務器證書的 CA 的證書
**TLSCACertificateFile** <CA文件名>
# 服務器證書
**TLSCertificateFile** <文件名>
# 服務器私鑰文件
**TLSCertificateKeyFile** <文件名>
# OpenSSL 的密碼規范,使用openssl ciphers -v ALL查看
TLSCipherSuite <密碼套件規范>
# 此指令指定在/dev/urandom不可用時從哪個文件獲取隨機數,如系統有則不需要此選項
TLSRandFile <文件名>
# 包含 Diffie-Hellman 臨時密鑰交換參數的文件,使用基于 DHE 的密碼套件所必需的
TLSDHParamFile <文件名>
# 指定用于橢圓曲線 Diffie-Hellman 臨時密鑰交換的曲線。這是在 OpenSSL 中使用基于 ECDHE 的密碼套件所必需的:openssl ecparam -list_curves
TLSEC 名稱 <名稱>
# 指定在傳入 TLS 會話中對客戶端證書執行哪些檢查:
# 默認情況下,此選項設置為never ,在這種情況下,服務器永遠不會向客戶端索要證書。# 如果設置為allow,服務器將要求提供客戶端證書;如果沒有提供,會話將正常進行。如# 果提供了證書但服務器無法驗證,則忽略該證書并且會話正常進行,就像沒有提供證書一# 樣。如果設置為try,則請求證書,如果沒有提供證書,會話將正常進行。如果提供了證
# 書但無法驗證,則會話立即終止。如設置為demand,則請求證書并且必須提供有效證書,# 否則會話立即終止。
TLSVerifyClient { 從不 | 允許 | 嘗試 | 要求 }
標**的指令是必須的其他為可選
2.8.使用安全連接的反向代理
使用nginx、haproxy等反向代理軟件代理ldap 的389端口,在代理軟件上配置SSL/TSL認證,代理請求到后端ldap服務,特別在多主、多從的環境下特別實用。
Nginx配置stream proxy server:
https://nginx.org/en/docs/stream/ngx_stream_ssl_module.html
worker_processes auto;
stream {upstream ldap_backend {server 192.168.1.129:389;server 192.168.1.130:389;
}...server {listen 0.0.0.0:636 ssl;server_name example.com;ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;ssl_certificate /usr/local/nginx/conf/cert.pem;ssl_certificate_key /usr/local/nginx/conf/cert.key;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;proxy_pass ldap_backend;...}
實際生產中推薦使用代理模式。