跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Jenkins认证机制
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Jenkins认证机制 = '''Jenkins认证机制'''是Jenkins安全体系的核心组成部分,用于控制用户访问权限,确保只有授权用户才能执行特定操作。本条目详细讲解其工作原理、配置方法及实际应用场景。 == 概述 == Jenkins提供多种认证方式,通过安全域(Security Realm)定义用户验证来源(如内置数据库、LDAP、GitHub OAuth等),再通过授权策略(Authorization)分配权限。认证流程分为以下步骤: # 用户提交凭证(用户名/密码、API令牌等) # Jenkins根据配置的安全域验证凭证有效性 # 验证成功后,授权策略决定用户可访问的资源 == 认证方式 == === 内置用户数据库 === Jenkins默认使用内置数据库存储用户信息,适合小型团队: <syntaxhighlight lang="groovy"> // 通过Groovy脚本创建用户(需管理员权限) import hudson.model.* import jenkins.model.* import hudson.security.* def instance = Jenkins.getInstance() def hudsonRealm = new HudsonPrivateSecurityRealm(false) hudsonRealm.createAccount("dev1", "password123") instance.setSecurityRealm(hudsonRealm) instance.save() </syntaxhighlight> === LDAP集成 === 企业常用LDAP协议对接公司目录服务,配置路径:'''Manage Jenkins > Configure Global Security''' ```properties Server: ldap.example.com Root DN: dc=example,dc=com User search base: ou=people User search filter: uid={0} ``` === OAuth/SSO集成 === 支持GitHub、Google等第三方认证,示例GitHub配置: <syntaxhighlight lang="xml"> <!-- 片段来自config.xml --> <securityRealm class="org.jenkinsci.plugins.GithubSecurityRealm"> <clientID>your_client_id</clientID> <clientSecret>your_secret</clientSecret> <oauthScopes>read:org,user:email</oauthScopes> </securityRealm> </syntaxhighlight> == 授权策略 == 认证通过后,需配置授权模型控制权限粒度: {| class="wikitable" |+ 常见策略对比 ! 策略类型 !! 适用场景 !! 特点 |- | '''Anyone can do anything''' || 测试环境 || 无权限控制 |- | '''Legacy mode''' || 迁移场景 || 管理员拥有全部权限 |- | '''Matrix-based''' || 精细控制 || 可分配具体权限给用户/组 |- | '''Role-based''' || 企业环境 || 通过插件实现角色继承 |} 示例矩阵权限配置: <mermaid> flowchart LR UserA[开发者] -->|read| Job1 UserA -->|build| Job1 UserB[运维] -->|configure| Job1 UserB -->|delete| Job2 </mermaid> == API认证 == 自动化场景需使用API令牌或SSH密钥: <syntaxhighlight lang="bash"> # 使用curl调用Jenkins API curl -u username:api_token http://jenkins.example.com/job/test/build </syntaxhighlight> 输出示例: ```json { "status": "success", "data": { "queueId": 12345 } } ``` == 安全最佳实践 == 1. 强制启用HTTPS 2. 定期轮换API令牌(可通过`/me/configure`页面管理) 3. 使用Project-based Matrix Auth插件实现项目级权限 4. 审计日志分析(日志路径:`$JENKINS_HOME/logs/access_log`) == 故障排查 == 常见问题及解决方案: '''问题:''' LDAP用户无法登录<br> '''检查:''' * 网络连通性(telnet ldap.server 389) * 绑定DN是否正确 * 使用[LDAP测试工具]验证查询 '''问题:''' API令牌失效<br> '''解决:''' <syntaxhighlight lang="groovy"> // 重置令牌 def user = User.get("username") user.setApiToken(null) user.save() </syntaxhighlight> == 进阶配置 == === 双因素认证 === 通过Google Authenticator插件实现: <math> TOTP = HMAC-SHA1(K, \floor(T/30)) </math> 其中: * K = 共享密钥 * T = Unix时间戳 === 安全头配置 === 在`/script`执行Groovy增强安全性: <syntaxhighlight lang="groovy"> System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self'; script-src 'unsafe-inline'") </syntaxhighlight> == 实际案例 == '''场景:''' 电商公司部署流水线权限控制<br> '''需求:''' * 开发团队可触发构建但不可改配置 * 运维团队可管理节点但不可删构建记录 * QA团队只读访问测试环境任务 '''实现:''' 1. 配置LDAP集成AD域控 2. 使用Role-based插件创建角色: * developer(Job/Build, Job/Read) * ops(Computer/Create, Computer/Delete) 3. 设置文件夹级权限继承 == 参见 == * [[Jenkins访问控制]] * [[Pipeline权限管理]] * [[凭证管理最佳实践]] [[Category:集成部署]] [[Category:Jenkins]] [[Category:Jenkins安全]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)