Linux下GitLab安全审计实操指南
一 审计目标与总体架构
二 日志与审计采集配置
启用并落盘 GitLab 审计日志
audit_logs['storage_path'] = "/var/log/gitlab/audit"logging['logrotate_frequency'] = 'daily',logging['logrotate_size'] = '100M'gitlab-ctl reconfigureapplication与log_type字段区分(如gitlab-rails, gitlab-shell, nginx)。系统层审计(auditd)
sudo auditctl -w /etc/gitlab/ -p wa -k gitlab_configsudo auditctl -w /var/opt/gitlab/gitlab-rails/ -p wa -k gitlab_railssudo auditctl -w /var/log/gitlab/ -p wa -k gitlab_logs/etc/audit/rules.d/gitlab.rules并重启 auditd。网络与登录安全(为审计提供高质量数据源)
/users/sign_in启用限流(如limit_req_zone与burst)。三 关键审计场景与查询要点
git-upload-pack(拉取)与git-receive-pack(推送),包含用户、项目、来源 IP、时间、结果。/etc/gitlab/、/var/opt/gitlab/的读写与权限变更;异常进程执行;日志轮转与清理异常。四 权限与下载审计的落地方法
数据库侧核对(只读审计,避免影响业务)
SELECT u.username, k.title, k.created_at FROM keys k JOIN users u ON k.user_id = u.id;SELECT m.user_id, u.username, m.access_level, p.path FROM members m JOIN users u ON m.user_id = u.id JOIN projects p ON m.source_id = p.id WHERE m.source_type='Project';SELECT u.username, i.extern_uid, i.provider FROM identities i JOIN users u ON i.user_id = u.id;拉取/下载行为审计(gitlab-shell 日志)
/var/log/gitlab/gitlab-shell/gitlab-shell.log,提取字段如action(git-upload-pack/git-receive-pack)、gl_project_path、remote_ip、git_user等,构建“用户-项目-来源 IP-时间”四维审计视图。五 代码与流水线的安全审计
静态代码扫描(SAST)
.gitlab-ci.yml中集成 SonarQube 或 GitLab SAST,示例:
轻量安全扫描(Semgrep)