Ubuntu系统下GitLab权限配置指南
GitLab的核心数据目录(默认/var/opt/gitlab)需归属git用户及git组,并设置合理权限以保证服务正常运行:
sudo chown -R git:git /var/opt/gitlab # 递归修改目录归属
sudo chmod -R 755 /var/opt/gitlab # 递归设置目录权限(所有者可读写执行,组及其他用户可读执行)
用户通过SSH克隆/推送代码时,需确保个人.ssh目录及密钥文件的权限正确:
chmod 700 ~/.ssh # 仅所有者可读、写、执行
chmod 600 ~/.ssh/* # 密钥文件仅所有者可读写
GitLab默认以git用户身份运行,需确认该用户及组的存在:
sudo adduser --system --group --disabled-login --gecos '' git # 若未创建则执行
编辑GitLab主配置文件/etc/gitlab/gitlab.rb,确保以下关键参数正确:
# 绑定GitLab实例的访问URL(需替换为实际域名/IP)
external_url 'http://your-gitlab-domain.com'
# 配置Git数据目录权限(与基础目录权限一致)
git_data_dirs({
"default" => {
"path" => "/var/opt/gitlab/git-data",
"permissions" => "755"
}
})
# 确保GitLab Shell使用专用用户/组
gitlab_rails['gitlab_shell_ssh_port'] = 22 # 默认SSH端口(若修改需同步SSH配置)
gitlab_rails['gitlab_shell_user'] = 'git'
gitlab_rails['gitlab_shell_group'] = 'git'
修改后需重新加载配置:
sudo gitlab-ctl reconfigure # 应用配置变更
sudo gitlab-ctl restart # 重启GitLab服务
GitLab通过角色和组实现细粒度的权限管理,操作需通过Web界面完成:
Admin Area(管理后台) > Users > New User,填写用户名、密码等信息,点击Create user。Users页面,找到目标用户,点击其用户名进入详情页,选择Remove user。Groups > New Group,填写组名(如dev-team)、描述,选择Visibility(公开/内部/私有),点击Create group。Members > Invite member,输入用户名或邮箱,选择角色后点击Invite。GitLab预定义5种角色,对应不同权限级别(从低到高):
| 角色 | 权限说明 |
|---|---|
| Guest | 仅能查看项目(无代码推送、分支管理等权限) |
| Reporter | 可查看代码、提交记录、CI/CD结果;可克隆项目(无推送权限) |
| Developer | 可推送代码到非保护分支、创建分支/标签;可管理议题(Issue)、合并请求(MR) |
| Maintainer | 可推送代码到保护分支、管理保护分支规则;可添加成员、管理项目设置 |
| Owner | 拥有项目最高权限(包括删除项目、转让所有权、管理组关联等) |
分配角色步骤:进入项目详情页 > Settings > Members,点击Invite member,选择用户并分配角色即可。
批量分配组权限:进入项目Members页面,点击Invite group,选择组并分配角色,组内所有成员将继承该角色权限。
若需通过LDAP(如Active Directory)管理用户权限,需编辑/etc/gitlab/gitlab.rb配置:
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main:
label: 'LDAP'
host: 'ldap.example.com' # LDAP服务器地址
port: 389 # LDAP端口(默认389)
uid: 'uid' # LDAP用户唯一标识字段(如uid、sAMAccountName)
method: 'plain' # 认证方式(plain/plain_ssl/ssl)
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
user_search_filter: '(uid=%{username})' # 用户搜索过滤器
EOS
配置后重新加载并重启GitLab:
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
Developer角色,用户应能推送代码到非保护分支)。