随着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(使用前将#替换为@)