LDAP(Lightweight Directory Access Protocol) 即轻量级目录访问协议,是一种基于 X.500 标准的应用层协议,用于访问和维护分布式目录信息服务。LDAP 目录以树形结构存储数据,常用于存储用户账号、组织结构、权限信息等,具有高效查询、集中管理的特点。
LDAP 认证模块是实现用户身份验证的核心组件,主要负责:
-
凭证验证:校验用户输入的用户名和密码是否与 LDAP 目录中存储的信息匹配
-
身份映射:将用户凭证映射到目录中的唯一标识(如 DN:Distinguished Name)
-
权限关联:根据认证结果获取用户对应的角色或权限信息
-
会话管理:生成并管理认证会话,支持单点登录(SSO)
-
用户认证请求用户通过应用程序提交用户名和密码,请求认证。
-
凭证预处理模块对密码进行加密(如 SHA-256、加盐哈希),防止明文传输。
-
-
根据用户名查找对应的 DN(如cn=user,ou=people,dc=example,dc=com)
-
使用 DN 和密码进行绑定(Bind)操作,验证凭证合法性
-
-
会话生成生成认证令牌(如 JWT)或会话 ID,用于后续请求的身份校验。
-
传输加密:通过 SSL/TLS(LDAPS 协议)确保凭证传输加密,避免中间人攻击
-
绑定策略:限制匿名绑定权限,配置强密码策略(长度、复杂度、过期周期)
-
访问控制:通过 LDAP 的 ACL(访问控制列表)限制敏感属性的查询权限
-
审计日志:记录认证失败、异常登录等事件,支持安全审计和溯源
-
企业统一身份认证集成 Active Directory(AD)或 OpenLDAP,实现多系统单点登录(如 OA、邮件系统)。
-
云计算平台权限管理在 IaaS/PaaS 平台中,通过 LDAP 认证模块对接用户目录,控制资源访问权限。
-
-
开源 CMS(如 WordPress)通过 LDAP 插件对接企业用户目录
-
容器编排工具(如 Kubernetes)通过 LDAP 认证管理集群访问
1.SSH通过 PAM (Pluggable Authentication Modules) 调用LDAP认证模块完成身份验证,要使用以下组件协同工作:
👍
yum install -y openldap-clients nss-pam-ldapd authconfig
apt-get install -y ldap-utils libnss-ldapd libpam-ldapd
3.基础配置文件生成(RHEL/CentOS特供)
🚅
--ldapserver="ldaps://ldap.example.com"
--ldapbasedn="dc=example,dc=com"
执行后自动生成/etc/openldap/ldap.conf 和PAM配置文件。
4.手动配置 /etc/nslcd.conf (关键)
🚅
uri ldaps://ldap.example.com
binddn cn=sshd-auth,ou=users,dc=example,dc=com
tls_cacert /etc/openldap/certs/cacert.pem
filter passwd (&(objectClass=posixAccount)(uidNumber=*)(gidNumber=*))
map passwd homeDirectory "/home/$uid"
5.配置NSS (Name Service Switch)
🥇
auth sufficient pam_ldap.so
account sufficient pam_ldap.so
session optional pam_ldap.so
🏕️
PasswordAuthentication yes # 初次测试可启用密码登录
ChallengeResponseAuthentication no
🏝️
mkdir -p /etc/openldap/certs
scp ldap.example.com:/etc/ssl/certs/cacert.pem /etc/openldap/certs/
chmod 644 /etc/openldap/certs/cacert.pem
🎨
getent passwd ldap_username # 应返回LDAP用户记录
id ldap_username # 检查UID/GID映射
🦄
ssh ldap_username@your_server
🏝️
用户LDAP条目中添加sshPublicKey属性
sshPublicKey: ssh-rsa AAAAB3NzaC... user@host
🥇
AuthorizedKeysCommand /usr/bin/ldapsearch -x -h ldap.example.com -b 'dc=example,dc=com' '(&(uid=%u)(objectClass=posixAccount))' sshPublicKey | grep 'sshPublicKey::' | sed 's/sshPublicKey:: //' | base64 -d
AuthorizedKeysCommandUser nobody
🦄
tail -f /var/log/secure # RHEL/CentOS
tail -f /var/log/auth.log # Ubuntu
⚽
ldapwhoami -x -H ldaps://ldap.example.com -D "uid=testuser,ou=people,dc=example,dc=com" -w password
pamtester sshd ldap_username authenticate
-
禁用明文通信:强制使用ldaps://且tls_reqcert demand
-
-
防火墙规则:仅允许LDAP服务器IP连接tcp/636
-
-
原文始发于微信公众号(运维星火燎原):SSH对接LDAP认证系统方法
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
http://cn-sec.com/archives/4206237.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论