GitLab在Linux上的权限设置指南
在Linux系统中,GitLab的服务运行需专属用户/组,且项目目录需合理分配权限。
创建GitLab专用用户/组:
执行以下命令创建git用户及同名的组,并设置家目录:
sudo groupadd git
sudo useradd -g git git
sudo mkdir -p /home/git
sudo chown git:git /home/git
此用户将用于运行GitLab服务及管理仓库文件。
配置GitLab运行用户:
编辑GitLab主配置文件/etc/gitlab/gitlab.rb,指定服务运行的用户/组:
unicorn['user'] = 'git'
unicorn['group'] = 'git'
nginx['user'] = 'www-data' # Nginx用户(默认)
postgresql['user'] = 'postgres' # 数据库用户
保存后执行sudo gitlab-ctl reconfigure使配置生效。
需确保GitLab数据、日志目录的权限正确,避免服务异常。
/etc/gitlab/gitlab.rb中配置数据目录(默认/var/opt/gitlab/git-data)的所有者、组及权限:git_data_dirs({
"default" => {
"path" => "/var/opt/gitlab/git-data",
"owner" => "git",
"group" => "git",
"permissions" => "0755" # 所有者可读写执行,组及其他用户可读执行
}
})
/var/log/gitlab):git_log_dirs({
"default" => {
"path" => "/var/log/gitlab",
"owner" => "git",
"group" => "git",
"permissions" => "0755"
}
})
执行sudo gitlab-ctl reconfigure应用配置。GitLab通过角色实现细粒度的权限控制,覆盖项目/组两个层级:
内置角色说明:
项目级权限设置:
组级权限设置:
项目可见性设置:
在项目Settings→General中,修改Visibility:
分支保护规则:
进入项目Settings→Repository→Protected Branches,选择需保护的分支(如main):
SSH密钥认证:
要求用户生成SSH密钥(ssh-keygen -t rsa -b 4096 -C "email@example.com"),将公钥(~/.ssh/id_rsa.pub)添加至GitLab账户→Preferences→SSH Keys,确保安全访问。
防火墙设置:
开放HTTP(80)及HTTPS(443)端口,允许外部访问:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
SELinux配置(若启用):
调整GitLab数据目录的SELinux上下文,避免权限拒绝:
sudo chcon -Rv --reference=/var/www/html /var/opt/gitlab/git-data
sudo chcon -Rv --reference=/var/log/httpd /var/log/gitlab
main/master分支设置严格的推送/合并权限,避免误操作。