GitLab的权限体系以角色权限为核心,结合项目/组层级控制、LDAP集成及访问控制列表(ACL),实现细粒度的访问管理。以下是具体实施步骤:
GitLab预定义了5种用户角色,覆盖从只读到完全控制的权限范围,适用于项目/组层级:
为隔离GitLab运行环境,建议创建专用系统用户(如git)和组:
# 创建git组与用户(禁止登录shell)
sudo groupadd git
sudo useradd -r -g git -s /sbin/nologin -d /var/opt/gitlab git
GitLab数据目录(如/var/opt/gitlab)需归属git用户,确保服务正常运行:
# 更改数据目录所有者
sudo chown -R git:git /var/opt/gitlab
# 设置目录权限(755:所有者可读写执行,其他用户可读执行)
sudo chmod -R 755 /var/opt/gitlab
GitLab主配置文件(/etc/gitlab/gitlab.rb)需由root拥有,避免未授权修改:
sudo chown root:root /etc/gitlab/gitlab.rb
sudo chmod 644 /etc/gitlab/gitlab.rb
若系统启用SELinux,需调整策略以允许GitLab访问资源:
# 查看SELinux状态(enabled为启用)
sestatus
# 临时禁用SELinux(测试用)
sudo setenforce 0
# 永久禁用(需修改/etc/selinux/config文件)
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
开放HTTP(80)/HTTPS(443)端口,允许外部访问GitLab:
# 永久开放端口
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
# 重新加载防火墙规则
sudo firewall-cmd --reload
通过LDAP同步用户与组,实现集中式权限管理:
/etc/gitlab/gitlab.rb),启用LDAP同步:gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = {
'main' => {
'label' => 'LDAP',
'host' => 'ldap.example.com',
'port' => 389,
'uid' => 'uid',
'bind_dn' => 'cn=admin,dc=example,dc=com',
'password' => 'ldap_password',
'user_search_base' => 'dc=example,dc=com',
'user_search_filter' => '(uid=%{username})'
}
}
# 启用LDAP组同步
gitlab_rails['ldap_group_sync'] = true
gitlab_rails['ldap_group_base_dn'] = 'ou=groups,dc=example,dc=com'
gitlab_rails['ldap_group_sync_strategy'] = 'group'
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
cn=developers,ou=groups,dc=example,dc=com映射为Maintainer角色)。限制敏感分支(如main)的修改权限,防止误操作:
main)。gitlab-rails console查看用户角色:# 登录console
sudo gitlab-rails console
# 查询用户角色(替换username为实际用户名)
user = User.find_by_username('username')
puts user.roles.map(&:name) # 输出用户角色列表
exit
/etc/gitlab/gitlab.rb及项目/组设置,防止配置丢失。通过以上步骤,可在CentOS上实现GitLab的精细化权限管理,确保项目安全与团队协作效率。