集中用户管理-OpenLDAP
LDAP说明
什么是LDAP?
轻型目录访问协议(Lightweight Directory Access Protocol,LDAP):是一个开放的、中立的、业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息,它是由目录数据库和一套访问协议组成的系统,详情请查看维基百科LDAP。
为什么用LDAP?
LDAP是开放的Internet标准,市场上或者开源社区的绝大多数软件都支持LDAP协议。简单来说,LDAP协议最大的好处就是能统一管理用户密码,新人报道创建一个用户就能登录公司的所有平台(gitlab、jumpserver、监控等等),离职一键删除即可。
LDAP相关概念
- dn(Distinguished Name):区分名称,LDAP中每个条目都有自己的dn,dn是该条目在整棵树中的唯一标识,如同文件系统中,带路径的文件名就是DN。
- rdn(Relative dn):相对区别名称,好比linux中的相对路径。
- dc(Domain Component):域名组件。其格式是将完整的域名分成几部分,如将example.com变成dc=example,dc=com。
- uid(User ID):用户ID,如merle.chang。
- ou(Organization Unit):组织单元。
- cn(Common Name):公共名称。
- sn(surname):姓氏。
- c(Country):国家,如“CN”或者“US”。
- o(Organization):组织名,如中华人民共和国公安局。
部署OpenLDAP
创建数据目录
1 | mkdir -pv /data/openldap/{data,conf} |
配置docker-compose文件
1 | version: "3" |
LDAP_TLS_VERIFY_CLIENT: 客户端认证,never代表不需要认证
LDAP_ORGANISATTON: 组织名称
LDAP_DOMAIN: 域名
LDAP_APMIN_PASSWORD: 超级管理员密码-p 389:389 # LDAP端口
-p 636:636 # LDAP加密端口PHPLDAPADMIN_HTTPS: 关闭https认证
PHPLDAPADMIN_LDAP_HOSTS: 需要连接的ldap服务器地址
启动
1 | docker-compose up -d |
ldapadmin登录
1 | dn: |
常用操作命令
创建OU
创建顶级ou
1 | cat > add_ou.ldif << EOF |
创建自定义ou
1 | cat > add_custom_ou.ldif << EOF |
创建组
添加一个组, 在Jenkins的OU下
1 | cat > group_jenkins.ldif << EOF |
注意dn的顺序,否则报错
创建账户
添加用户小明, 位置在Users的OU下,并绑定到Jenkins的用户组Users中
1 | cat > xiaoming.ldif << EOF |
为用户设置密码
1 | ldappasswd -x -h 127.0.0.1 -p 389 -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" "cn=xiaoming,ou=Users,ou=People,dc=git,dc=com,dc=cn" |
搜索
1 | # 搜索全部 |
删除
删除用户小明
1 | ldapdelete -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" "cn=xiaoming,ou=Users,ou=People,dc=git,dc=com,dc=cn" |
删除Jenkins的users组
1 | ldapdelete -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=git,dc=com,dc=cn" -w "G1T@Ldap" "cn=users,ou=Jenkins,ou=Group,dc=git,dc=com,dc=cn" |
modify
添加用户小红
1 | cat > xiaohong.ldif << EOF |
dn要写在changetype上面
常用方法
- 添加ou
1 | dn: ou=Jira,ou=Group,dc=git,dc=com,dc=cn |
- 添加组
1 | dn: cn=jira-administrators,ou=Jira,ou=Groups,dc=git,dc=com,dc=cn |
- 修改属性
1 | dn: cn=xiaoming,ou=Users,dc=git,dc=com,dc=cn |
- 添加属性
1 | dn: cn=jira-software-users,ou=Jira,ou=Group,dc=git,dc=com,dc=cn |
- 添加用户到组
1 | dn: cn=jira-software-users,ou=Jira,ou=Group,dc=git,dc=com,dc=cn |
- modrdn
1 | cat > modrdn.ldif << EOF |
- 修改密码
1 | cat > changepwd.ldif << EOF |
LDAP用户权限配置
创建管理ou
创建顶级manager,在manager下创建admins(管理),readonly(只读),password_manager(密码管理)等ou
1 | cat > add_manager_ou.ldif << EOF |
配置权限
- 通过查看/etc/ldap/slapd.d/cn=config来确定olcDatabase配置文件, 比如我的是olcDatabase={1}mdb.ldif, 根据olcDatabase={1}mdb.ldif配置文件来确定dn位置, 我的是olcDatabase={1}mdb
- 根据olcDatabase={1}mdb.ldif配置文件, 重新编写访问控制
1 | cat > new-acl.ldif << EOF |
1
2
3
4 // 对密码属性访问控制
olcAccess: {1}to attrs=userPassword,shadowLastChange
// 对全局属性访问控制(密码除外)
olcAccess: {2}to *
验证
分别在几个管理ou下创建对应账户,然后访问ldap,验证权限,ldif配置文件示例
1 | cat > add_readOnly.ldif << EOF |
Jira集成OpenLDAP
OpenLDAP配置
在Users的ou下创建用户
1 | cat > jira-users.ldif << EOF |
在Groups下创建Jira的ou, 在Jira的ou下创建分组
1 | cat > jira-groups.ldif << EOF |
Jira用户目录配置
1 | 服务器设置 |
GitLab集成OpenLDAP
gitlab配置文件gitlab.rb示例
1 | gitlab_rails['ldap_enabled'] = true |
1 | gitlab-ctl check-config |