CentOS系统下GitLab权限设置方法
确保GitLab核心数据目录(默认/var/opt/gitlab
)的所有者和权限正确,避免未授权访问:
sudo chown -R git:git /var/opt/gitlab # 将目录所有者设为git用户及组
sudo chmod -R 755 /var/opt/gitlab # 设置目录权限为755(所有者可读写执行,其他用户可读执行)
GitLab默认以git
用户运行,需确认服务配置中的用户设置:
编辑/etc/gitlab/gitlab.rb
,检查以下参数是否为git
:
gitlab_rails['git_user'] = 'git' # Git操作对应的系统用户
gitlab_rails['git_group'] = 'git' # Git操作对应的系统组
修改后执行sudo gitlab-ctl reconfigure
应用配置。
若系统开启SELinux,需调整策略以避免拦截GitLab操作:
sudo setenforce 0 # 临时关闭SELinux(测试用)
# 或通过semanage调整策略(永久生效,需安装policycoreutils-python)
sudo semanage fcontext -a -t git_repo_t "/var/opt/gitlab(/.*)?"
sudo restorecon -Rv /var/opt/gitlab
GitLab采用RBAC(基于角色的访问控制)模型,权限分为实例级(全局)和项目级(具体项目)两类:
GitLab预定义5种核心角色,覆盖不同层级的操作权限:
角色 | 权限范围 |
---|---|
Guest | 仅能查看项目、创建issue/评论;无法读写代码仓库。 |
Reporter | 可克隆代码、查看issue/CI结果;无法推送代码或修改项目内容。 |
Developer | 可克隆、推送代码、创建分支/标签;无法管理项目或成员。 |
Maintainer | 可管理项目(添加成员、编辑描述、保护分支)、创建标签、触发CI/CD;核心开发负责人角色。 |
Owner | 拥有项目完全控制权(删除项目、迁移项目、管理组成员、设置项目可见性);实例管理员角色。 |
通过Web界面为具体项目分配用户角色:
Guest
(可通过Settings
→General
→Sign-up restrictions
修改默认角色)。Private
仅成员可见、Internal
登录用户可见、Public
所有人可见)。限制特定用户或角色对分支的推送/合并操作,防止误操作或未授权修改:
main
),设置:
通过MR流程规范代码合并,确保代码质量:
若企业使用LDAP(如Active Directory),可将GitLab与LDAP同步,通过LDAP组管理GitLab权限:
/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', # LDAP用户标识字段(如uid)
'bind_dn' => 'cn=admin,dc=example,dc=com', # LDAP管理员DN
'password' => 'your_ldap_password', # LDAP管理员密码
'user_search_base' => 'ou=users,dc=example,dc=com', # 用户搜索基础DN
'group_search_base' => 'ou=groups,dc=example,dc=com', # 组搜索基础DN
'ldap_group_sync_strategy' => 'group' # 同步策略(group/attribute)
}
}
sudo gitlab-ctl reconfigure
同步LDAP组。dev-team
映射至Developer
角色),实现统一权限管理。