CentOS 上 Jenkins 权限配置实操指南
一 系统与服务账户权限
- 建议以非 root运行 Jenkins,避免提权风险。创建专用系统用户与目录属主:
- 创建用户与组:sudo useradd -m -d /var/lib/jenkins -U jenkins
- 调整目录属主:sudo chown -R jenkins:jenkins /var/lib/jenkins /var/cache/jenkins /var/log/jenkins
- 配置服务账户(两种常见方式,二选一):
- 方式 A(传统 SysV 单元):编辑 /etc/sysconfig/jenkins,设置 JENKINS_USER=jenkins
- 方式 B(systemd 单元):编辑 /usr/lib/systemd/system/jenkins.service,设置 User=jenkins、Group=jenkins,随后执行 systemctl daemon-reload
- 端口与防火墙:编辑 /etc/sysconfig/jenkins 设置 JENKINS_PORT=8080;放行端口:
- sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload
- 启动服务:sudo systemctl enable --now jenkins
- 说明:若因历史原因必须改为 root 运行,可将 JENKINS_USER 设为 root 并 chown 相应目录,但生产环境不推荐。
二 认证方式与全局安全
- 首次访问 http://服务器IP:8080,从 /var/lib/jenkins/secrets/initialAdminPassword 获取解锁密码并登录。
- 进入 Manage Jenkins → Configure Global Security:
- 勾选 Enable security(启用安全)
- 选择 Jenkins’ own user database(内置用户库)或对接 LDAP/企业SSO 等外部认证
- 登录安全建议:勾选 Prevent Cross Site Request Forgery exploits
- 代理/CLI 安全:勾选 Enable Agent → Master Access Control(Agent→Master 访问控制)
- CSRF 保护:勾选 Use default Crumb Issuer
- 创建管理员与必要用户:Manage Jenkins → Manage Users → 新建用户(后续用于分配角色)。
三 基于角色的细粒度授权 RBAC
- 安装插件:Manage Jenkins → Manage Plugins → 可选插件搜索并安装 Role-based Authorization Strategy。
- 启用策略:Manage Jenkins → Configure Global Security → 授权策略选择 Role-Based Strategy 并保存。
- 定义角色与权限(Manage Jenkins → Manage and Assign Roles):
- Global roles(全局角色)
- 建议创建 baseRole,仅授予 Overall/Read,作为所有用户的“最小可见”基线
- Item roles(项目角色)
- 通过正则绑定项目名,例如:前缀 demo. 仅能操作以 demo 开头项目;前缀 test. 仅能操作以 test 开头项目
- Node roles(节点角色)
- 控制 Agent/节点相关权限(如 Overall/Read、Agent/Connect、Agent/Create 等按需分配)
- 分配角色(Assign Roles)
- 为用户绑定:例如用户 test1 绑定 baseRole + demo;用户 test2 绑定 baseRole + test
- 验证:以不同用户登录,确认仅可见与可操作被授权的项目。
四 常见权限问题与排查
- 新用户看不到任何项目
- 原因:缺少 Overall/Read。解决:为用户绑定含 Overall/Read 的全局角色(如 baseRole)。
- 构建/拉代码报权限不足
- 原因:Jenkins 进程用户对代码目录、工作空间或凭据无权限。解决:
- 将工作空间父目录属主设为 jenkins:jenkins,并确保 /var/lib/jenkins/.ssh 权限为 700、私钥 600
- 使用 SSH Agent 或 Credentials 插件托管凭据,避免明文存放
- 修改 JENKINS_USER 或 systemd 单元后无法启动
- 处理:执行 systemctl daemon-reload,确认目录属主与 SELinux 上下文正确,再重启服务
- 日志定位
- 查看 /var/log/jenkins/jenkins.log,根据报错调整权限或策略。
五 安全加固建议
- 始终以非 root运行 Jenkins,最小权限原则分配角色与凭据
- 启用 CSRF 与 Agent→Master Access Control,减少跨站与横向风险
- 对外网访问启用 HTTPS(Nginx/Apache 反向代理 + 证书),并限制管理端口访问来源
- 定期更新 Jenkins 与插件 至稳定版本,及时修补漏洞。