CentOS 上保障 GitLab 安全性的实用方案
一 基础防护与网络边界
- 启用并配置 firewalld,仅对外开放必要流量:优先仅放行 HTTP/HTTPS(80/443);如需直接暴露 SSH(22),建议改为从内网或跳板机访问,或使用反向代理/负载均衡统一接入。示例:
firewall-cmd --permanent --add-service=http --add-service=https && firewall-cmd --reload。
- 全站启用 HTTPS/TLS:为域名申请并自动续期 Let’s Encrypt 证书,或在 /etc/gitlab/gitlab.rb 中配置证书与私钥路径,强制浏览器与 Git 客户端使用加密传输。
- 强化 SSH 访问:优先使用 SSH 公钥认证 替代密码;如必须使用密码,启用强口令策略与登录失败锁定;可将 Git 通过 SSH over 443 穿越严格防火墙策略。
- 系统与服务最小化:关闭不必要的端口/服务与内核模块,减少攻击面;仅运行 GitLab 必需组件。
二 身份与访问控制
- 启用 多因素认证(2FA):强制 管理员 与 高权限账户 启用 2FA,降低凭证泄露风险。
- 基于 RBAC 最小权限:按 Guest/Reporter/Developer/Maintainer/Owner 等角色分配权限,项目与群组遵循最小可见性与最小权限原则。
- 注册与邀请管控:关闭公开注册或增加管理员审核;对外部贡献者使用受限可见性与审批流程。
- 账户与登录安全:启用强口令策略、登录失败限制与登录审计;定期清理沉睡与共享账号。
三 系统与平台加固
- 保持 GitLab 与 CentOS 的及时更新:第一时间应用安全补丁,修复已知漏洞。
- 启用 SELinux:保持 enforcing 模式,必要时为 GitLab 配置精确策略,限制进程越权访问。
- 文件与凭据保护:对 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow 等关键文件设置不可更改属性(如
chattr +i),降低被篡改风险。
- 会话与特权控制:设置 root 自动注销(TMOUT),并通过 PAM 限制
su 使用范围,减少提权路径。
- 备份与恢复演练:定期执行全量备份(含仓库、数据库、上传文件与配置),并进行恢复演练,确保灾难时可快速回滚。
四 数据安全与 CI/CD 防护
- 防止敏感信息泄露:通过 .gitignore 与 预提交/推送钩子 过滤密钥、证书与配置文件;必要时对必须上传的敏感文件进行加密。
- 代码与依赖安全:实施 安全代码审查 与 依赖扫描,降低供应链风险。
- CI/CD 密钥与流水线安全:将 Runner 注册令牌、部署密钥、环境变量 等按最小权限配置;启用 CI_JOB_TOKEN 的受限作用域;对关键分支启用 受保护分支 与 审批门禁,防止未授权变更。
- 日志与监控审计:集中收集并长期保留 GitLab 日志,对异常登录、权限变更、令牌滥用等进行告警。
五 快速加固清单与关键配置
- 加固清单(建议按顺序执行)
- 仅放行 80/443(或 22/443)并启用 firewalld;2) 全站启用 HTTPS/TLS;3) 强制 SSH 公钥 与 2FA;4) 关闭公开注册/严格邀请;5) 按 RBAC 最小化授权;6) 保持系统与 GitLab 及时更新;7) 启用 SELinux 与关键文件保护;8) 定期 备份与演练;9) 配置 日志集中与告警;10) 加固 CI/CD 密钥与受保护分支。
- 关键配置示例(/etc/gitlab/gitlab.rb)
- 外部访问与协议:
external_url 'https://git.example.com'
- 证书路径(示例):
nginx['ssl_certificate'] = "/etc/letsencrypt/live/git.example.com/fullchain.pem";nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/git.example.com/privkey.pem"
- 应用配置后执行:
gitlab-ctl reconfigure && gitlab-ctl restart
提示:变更前备份配置与数据,变更后在测试环境验证再推广至生产。