CentOS 7基于 LDAP 认证的 GitLab 服务

2023-05-16

随着jira及wiki基于openldap进行认证初步实现后,公司又提出了Gitlab需求。为了避免线上直接配置出错,遂在本地虚拟机上重新搭建与线上版本一致的gitlab。本文主要介绍如何在 CentOS 7 环境下安装 CE(社区版)服务,以及集成 LDAP 统一认证、开启 HTTPS 等一系列配置。

一、安装 GitLab CE

一般情况下,习惯关闭防火墙,CentOS 7命令如下

查看状态: systemctl status firewalld 
停止: systemctl disable firewalld
禁用: systemctl stop firewalld

然后我们需要下载下面这些 GitLab 必需的依赖包:

[root@bogon ~]# yum install -y curl policycoreutils-python openssh-server postfix
[root@bogon ~]# systemctl enable sshd
[root@bogon ~]# systemctl start sshd
[root@bogon ~]# systemctl enable postfix
[root@bogon ~]# systemctl start postfix

由于官方的镜像在国内下载速度较慢,我们使用了清华大学的镜像先把安装包下载到本地,并进行手动安装:

[root@bogon ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.1.1-ce.0.el7.x86_64.rpm
[root@bogon ~]# EXTERNAL_URL="http://test.gitlab.com:8888" rpm -i gitlab-ce-10.1.1-ce.0.el7.x86_64.rpm
查看并修改/etc/gitlabgitlab.rb配置文件中
external_url 'http://test.gitlab.com:8888'
重新配 置gitlab
[root@bogon ~]#gitlab-ctl reconfigure
查看版本

[root@bogon gitlab]# sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

10.1.1
重启服务
gitlab-ctl restart
然后配置本地hosts

这样,一个最基本 GitLab 便安装完成了。我们在浏览器中访问 http://test.gitlab.com:8888 便会进入 GitLab 的登录界面。首次使用时,需要按照页面提示设置管理员 root 的密码。

下面,我们开始按需求配置 GitLab。

二、配置 LDAP 基本连接

按照下面的方法把具体相关配置信息添加到  /etc/gitlab/gitlab.rb  中:

### LDAP Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/ldap.html
###! **Be careful not to break the indentation in the ldap_servers block. It is
###!   in yaml format and the spaces must be retained. Using tabs will not work.**


gitlab_rails['ldap_enabled'] = true


###! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
   main: # 'main' is the GitLab 'provider ID' of this LDAP server
     label: 'LDAP'
     host: '10.103.50.83'
     port: 389
     uid: 'uid'
     bind_dn: 'cn=Manager,dc=XXX,dc=com'
     password: 'XXX'
     encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
#     verify_certificates: true
#     ca_file: ''
#     ssl_version: ''
     active_directory: true
     allow_username_or_email_login: false
#     block_auto_created_users: false
     base: 'dc=yinker,dc=com'
     user_filter: ''
#     attributes:
#       username: ['uid', 'userid', 'sAMAccountName']
#       email:    ['mail', 'email', 'userPrincipalName']
#       name:       'cn'
#       first_name: 'givenName'
#       last_name:  'sn'
#     ## EE only
#     group_base: ''
#     admin_group: ''
#     sync_ssh_keys: false
#
#   secondary: # 'secondary' is the GitLab 'provider ID' of second LDAP server
#     label: 'LDAP'
#     host: '_your_ldap_server'
#     port: 389
#     uid: 'sAMAccountName'
#     bind_dn: '_the_full_dn_of_the_user_you_will_bind_with'
#     password: '_the_password_of_the_bind_user'
#     encryption: 'plain' # "start_tls" or "simple_tls" or "plain"
#     verify_certificates: true
#     ca_file: ''
#     ssl_version: ''
#     active_directory: true
#     allow_username_or_email_login: false
#     block_auto_created_users: false
#     base: ''
#     user_filter: ''
#     attributes:
#       username: ['uid', 'userid', 'sAMAccountName']
#       email:    ['mail', 'email', 'userPrincipalName']
#       name:       'cn'
#       first_name: 'givenName'
#       last_name:  'sn'
#     ## EE only
#     group_base: ''
#     admin_group: ''
#     sync_ssh_keys: false

EOS

其中:

  • host 和 port 是 LDAP 服务的主机地址及端口
  • bind_dn 和 password 是一个管理 LDAP 的 dn 及密码
  • base 表示 LDAP 将以该 dn 为 节点,向下查找用户
  • user_filter 表示以某种过滤条件筛选用户,比如假设我们只希望所属组为 Developers 的用户来访问 GitLab,则可以在这里设置 (memberOf=cn=Developers,cn=Groups,dc=xinhua,dc=org)
  • attributes 表示 GitLab 中的字段与 LDAP 中哪些字段可以相互对应,比如可以用 LDAP 中的 uid 来作为 GitLab 用户名

配置修改完成之后,运行下面命令重启 GitLab 服务:

[root@localhost ~]# gitlab-ctl reconfigure
这样,就简单的配置好了 LDAP 目录服务。打开浏览器访问 http://test.gitlab.com:8888 便会看到在登录界面上多了一个 LDAP 的登录方式:

三、进一步配置

通过第二节,我们在 GitLab 上联通了 LDAP 认证服务,下面,我们将根据实际情况,进一步配置 GitLab 和 LDAP。


首先,为了安全我们需要关闭 GitLab 自己的注册功能,这样新用户只能通过 LDAP 认证的方式进行登陆。同时,需要将默认的管理员 root 修改为较复杂的用户名,以防攻击者暴力破解。

其次,可以将非企业正式员工的用户设置成 External User,以限制其创建私人项目和组。比如在一个企业中,除了全职的正式员工之外,可能还会有项目中存在乙方公司、兼职等临时人员,将这些人设置为 External User 便可限制其使用 GitLab 创建自己的私人项目和组,同时对其提交项目代码不受影响。

四、开启 HTTPS

GitLab 默认没有开启 HTTPS,如果需要开启的话,需要按照下面的步骤执行:

1.首先,在配置文件 /etc/gitlab/gitlab.rb 中将下面一行中的协议由 HTTP 改成 HTTPS,并设置从 HTTP 到 HTTPS 的重定向:

external_url 'https://test.gitlab.com:8888'

# Redirect HTTP requests to HTTPS

nginx['enable'] = true
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/server.crt"

nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/server.key"

2.生成秘钥与证书:

由于生成秘钥与证书比较麻烦,写成一个脚本(名字为ssl_genKey.sh)。出现输入信息的地方输入相应的信息,首先是域名/地址,后面需要输入4次证书的密码,密码任意指定,但4次输入得一致。

ssl_genKey.sh脚本内容:

#!/bin/sh


# create self-signed server certificate:


read -p "Enter your domain [www.example.com]: " DOMAIN


echo "Create server key..."


openssl genrsa -des3 -out $DOMAIN.key 1024


echo "Create server certificate signing request..."


SUBJECT="/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=$DOMAIN"


openssl req -new -subj $SUBJECT -key $DOMAIN.key -out $DOMAIN.csr


echo "Remove password..."


mv $DOMAIN.key $DOMAIN.origin.key
openssl rsa -in $DOMAIN.origin.key -out $DOMAIN.key


echo "Sign SSL certificate..."


openssl x509 -req -days 3650 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt


echo "TODO:"
echo "Copy $DOMAIN.crt to /etc/nginx/ssl/$DOMAIN.crt"
echo "Copy $DOMAIN.key to /etc/nginx/ssl/$DOMAIN.key"
echo "Add configuration in nginx:"
echo "server {"
echo "    ..."
echo "    listen 443 ssl;"
echo "    ssl_certificate     /etc/nginx/ssl/$DOMAIN.crt;"
echo "    ssl_certificate_key /etc/nginx/ssl/$DOMAIN.key;"

echo "}"


简单参数说明:

  • openssl:这是用于创建和管理OpenSSL证书,密钥和其他文件的基本命令行工具。
  • req -x509:这指定我们要使用X.509证书签名请求(CSR)管理。“X.509”是SSL和TLS坚持用于密钥和证书管理的公钥基础结构标准。
  • -nodes:这告诉OpenSSL跳过用密码保护我们的证书的选项。当服务器启动时,我们需要Apache能够读取文件,而无需用户干预。密码可以防止这种情况发生,因为每次重新启动后我们都必须输入密码。
  • 第3650天:此选项设置证书被视为有效的时间长度。我们在这里定了十年。
  • -newkey rsa:2048:这指定我们要同时生成一个新的证书和一个新的密钥。我们没有在上一步创建签名证书所需的密钥,所以我们需要与证书一起创建证书。rsa:2048部分告诉它做一个2048位长的RSA密钥。
  • -keyout:这一行告诉OpenSSL在哪里放置我们正在创建的私有密钥文件。
  • -out:这告诉OpenSSL在哪里放置我们正在创建的证书。

生成的如下:


其中圈出来的是有用的,其他的可以删掉。

移到相应的位置:

sudo mkdir -p /etc/gitlab/ssl

sudo chmod 700 /etc/gitlab/ssl/ -R

sudo cp test.gitlab.com.crt /etc/gitlab/ssl/server.crt

sudo cp test.gitlab.com.key /etc/gitlab/ssl/server.key

3.重建配置:

sudo gitlab-ctl reconfigure

浏览器即可使用https访问:


暂时发现问题:

LDAP登录报错,使用xxx @xxx.com 登录
原因:sAMAccountName不允许特殊字符,如@,而hanqian_1是可以的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CentOS 7基于 LDAP 认证的 GitLab 服务 的相关文章

随机推荐