1 使用场景 {#1-%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF}
随着企业内部各种开源平台越来越多,例如:gitlab、DataEase、JumpServer、MeterSphere等,账号维护变成一件繁琐的事情,这时需要一个统一账号维护的平台,每人只需一个账号,在公司内部平台通用。而大多数开源平台都支持 LDAP,因此只要搭建好 LDAP 服务,将企业内部这些平台都对接到 LDAP,即可实现统一账号管理;
下面我们就来部署 Openldap 对接到 DataEase,实现用户统一账号登录DataEase。
2 安装部署 {#2-%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2}
该部署方案使用 Docker 安装,如果你的服务器没有安装 Docker,先安装 Docker。
#安装 Docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://j6o4qczl.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
#部署 Openldap
docker run \
-p 389:389 \
-p 636:636 \
--name de-ldap \
--network bridge \
--hostname deldap.com \
--env LDAP_ORGANISATION="deldap" \
--env LDAP_DOMAIN="deldap.com" \
--env LDAP_ADMIN_PASSWORD="123456" \
--volume /opt/ldap/certificates:/container/service/slapd/assets/certs \
--env LDAP_TLS_CRT_FILENAME=ldap.crt \
--env LDAP_TLS_KEY_FILENAME=ldap.key \
--env LDAP_TLS_CA_CRT_FILENAME=ca.crt \
--detach osixia/openldap
注释如下:
-p 389:389 TCP/IP访问端口
-p 636:636 SSL连接端口
--name de-ldap 容器名称为 de-ldap
--network bridge 连接默认的bridge网络
--hostname ++deldap.com++ 设置容器主机名称为 ++deldap.com++
--env LDAP_ORGANISATION="deldap" 配置LDAP组织名称
--env LDAP_DOMAIN="++deldap.com++" 配置LDAP域名
--env LDAP_ADMIN_PASSWORD="123456" 配置LDAP密码
#部署 phpLDAPadmin
docker run \
-d \
--privileged \
-p 8989:80 \
--name myldapadmin \
--env PHPLDAPADMIN_HTTPS=false \
--env PHPLDAPADMIN_LDAP_HOSTS=192.168.1.7 \
--detach osixia/phpldapadmin
注释如下:
-d 分离模式启动容器
--privileged 特权模式启动(使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。)
--env PHPLDAPADMIN_HTTPS=false 禁用HTTPS
--env PHPLDAPADMIN_LDAP_HOSTS =192.168.1.7 配置openLDAP的IP或者域名,我安装ldap机器IP就是192.168.1.7。
3 在 LDAP 中创建用户 {#3-%E5%9C%A8-ldap-%E4%B8%AD%E5%88%9B%E5%BB%BA%E7%94%A8%E6%88%B7}
3.1 访问 phpldapadmin {#3.1-%E8%AE%BF%E9%97%AE-phpldapadmin}
浏览器输入 phpldapadmin 的服务器 IP+端口
点击页面上的 "login",登录;
Login DN:CN=admin,DC=deldap,DC=com
Password: 123456
3.2 创建ou及导入用户信息 {#3.2-%E5%88%9B%E5%BB%BAou%E5%8F%8A%E5%AF%BC%E5%85%A5%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF}
3.2.1 创建 ou {#3.2.1-%E5%88%9B%E5%BB%BA-ou}
按图操作,点击 dc,然后点击 "Create a child entry";
选择 "Generic: Organisational Unit";
输入一个 ou 名,ou 代表组织单位,可以理解为分组,我创建的 north、east,分别代表华东和华北大区的两个分组;
3.2.2 创建用户 {#3.2.2-%E5%88%9B%E5%BB%BA%E7%94%A8%E6%88%B7}
dn: uid=xiaomei,ou=north,dc=deldap,dc=com
ou: north
uid: xiaomei
sn: 小美
cn: xiaomei
givenName: xiaomei
displayName: xiaomei
mail: xiaomei@esgyn.local
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
userpassword: 123456
以上信息包含用户信息:
uid:xiaomei
显示名字:小美
所属 ou:north
mail:xiaomei@esgyn.local
密码:123456
复制以上信息,在 phpldapadmin 界面,点击 "import",粘贴;
最后,点击 "Proceed",完成导入;
可以使用以上方法创建多个 ou 和用户,如下图:
4 在 DataEase 中配置 LDAP {#4-%E5%9C%A8-dataease-%E4%B8%AD%E9%85%8D%E7%BD%AE-ldap}
DataEase V1 版本参考以下步骤进行配置,DataEase V2 版本配置 LDAP 请参考官方文档:认证设置。
使用 admin 用户登录DataEase,系统管理 --> 系统配置 --> 认证设置 --> LDAP 设置
点击 "编辑",填写 LDAP 相关配置信息;
LDAP 地址 (部署 LDAP 服务的地址)
ldap://192.168.1.7:389
绑定 DN (填写 admin 的 DN)
cn=admin,dc=deldap,dc=com
用户 OU (多个 ou 可以用 \| 分割,以下配置是 north 和 east 两个组织)
ou=north,dc=deldap,dc=com\|ou=east,dc=deldap,dc=com
用户过滤器 (获取用户信息到 DataEase,以下是获取 用户 和 邮箱信息)
(\|(uid={0})(mail={0}))
`LDAP 属性映射 (DataEase 用户字段对应 LDAP 用户字段)
{"userName":"cn","nickName":"sn","email":"mail"}`
配置完成后点击 "测试连接" 并 "保存";
5 登录验证 {#5-%E7%99%BB%E5%BD%95%E9%AA%8C%E8%AF%81}
打开 DataEase 登录页面,选择 "LDAP" ,输入 LDAP 中的用户及密码,点击登录
注解:
用户过滤器 "(|(cn={0})(mail={0}))" 用于LDAP搜索操作,指定搜索条件。
在这个表达式中:
"(|...)" 是LDAP过滤器语法中的或运算符,表示以下两个条件之一成立即可。
"(cn={0})" 指定了"uid"属性必须等于替代"{0}"的实际值。
"(mail={0})" 指定了"mail"属性必须等于替代"{0}"的相同值。
如需修改用户过滤器中的配置,需使用 "LDAP 属性映射字段" 作为 "用户过滤器" 判断条件。
LDAP 配置及 DataEase对接的操作, 至此介绍完毕。
6 名词解释 {#6-%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A}
DN:Distinguished Name
类似于DNS,DN与DNS的区别是:组成DN的每个值都有一个属性类型,例如:
++deldap.com++是一个dns,那么用dn表示为:dc=deldap,dc=com 级别越高越靠后。
登录名 cn=admin,dc=deldap,dc=com 就是一条 DN。
CN:common name 通用名
对象的属性为CN,例如一个用户的名字为:张三,那么"张三"就是一个CN。
OU : OrganizationUnit 组织单位
o和ou都是ldap目录结构的一个属性,建立目录的时候可选新建o,ou 等。在配置我司交换设备ldap的时候具体是配置ou,o还是cn等,要具体看ldap服务器的相应目录是什么属性。
o:organizationName 组织名
uid: userid
对象的属性为uid,例如我司一个员工的名字为:zsq,他的UID为:z02691,ldap查询的时候可以根据cn,也可以根据uid。配置ldap查询的时候需要考虑用何种查询方式。
DC:Domain Component
DC类似于dns中的每个元素,例如++deldap.com++,"."符号分开的两个单词可以看成两个DC。