当前位置: 首页 > article >正文

LDAP从入门到实战:环境部署与配置指南(下)

#作者:朱雷
接上篇:《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: zltest

dn: 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: organizationalUnit

dn: 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;
        ...
    }

实际生产中推荐使用代理模式。


http://www.kler.cn/a/595317.html

相关文章:

  • 希尔排序中的Hibbard序列
  • 如何在MCU工程中启用HardFault硬错误中断
  • FPGA中串行执行方式之状态机
  • 蓝桥杯 之 数论
  • Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例)
  • Windows10配置OpenJDK11
  • 基于深度学习的目标追踪技术全解析
  • 验证码背后:前端安全问题的深度剖析
  • 前端网络请求
  • 【强化学习】Reward Model(奖励模型)详细介绍
  • 智能工厂能耗分析:Python驱动的高效能源管理
  • 「0基础学爬虫」爬虫基础之抓包工具的使用
  • SQLite 查询数据库属性
  • AI视频是否会影响原创价值
  • 人工智能:企业RAG方案
  • 浅谈跨平台框架的演变(H5混合开发->RN->Flutter)
  • 【C++11】左值引用、右值引用、移动语义和完美转发
  • 编程语言选择分析:C#、Rust、Go 与 TypeScript 编译器优化
  • 【华为Pura先锋盛典】华为Pura X“阔折叠”手机发布:首次全面搭载HarmonyOS 5
  • 城市更新浪潮下的破局之道:中建海龙模块化集成建筑技术的新应用