LDAP打通Gitlab认证
前言: 文章中适用读者了解或者掌握 docker、Ldap、phpLdapAdmin、Gitlab
介绍
LDAP是啥:LDAP一般指轻型目录访问协议。轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛldæp/)。
Gitlab是啥:GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。
要做成啥: 用户都存储在LDAP上,gitlab通过使用ldap方式登陆。解决了不同系统,各自独立用户的问题,方便了用户统一在LDAP上进行管理
搭建
操作系统无需多言,只要有docker、docker-compose环境,即可部署。
一台linux机器,部署服务
一个笔记本,访问浏览器界面
LDAP搭建
对LDAP进行部署
root@demo0323:~# mkdir ldap/
root@demo0323:~/ldap# vim docker-compose.yaml
version: '2'
services:
ldapui:
image: osixia/phpldapadmin
environment:
PHPLDAPADMIN_LDAP_HOSTS: ldap-host
stdin_open: true
tty: true
links:
- ldap:ldap-host
ports:
- 7443:443/tcp
ldap:
image: osixia/openldap
environment:
LDAP_ADMIN_PASSWORD: admin
LDAP_DOMAIN: softc.com
LDAP_ORGANISATION: Rancher
LDAP_TLS: 'false'
LDAP_READONLY_USER: 'true'
LDAP_READONLY_USER_USERNAME: rancher
LDAP_READONLY_USER_PASSWORD: rancher
stdin_open: true
tty: true
ports:
- 389:389/tcp
- 636:636/tcp
root@demo0323:~/ldap# docker-compose up -d
等待几分钟,拉取镜像创建容器后,就可以使用浏览器访问了
可通过如下信息,访问LDAP可视化管理页面
访问地址: https://192.168.120.217:7443/
访问账号:cn=admin,dc=softc,dc=com
访问密码: admin
LDAP配置
台子搭建好了,总得手工配置几个用户, 之后用来登陆Gitlab使用。
一般推荐使用LDIF直接导入,单从学习角度来看,还是推荐用界面操作,界面操作如下
1、创建组
用户必须在某个组(Generic: Posix Group)下,所有先整一个组出来,操作如下截图
新建子实体
选择组
录入组名称,这里任意写了一个[group01],点击创建对象
点击提交
2、创建用户
在界面如下操作即可创建用户。
如果有创建多个用户的需求,下面的操作可以重复做几次,录入的用户信息不同即可。
- 创建子实体
- 创建用户
- 录入信息
- 提交
上面用户添加好了,额外还有个属性“email”是必须要的,不然后面有坑
3、验证用户登陆
提前获得用户DN( Distinguished Name): cn=ab,dc=softc,dc=com
我设置的密码是: 123456
退出系统,在用新建用户登陆,登陆成功
到此,我们LDAP部署和配置完成,有几个关键信息记录下来,再后续配置会使用到
LDAP地址:192.168.120.217 (部署ldap容器的主机地址)
LDAP端口:389 (上面部署时候映射出的端口)
LDAP管理用户: cn=admin,dc=softc,dc=com
LDAP管理用户密码: admin
LDAP自建用户: cn=ab,dc=softc,dc=com
LDAP自建用户密码: 123456
Gitlab搭建
搭建前,在搭建的linux机器添加hosts文件记录
访问界面的window机器,也同样添加hosts文件记录
192.168.120.217 gitlab.example.com
搭建测试使用http
root@demo0323:~# mkdir gitlab
root@demo0323:~/gitlab# vim docker-compose.yml
web:
image: 'gitlab/gitlab-ee:latest'
restart: always
hostname: 'gitlab.example.com'
ports:
- '1080:80'
- '10443:443'
- '1022:22'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
root@demo0323:~/gitlab# docker-compose up -d
等待一会,就可以界面访问了
http://gitlab.example.com:1080/users/sign_in
第一次访问要设置八位数以上密码,之后root用户即可登陆
Gitlab支持LDAP配置
先关闭服务
root@demo0323:~/gitlab# docker-compose down
再修改gitlab.rb文件
#文件部署时候通过volume挂载出来了
root@demo0323:~# vim /srv/gitlab/config/gitlab.rb
取消掉文件中注释行 gitlab_rails[‘ldap_enabled’],并修改成true
gitlab_rails['ldap_enabled'] = true
文件中添加如下内容:
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main:
label: 'LDAP' #界面显示名称
host: '192.168.120.217' #ldap部署的机器IP
port: 389 #ldap部署的端口
uid: 'uid' #这里选择uid
bind_dn: 'cn=admin,dc=softc,dc=com' #LDAP管理用户
password: 'admin' #LDAP管理用户密码
encryption: 'plain'
active_directory: true
allow_username_or_email_login: true
base: 'dc=softc,dc=com' #基准DN
user_filter: ''
EOS
上述参数,更多含义请参考官方文档:
https://docs.gitlab.com/ee/administration/logs.html#applicationlog
重新开启服务
root@demo0323:~/gitlab# docker-compose up -d
登陆验证
服务启动成功后,我们打开浏览器访问:http://gitlab.example.com:1080/users/sign_in,有了一个新的登陆方式
点击LDAP登陆,输入自建用户CN:[ab] 和密码[123456]
登陆成功,可正常使用Gitlab
上面是采用了 ab 来登陆的, 之前咱们也单独给ab 用户添加了一个邮箱【ab@qq.com】,同样也可以采用邮箱进行登陆
End .
过程总结
- 搭建好以后,登陆不成功怎么办
登陆不成功有很多原因,要一步步排查问题,定位问题原因。
主要流程搭建LDAP,搭建Gitlab,配置Gitlab的LDAP,完成并验证
- Gitlab登陆失败
最可能是配置Gitlab的LDAP没有配置成功,可以配置完成gitlab.rb文件后,进入容器验证
root@demo0323:~/gitlab# docker ps -a | grep gitlab
1a48e9fcc899 gitlab/gitlab-ee:latest “/assets/wrapper” 16 hours ago Up 16 hours (healthy) 0.0.0.0:1022->22/tcp, 0.0.0.0:1080->80/tcp, 0.0.0.0:10443->443/tcp gitlab_web_1我这里容器ID是:1a48e9fcc899,进入容器
root@demo0323:~/gitlab# docker exec -it 1a48e9fcc899 bash
root@gitlab:/#修改你的gitlab.rb文件,这个文件其实就是容器外主机中【/srv/gitlab/config/gitlab.rb】文件
root@gitlab:/# vim /etc/gitlab/gitlab.rb
修改完成gitlab.rb文件后,容器内重启服务
root@gitlab:/# gitlab-ctl reconfigure
使用rake验证ldap配置,如有显示【ab】用户,这此环节成功
root@gitlab:/# gitlab-rake gitlab:ldap:check
Checking LDAP …LDAP: … Server: ldapmain
LDAP authentication… Success
LDAP users with access to your GitLab server (only showing the first 100 results)
DN: cn=ab,dc=softc,dc=com uid: ab
DN: cn=dd,dc=softc,dc=com uid: dd
DN: cn=ff,dc=softc,dc=com uid: ff
DN: cn=ee,cn=pg01,ou=ou01,dc=softc,dc=com uid: eeChecking LDAP … Finished
- 搭建总结
搭建过程并不顺利,主要卡在配置Gitlab的LDAP上, 网上文章虽然很多,但是前面的LDAP这块都给省略了。 (LDAP的结构体系可以去B站上直接搜到专题视频)