基于LDAP的内网统一认证

对于任何公司而言,一套“内部通用”的统一认证系统是必不可少的。

请注意两个关键字:内部、通用。

  • 内部:认证系统只在公司内部关联的系统使用,并且需要关联具体的员工信息,如:工号、用户名、邮箱等。

  • 通用:这套系统不是只提供验证,还要和其他系统共享认证,例如:项目管理系统、版本控制系统、发布系统等等。

在本书中,我们选取LDAP(Lightweight Directory Access Protocol)做为统一认证工具。

LDAP是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。

由于LDAP出现的年代比较久远(1993),也并非专门为公司认证设计的,因此其易用性较差。我们选用LDAP Account Manager做为辅助管理工具。

部署open-ldap服务

我们选用开源的open-ldap做为服务端,进行部署:

  1. #!/bin/bash
  2. NAME="openldap"
  3. PUID="1000"
  4. PGID="1000"
  5. VOLUME="$HOME/docker_data/openldap/"
  6. mkdir -p $VOLUME
  7. docker ps -q -a --filter "name=$NAME" | xargs -I {} docker rm -f {}
  8. docker run \
  9. --hostname $NAME \
  10. --name $NAME \
  11. --volume "$VOLUME:/data/openldap/" \
  12. -e PUID=$PUID \
  13. -e PGID=$PGID \
  14. -e LDAP_TLS=false \
  15. -e LDAP_DOMAIN=coder4.com \
  16. -e LDAP_ADMIN_PASSWORD=admin123 \
  17. -e LDAP_CONFIG_PASSWORD=config123 \
  18. -e LDAP_READONLY_USER=true \
  19. -e LDAP_READONLY_USER_USERNAME=readonly \
  20. -e LDAP_READONLY_USER_PASSWORD=readonly123 \
  21. -p 389:389 \
  22. -p 636:636 \
  23. --detach \
  24. --restart always \
  25. osixia/openldap:1.5.0

如上所示:

  • 关闭了TLS加密,在生产环境中,建议配置证书并打开它

  • 域名:coder4.com,可以根据需要自行更改,会影响用户的后缀

  • 管理员密码:admin123,请根据需要自行更改

  • 配置用户密码:config123,请根据需要自行更改

  • 只读用户:readonly/readlony123,可自行更改

启动成功后,我们校验下初始化的几个用户:

首先是admin,你会发现用户是通过逗号分割、分组的,你要适用ldap的这种表示方法。

  1. ldapwhoami -h 127.0.0.1 -p 389 -D "cn=admin,dc=coder4,dc=com" -w admin123
  2. dn:cn=admin,dc=coder4,dc=com

接下来是readonly

  1. ldapwhoami -h 127.0.0.1 -p 389 -D "cn=readonly,dc=coder4,dc=com" -w readonly123
  2. dn:cn=readonly,dc=coder4,dc=com

最后,我们添加两个组织结构,研发部rd和人力资源部hr:

  1. version: 1
  2. # rd org
  3. dn: ou=rd,dc=coder4,dc=com
  4. objectClass: top
  5. objectClass: organizationalUnit
  6. ou: rd
  7. # hr org
  8. dn: ou=hr,dc=coder4,dc=com
  9. objectClass: top
  10. objectClass: organizationalUnit
  11. ou: hr

执行添加动作:

  1. ldapadd -c -h 127.0.0.1 -p 389 -w admin123 -D "cn=admin,dc=coder4,dc=com" -f ./org.ldif

启用Ldap Account Manager

我们通过Docker运行LAM,如下:

  1. #!/bin/bash
  2. NAME="lam"
  3. PUID="1000"
  4. PGID="1000"
  5. docker ps -q -a --filter "name=$NAME" | xargs -I {} docker rm -f {}
  6. docker run \
  7. --hostname $NAME \
  8. --name $NAME \
  9. -e PUID=$PUID \
  10. -e PGID=$PGID \
  11. -e LDAP_DOMAIN=coder4.com \
  12. -e LDAP_SERVER=ldap://10.1.172.136:389 \
  13. -e LDAP_USER=cn=admin,dc=coder4,dc=com \
  14. -e LAM_PASSWORD=lam123 \
  15. -p 8080:80 \
  16. --detach \
  17. --restart always \
  18. ldapaccountmanager/lam:7.7

解释下上述配置:

  • 域名:与前面openldap服务的配置相关联

  • ldap服务器:前面ldap服务的地址

  • user:管理员用户名,不用输入密码

  • LAM密码:是部分管理功能所需要的密码,请根据需要自行修改

启动成功后,我们访问http://127.0.0.1:8080,出现如下登录界面:

f

输入前面admin的密码,即可完成登录。

进入后,可以发现氛围User / Group两个主要的Tab。

  • User:用户的增删改

  • Group:用户组的增删改

我们首先修改下User功能默认的配置。打开右上角Tools -> Profile Editor -> User,这里设置为:

  • LDAP suffix:rd > coder4 > com

  • Automatically add this extension: false

接着,我们需要添加一个Posix组,Groups -> New Group -> Unix Group

  • Suffix:coder4 > com

  • Group name:user

最后,我们尝试添加一个用户,Users -> New User,在如下界面中填写:

f

  • Last name: zhangsan

  • Suffix:rd > coder4 > com

  • RDN identifier:cn

  • Password:123456

  • Unix Primary Group:user

点击Save保存后,我们验证一下:

  1. ldapwhoami -h 127.0.0.1 -p 389 -D "cn=zhangsan,ou=rd,dc=coder4,dc=com" -w 123456
  2. dn:cn=zhangsan,ou=rd,dc=coder4,dc=com

成功!

如果你想看组织的全貌,可以进入:Tools -> TreeView:

f

至此,我们已经成功搭建了基于ldap的内网统一验证。然而,本节只是一个起点,在后续搭建的系统中,我们都会接入ldap认证系统。