用户与权限 #
用户和权限管理是Jenkins安全的核心,本节将详细介绍如何管理用户和配置权限。
用户管理 #
创建用户 #
通过界面创建 #
- 进入 Manage Jenkins
- 点击 Manage Users
- 点击 Create User
- 填写用户信息:
- Username: 用户名
- Password: 密码
- Confirm password: 确认密码
- Full name: 全名
- Email address: 邮箱
通过脚本创建 #
groovy
import jenkins.model.*
import hudson.security.*
def instance = Jenkins.getInstance()
def hudsonRealm = new HudsonPrivateSecurityRealm(false)
hudsonRealm.createAccount("username", "password")
instance.setSecurityRealm(hudsonRealm)
instance.save()
用户配置 #
修改密码 #
- 点击右上角用户名
- 点击 Configure
- 在 Password 区域修改密码
配置API Token #
- 点击右上角用户名
- 点击 Configure
- 在 API Token 区域
- 点击 Add new Token
- 输入名称并生成
配置邮箱 #
- 点击右上角用户名
- 点击 Configure
- 在 Email 区域配置邮箱
删除用户 #
- 进入 Manage Jenkins
- 点击 Manage Users
- 点击用户名
- 点击左侧 Delete
权限模型 #
权限类型 #
| 权限类别 | 权限 | 说明 |
|---|---|---|
| Overall | Read | 查看Jenkins首页 |
| Overall | Administer | 完全管理权限 |
| Overall | SystemRead | 查看系统配置 |
| Overall | SystemRead | 查看系统信息 |
| Job | Read | 查看任务 |
| Job | Build | 触发构建 |
| Job | Configure | 配置任务 |
| Job | Create | 创建任务 |
| Job | Delete | 删除任务 |
| Job | Workspace | 访问工作空间 |
| Job | Cancel | 取消构建 |
| Run | Delete | 删除构建记录 |
| Run | Update | 更新构建描述 |
| Run | Replay | 重放构建 |
| SCM | Tag | 创建标签 |
| Credentials | View | 查看凭据 |
| Credentials | Create | 创建凭据 |
| Credentials | Update | 更新凭据 |
| Credentials | Delete | 删除凭据 |
| Agent | Build | 在Agent上构建 |
| Agent | Configure | 配置Agent |
| Agent | Connect | 连接Agent |
| Agent | Create | 创建Agent |
| Agent | Delete | 删除Agent |
授权策略 #
任何人可以做任何事 #
text
Authorization: Anyone can do anything
最不安全的策略,不推荐生产环境使用。
登录用户可以做任何事 #
text
Authorization: Logged-in users can do anything
登录用户拥有所有权限,匿名用户只能查看。
安全矩阵 #
text
Authorization: Matrix-based security
通过矩阵配置每个用户/组的权限。
配置示例 #
text
Anonymous admin developer viewer
Overall/Read ✓ ✓ ✓ ✓
Overall/Administer ✓
Job/Read ✓ ✓ ✓
Job/Build ✓ ✓
Job/Configure ✓ ✓
Job/Create ✓ ✓
Job/Delete ✓
Credentials/View ✓ ✓
Credentials/Create ✓
项目矩阵授权 #
text
Authorization: Project-based Matrix Authorization Strategy
在全局和项目级别配置权限。
全局配置 #
text
Manage Jenkins → Configure Global Security
项目配置 #
text
Job Configuration → Enable project-based security
角色策略 #
安装 Role-Based Strategy 插件后可用。
text
Authorization: Role-Based Strategy
角色权限管理 #
安装插件 #
安装 Role-Based Strategy 插件。
管理角色 #
- 进入 Manage Jenkins
- 点击 Manage and Assign Roles
- 点击 Manage Roles
全局角色 #
创建全局角色:
text
角色名: admin
权限:
- Overall/Administer
- Overall/Read
角色名: developer
权限:
- Overall/Read
- Job/Read
- Job/Build
- Job/Configure
- Job/Create
- Job/Workspace
- Run/Update
- Run/Cancel
- SCM/Tag
角色名: viewer
权限:
- Overall/Read
- Job/Read
项目角色 #
创建项目角色:
text
角色名: dev-projects
Pattern: dev-.*
权限:
- Job/Read
- Job/Build
- Job/Configure
- Job/Workspace
角色名: prod-projects
Pattern: prod-.*
权限:
- Job/Read
- Job/Build
分配角色 #
- 进入 Manage Jenkins
- 点击 Manage and Assign Roles
- 点击 Assign Roles
分配全局角色 #
text
用户名 角色
admin admin
developer1 developer
developer2 developer
viewer1 viewer
分配项目角色 #
text
用户名 角色
developer1 dev-projects
developer2 dev-projects
admin prod-projects
权限脚本 #
列出所有用户权限 #
groovy
import jenkins.model.*
import hudson.security.*
import hudson.model.*
def instance = Jenkins.getInstance()
def authStrategy = instance.getAuthorizationStrategy()
println "Users and their permissions:"
instance.securityRealm.allUsers.each { user ->
println "\nUser: ${user.id}"
authStrategy.getGrantedPermissions().each { permission, principals ->
if (principals.contains(user.id)) {
println " ${permission.id}"
}
}
}
批量分配角色 #
groovy
import jenkins.model.*
import hudson.security.*
import com.michelin.cio.hudson.plugins.rolestrategy.*
import com.michelin.cio.hudson.plugins.rolestrategy.permissions.*
def instance = Jenkins.getInstance()
def rs = instance.getAuthorizationStrategy()
def developers = ['dev1', 'dev2', 'dev3']
developers.each { username ->
rs.assignRole(RoleType.Global, 'developer', username)
}
instance.save()
移除用户权限 #
groovy
import jenkins.model.*
import hudson.security.*
def instance = Jenkins.getInstance()
def rs = instance.getAuthorizationStrategy()
rs.unassignRole(RoleType.Global, 'developer', 'dev1')
instance.save()
用户组 #
LDAP组 #
使用LDAP时,用户组自动从LDAP同步。
text
Security Realm: LDAP
Group search base: ou=groups
Group search filter: cn={0}
Group membership: Search for groups containing user
GitHub团队 #
使用GitHub OAuth时,可以使用GitHub团队。
text
Authorization: GitHub Committer Authorization Strategy
Admin User Names: admin1, admin2
Admin Team Names: admin-team
Organization Names: my-org
权限最佳实践 #
1. 最小权限原则 #
只授予用户完成工作所需的最小权限。
2. 使用角色管理 #
通过角色管理权限,而不是直接分配给用户。
3. 定期审计 #
定期审计用户权限,移除不必要的权限。
4. 分离职责 #
- 管理员:系统配置
- 开发者:任务配置和构建
- 运维:生产部署
- 查看者:只读访问
5. 生产环境保护 #
对生产环境任务设置更严格的权限。
常见场景 #
场景1:开发团队 #
text
全局角色:
developer: Job/Read, Job/Build, Job/Configure, Job/Workspace
项目角色:
dev-.*: 所有Job权限
test-.*: Job/Read, Job/Build
场景2:运维团队 #
text
全局角色:
ops: Overall/Read, Job/Read, Agent/Build, Credentials/View
项目角色:
prod-.*: Job/Read, Job/Build
staging-.*: Job/Read, Job/Build, Job/Configure
场景3:只读用户 #
text
全局角色:
viewer: Overall/Read, Job/Read
下一步学习 #
小结 #
- 用户管理是安全的基础
- 使用角色简化权限管理
- 遵循最小权限原则
- 定期审计用户权限
- 分离不同环境的权限
- 使用脚本批量管理权限
最后更新:2026-03-28