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分支设置严格的推送/合并权限,避免误操作。