Linux环境下GitLab安全策略配置指南
通过防火墙限制外部对GitLab服务器的访问,仅开放必要端口(HTTP 80、HTTPS 443),阻止非法IP或端口的探测。
sudo apt install ufw -y
sudo ufw allow 80/tcp # 允许HTTP
sudo ufw allow 443/tcp # 允许HTTPS
sudo ufw enable # 启用防火墙
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
使用SSL证书加密GitLab与客户端之间的数据传输,防止中间人攻击。推荐使用Let’s Encrypt免费证书(自动续期):
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
/etc/gitlab/gitlab.rb,指定证书路径并强制HTTPS:external_url 'https://yourdomain.com'
nginx['ssl_certificate'] = "/etc/letsencrypt/live/yourdomain.com/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/yourdomain.com/privkey.pem"
nginx['redirect_http_to_https'] = true # 自动跳转HTTPS
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
替代密码认证,提升用户登录安全性:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
~/.ssh/id_rsa.pub内容复制到GitLab用户设置的「SSH Keys」中。ssh -T git@yourdomain.com
通过自动化备份防止数据丢失,建议每日备份并存储到异地:
sudo gitlab-rake gitlab:backup:create
sudo crontab -e
添加以下内容(每日凌晨2点备份):0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
sudo gitlab-ctl cleanup-backup
定期升级GitLab到最新稳定版,修复已知安全漏洞:
sudo apt update
sudo apt upgrade gitlab-ce -y # Debian/Ubuntu
sudo yum update gitlab-ce -y # CentOS/RHEL
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
通过GitLab配置强制用户使用复杂密码,降低账户被破解风险:
编辑/etc/gitlab/gitlab.rb,添加以下规则:
gitlab_rails['password_authentication'] = true # 启用密码认证
gitlab_rails['password_complexity'] = {
'min_length' => 12, # 最小长度12位
'require_lowercase' => true, # 必须包含小写字母
'require_uppercase' => true, # 必须包含大写字母
'require_numbers' => true, # 必须包含数字
'require_special_characters' => true # 必须包含特殊字符
}
重载配置:
sudo gitlab-ctl reconfigure
为账户添加第二层验证,即使密码泄露也能阻止非法登录:
防止用户上传敏感文件(如.env、config.json),避免敏感信息泄露:
编辑/etc/gitlab/gitlab.rb,添加以下规则:
gitlab_rails['gitlab_shell_upload_pack'] = true
gitlab_rails['gitlab_shell_receive_pack'] = true
gitlab_rails['gitlab_shell_ssh_port'] = 22
gitlab_rails['gitlab_shell_authorized_keys_file'] = '/var/opt/gitlab/.ssh/authorized_keys'
# 禁止上传危险文件类型
gitlab_rails['upload_size_limit'] = 100.megabytes # 限制上传大小
gitlab_rails['block_upload_extensions'] = ['exe', 'bat', 'sh', 'env', 'json', 'yml']
重载配置:
sudo gitlab-ctl reconfigure
与企业现有身份管理系统集成,统一用户身份认证,减少密码管理成本:
编辑/etc/gitlab/gitlab.rb,添加LDAP配置:
gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = {
'main' => {
'label' => 'LDAP',
'host' => 'ldap.example.com', # LDAP服务器地址
'port' => 389, # LDAP端口(默认389)
'uid' => 'uid', # 用户标识字段(如uid、sAMAccountName)
'encryption' => 'plain', # 加密方式(none/plain/ssl/tls)
'bind_dn' => 'cn=admin,dc=example,dc=com', # 绑定DN(管理员账号)
'password' => 'your_ldap_password', # 绑定密码
'base' => 'ou=users,dc=example,dc=com', # 用户搜索基础DN
'user_filter' => '(objectClass=person)' # 用户过滤条件
}
}
重载配置:
sudo gitlab-ctl reconfigure
记录用户活动(如登录、代码提交、权限变更),便于追踪安全事件:
/var/log/gitlab/gitlab-rails/audit.log。curl --header "PRIVATE-TOKEN: your_access_token" "https://yourdomain.com/api/v4/audit_events?created_after=2025-01-01"
通过角色权限和分支保护限制用户对项目的访问,遵循“最小权限原则”:
Private(仅成员可访问),避免公开泄露代码。Guest仅查看、Developer可推送代码、Maintainer可管理项目)。main分支),限制只有Maintainer及以上角色可推送代码,防止误操作或恶意修改。