LDAP简介
LDAP(Lightweight Directory Access Protocol)轻量级目录访问协议,用于用户管理的统一认证服务。
解决的痛点:比如说公司有多个系统有不同套用户密码,但接入开源的openldap之后,就可以共享同一套认证密码。
LDAP原理
目录是一个搜索查询、树结构数据库,ldap是一套由目录加协议组成的认证系统。
目录树组成成分:
dn
– Distinguished Name 一条记录的具体位置,如dn:”uid=er.xiong,ou=OA,dc=xiongchumo,dc=com”表示熊出没公司OA组的熊二dc
– Domain component 域名部分,一条记录可包含多个dcou
– Organization Unit 组织单元,一条记录所属组织uid
– user id 用户idsn
– Surname 姓,如“许”cn
– Common Name,公共名称,一条记录的名称rdn
– 相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn= Thomas Johansson”
openldap安装使用
ldap只是一套协议,openldap是基于这套协议的实现。
安装机器:centos7
yum安装openldap
1 | yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-devel |
说明:
- openldap 它是openldap客户端和服务端的公共库
- compat-openldap openldap兼容性库
- openldap-clients 启动服务和设置
- openldap-servers 启动服务和设置
- openldap-devel 工具包,可选择安装
- openldap-servers-sql 支持sql模块,可选择安装
- migrationtools 通过migrationtools实现OpenLDAP用户及用户组的添加,导入系统账户,可进行选择性安装
相关目录
1 | /etc/openldap/slapd.d/ # 存放配置文件 |
服务管理命令
1 | service slapd start # 启动openldap服务 |
示例说明:添加管理员密码
生成管理员密码
1 | slappasswd -s 123456 # {SSHA}XoEOHoalUAXb7dNiirKs7yFl/1/N/QYF |
创建目录并添加修改管理员密码的ldif文件
1 | mkdir /opt/ldap-workspace |
说明:
- 第一行表将要变更配置的文件:/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
- 第二行表修改类型
- 第三行表要添加的配置项是olcRootPW
- 第四行是加配置项值
执行changepwd文件
1 | ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif |
结果
1 | cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif,新增了一个olcRootPW项 |
参考:https://www.cnblogs.com/swordfall/p/12119010.html
https://www.cnblogs.com/wilburxu/p/9174353.html
https://www.jianshu.com/p/7e4d99f6baaf
部署生产环境可用的openldap
1 | # 安装启动 |
slappasswd -s 123456 # 生成加密密码
chrootpwd.ldif # -H 指定ldap服务器地址;
1 |
|
说明:
chrootpwd.ldif文件内容:
1
2
3
4dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}mMZx/2fkVQDpjnQELwYlILXVW/ybXnMychdomain.ldif文件内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22dn: 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=emog,dc=com" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=emog,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=emog,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=emog,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=emog,dc=com" write by * readadd-org.ldif文件内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18dn: dc=emog,dc=com
dc: emog
objectClass: top
objectClass: domain
o: emog
dn: cn=admin,dc=emog,dc=com
objectClass: organizationalRole
cn: admin
description: LDAP admin
dn: ou=Group,dc=emog,dc=com
ou: Group
objectClass: organizationalUnit
dn: ou=People,dc=emog,dc=com
ou: People
objectClass: organizationalUnit
gitea接入openldap
前提:
gitea和openldap部署好了。
接入步骤
- 浏览器登入gitea,点击右侧的个人头像-管理后台-认证源-添加认证源
- 认证类型(LDAP (via BindDN))-认证名称(allsd11-openldap)-安全协议(Unencrypted)-主机(192.168.31.87)-端口(389)-用户搜索基准(ou=People,dc=emog,dc=com)-用户过滤规则((&(objectclass=top)(cn=%s)))-勾选 从Bind DN中拉去属性信息,该认证源已经启用。
说明:
- 因为没有用TLS证书,所以选Unencrypted
- 其他选项默认不动即可
jenkins接入openldap
- 登录jenkins-系统管理-全局安全配置-安全域(LDAP)
- 开始配置LDAP:Server(192.168.31.87:389)-roo DN(dc=emog,dc=com)-勾选Allow blank rootDN-User search base(ou=People)-User search filter(cn={0})-Group search base(ou=Jenkins,ou=Group)-点选Search for LDAP groups containing user-Manager DN(cn=admin,dc=emog,dc=com)-Manager Password
(123456)-保存
说明:
root DN
的设置是会后面的User search base
和Group search base
服务的,如User search base
设置成ou=People,认证的时候就会到ou=People,dc=emog,dc=com
下面查找用户。- 其他选项没有提及的就保持不动。
配置完成后,点击
保存
退出。点击全局安全配置
进入,可以点击Testing LDAP settings
测试。接着往下,看到授权策略
,点击Add user
添加用户,User name是你早早就设置在ou=People
下面的用户才行,如zhangsan
,最后勾选那些”Read”等权限。最好规划一个administer用户,因为系统认证方式的admin已经不能用了。登录:使用
zhangsan
用户就可以登录jenkins了。
参考:https://blog.csdn.net/GX_1_11_real/article/details/109511636
遇到问题
- 1.jenkins认证方式修改成ldap认证后,原来系统认证用户admin使用不了了,怎么办?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15编辑/var/lib/jenkins/config.xml文件
把:
<securityRealm class=...>
....
</securityRealm>
替换成系统用户认证:
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>false</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
最后,重启:systemctl restart jenkins
其他参考文章
https://zhuanlan.zhihu.com/p/32732045
https://blog.csdn.net/GX_1_11_real/article/details/108577999
原文链接: https://chenqiaorui.github.io/2023/05/22/第15期:LDAP/
版权声明: 转载请注明出处.