Jenkins上集成多个LDAP服务器认证

Jenkins上集成多个LDAP服务器认证,第1张

1. 安装LDAP插件

[ https://plugins.jenkins.io/ldap/]

2. 添加一个Jenkins LDAP配置

Server :这里填写LDAP server的地址即可

root DN : 这里填写你需要的base路径, 如果这里不填则勾选 Allow blank rootDN ,但是user search base和group search base则不能为空,否则会报找不到object的错误

User search base :可以不填,则会查找改root DN下的所有用户

User search filter :一般包含三种, uid={0}cn={0}sAMAccountName={0}, 如果不确定LDAP Server怎样设置的,则可以依次尝试

Group search base : 可以不填,则会查找改root DN下的所有组

Manager DN :认证查询该LDAP服务器的用户DN,包括该用户的完整CN, OU, DC

Manager Password : 上述用户的密码

其他可以保持默认配置

3. 添加另外一个LDAP Server 的配置

点击 Add Server , 可以按照上述配置继续配置,这两个可以是不同的配置

配置多个ldap时建议勾选上 Ignore if unavailable ,这样如果其中一个ldap server不可用,会尝试使用下一些个ldap server。

4. 配置过程中遇到的问题

4.1 错误日志:

User lookup: failed for user "your_username" LdapCallbacknullnested exception is javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: dc1.dc2.dc3:389 [Root exception is java.net.UnknownHostException: dc1.dc2.dc3]] LDAP Group lookup: could not verify.

其中your_username是你试图登陆的一个AD用户; dc1.dc2.dc3是你设置的DC=dc1, DC=dc2, DC=dc3,我这里出现了该问题是因为LDAP server我提供的是一个IP地址

原因:该问题是找不到 dc1.dc2.dc3该域名,请在AD上配置域名解析 your_LDAP_IP 到dc1.dc2.dc3或者临时在系统的/etc/hosts文件中添加该域名解析

4.2 错误日志:

LdapCallbackLDAP response read timed out, timeout used:60000ms.nested exception is javax.naming.NamingException: LDAP response read timed out, timeout used:60000ms.remaining name ''

这个问题是因为connection pool的连接有问题,解决方案是在Jenkins的LDAP配置中添加一个环境变量 com.sun.jndi.ldap.connect.pool 设为 false , 具体可参考:[ https://guv.cloud/post/jenkins-and-ldap/]

4.3 我使用的是docker 容器跑的Jenkins,有一些有用的命令

docker logs --following container_name/ID 查看日志

docker exec --user root -it container_name/ID /bin/bash 以root用户登陆该容器

4.4 如果登陆速度较慢,可以enable cache来减少查询LDAP server的负载

LDAP是基于TCP/IP协议目录访问协议,是Internet上目录服务的通用访问协议。LDAP的出现简化了X.500目录的复杂度,降低了开发成本,是X.500标准的目录访问协议DAP的子集,同时也作为IETF的一个正式标准。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。

从上述定义不难看出LDAP是一个目录,那么该目录是如何出现,有什么用呢?

在当今的信息世界,网络为人们提供了丰富的资源。随着网络资源的日益丰富,迫切需要一种能有效管理资源信息并利于检索查询的服务技术。目录服务技术随之产生。

1.LDAP目录服务可以有效地解决众多网络服务的用户账户问题。

2.LDAP目录服务规定了统一的身份信息数据库、身份认证机制和接口,实现了资源和信息的统一管理,保证了数据的一致性和完整性。

3.LDAP目录服务是以树状的层次结构来描述数据信息的,此种模型适应了众多行业应用的业务组织结构。

LDAP服务器也是用来处理查询和更新LDAP目录的。换句话来说LDAP目录也是一种类型的数据库,但是不是关系型数据库。不象被设计成每分钟需要处理成百上千条数据变化的数据库,例如:在电子商务中经常用到的在线交易处理(OLTP)系统,LDAP主要是优化数据读取的性能。

LDAP最大的优势是:可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易定制应用程序为它加上LDAP的支持。

检查测试ldap配置

如果从LDAP服务器中删除了用户,则该用户也会在GitLab中被阻止。用户将立即被阻止登录。但是,LDAP检查缓存时间为一小时(请参阅注释),这意味着已经登录或通过SSH使用Git的用户仍然可以访问GitLab最多一个小时。在GitLab管理区域中手动阻止用户以立即阻止所有访问。

在集成AD后,为了兼容前期Gitlab创建的用户账号,在创建AD用户账号时只需保证 sAMAccountName,email 属性与Gitlab用户的 Username、电子邮箱 的值一致即可(密码可以不同),使用这种方式创建的AD账户登录Gitlab时Gitlab不会创建新用户。

Nginx Proxy Manager 是一个基于MIT协议的开源项目,这个项目实现了通过web界面管理控制一些Nignx常用的功能,比如重定向、反向代理、404、甚至提供了免费的SSL,Nginx-proxy-ldap-manager在Nginx Proxy Manager的基础上添加了nginx-auth-ldap认证模块。

docker-compose

管理界面端口: 81

默认管理员密码:

使用AD认证时才配置Advanced,auth_ldap_servers值与nginx.conf文件中的ldap_server值对应

【1】 How to configure LDAP with GitLab CE

【2】 General LDAP Setup

【3】 nginx-auth-ldap

【4】 LDAP 认证

【5】 nginx-proxy-ldap-manager


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/280978.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-21
下一篇2023-04-21

发表评论

登录后才能评论

评论列表(0条)

    保存