在上期《Git服务器-使用gerrit搭建私有git服务》中,我们用nginx搭建了一个HTTP认证服务,用来给gerrit做用户登录,看起来有点简陋。另外每次切换用户的时候,需要先清理本地cookies才可以,有点儿繁琐。今天我们搭建一个LDAP服务,用来给gerrit做登陆服务,不会再有清理cokkies的问题。
LDAP(Lightweight Directory Access Protocol)轻型目录访问协议,是一个开放的、中立的、工业标准的应用协议,它通过IP协议提供访问控制和维护分布式目录信息。之所以选择这个协议,因为这是一个开放的工业标准,成熟稳定,适合私有部署,保证信息安全,同时gerrit原生支持。本次我们使用的LDAP服务软件,是OpenLDAP的slapd,同时也是一个开源软件。使用LDAP后,gerrit的拓扑结构是这样的:
安装LDAP
1
2
3
4
5
|
# 安装软件slapd
sudo apt install slapd ldap-utils
## 安装工具用户/组工具
sudo apt install ldapscripts
|
# 安装软件slapd
sudo apt install slapd ldap-utils
## 安装工具用户/组工具
sudo apt install ldapscripts
配置LDAP
这是一个简单的目录树结构,用来为gerrit做认证服务:
1
2
|
## 配置Root DN
sudo dpkg-reconfigure slapd
|
## 配置Root DN
sudo dpkg-reconfigure slapd
上面的命令中需要填写一些信息,内容如下:
- STEP1. [NO]
- STEP2. DNS domain name: ticktechman.tech
- STEP3. Organization name: ticktech
- STEP4. Administrator password: admin
- STEP5. Confirm password: admin
- STEP6. [NO]
- STEP7. [YES]
接下来,需要添加people和groups组织单元(OU=organization unit)信息,新建一个add.ldif
文件,内容如下:
1
2
3
4
5
6
7
|
dn: ou=people,dc=ticktechman,dc=tech
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=ticktechman,dc=tech
objectClass: organizationalUnit
ou: groups
|
dn: ou=people,dc=ticktechman,dc=tech
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=ticktechman,dc=tech
objectClass: organizationalUnit
ou: groups
然后执行下面的命令将OU信息添加到LDAP服务中:
1
2
3
4
5
|
## 添加people和groups,这里需要输入密码,就是上面第4步中输入的密码
sudo ldapadd -x -D cn=admin,dc=ticktechman,dc=tech -W -f add.ldif
## 查询结果,这里ldapi:///使用的本地IPC通道,不是网络
ldapsearch -x -LLL -H ldapi:///
|
## 添加people和groups,这里需要输入密码,就是上面第4步中输入的密码
sudo ldapadd -x -D cn=admin,dc=ticktechman,dc=tech -W -f add.ldif
## 查询结果,这里ldapi:///使用的本地IPC通道,不是网络
ldapsearch -x -LLL -H ldapi:///
接下来我们可以使用ldscripts来访问ldap服务器上的信息,主要是用来添加用户和组信息,不过在此之前,需要先修改好ldscripts的配置(主要是和服务器相关的配置信息),配置文件位于/etc/ldapscripts/ldapscripts.conf
中,需要修改的内容如下:
1
2
3
4
5
6
|
SERVER="ldap://192.168.1.107" ## 服务器地址
SUFFIX="dc=ticktechman,dc=tech" ## DN信息
GSUFFIX="ou=groups" ## 组对应的OU
USUFFIX="ou=people" ## 用户对应的OU
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd" ## 这一项不需要修改,这里配置了访问LDAP服务的密码文件位置,注意这里的密码不能包含换行符
|
SERVER="ldap://192.168.1.107" ## 服务器地址
SUFFIX="dc=ticktechman,dc=tech" ## DN信息
GSUFFIX="ou=groups" ## 组对应的OU
USUFFIX="ou=people" ## 用户对应的OU
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd" ## 这一项不需要修改,这里配置了访问LDAP服务的密码文件位置,注意这里的密码不能包含换行符
使用这个命令将密码添加的上面配置的文件中:
1
|
echo -n 'admin' | sudo tee /etc/ldapscripts/ldapscripts.passwd
|
echo -n 'admin' | sudo tee /etc/ldapscripts/ldapscripts.passwd
好了,接下来就可以添加用户和组信息了:
1
2
3
4
5
6
7
8
9
10
11
|
## 添加组
sudo ldapaddgroup administrators
sudo ldapaddgroup rnd
## 添加用户
sudo ldapadduser admin administrators
sudo ldapadduser ticktech rnd
## 修改密码
sudo sudo ldapsetpasswd admin
sudo sudo ldapsetpasswd ticktech
|
## 添加组
sudo ldapaddgroup administrators
sudo ldapaddgroup rnd
## 添加用户
sudo ldapadduser admin administrators
sudo ldapadduser ticktech rnd
## 修改密码
sudo sudo ldapsetpasswd admin
sudo sudo ldapsetpasswd ticktech
配置gerrit
1
2
3
4
5
6
7
8
9
10
11
|
# gerrit.config
[auth]
type = LDAP
[ldap]
server = ldap://192.168.1.107
username = cn=admin,dc=ticktechman,dc=tech
password = admin
accountBase = ou=people,dc=ticktechman,dc=tech
groupBase = ou=groups,dc=ticktechman,dc=tech
accountPattern = (uid=${username})
supportAnonymous = false
|
# gerrit.config
[auth]
type = LDAP
[ldap]
server = ldap://192.168.1.107
username = cn=admin,dc=ticktechman,dc=tech
password = admin
accountBase = ou=people,dc=ticktechman,dc=tech
groupBase = ou=groups,dc=ticktechman,dc=tech
accountPattern = (uid=${username})
supportAnonymous = false
配置完成后,重启gerrit服务。
登陆/登出测试
现在登陆界面变成这样了:
登陆之后,也可以正常登出。
参考