用户与权限 #

用户和权限管理是Jenkins安全的核心,本节将详细介绍如何管理用户和配置权限。

用户管理 #

创建用户 #

通过界面创建 #

  1. 进入 Manage Jenkins
  2. 点击 Manage Users
  3. 点击 Create User
  4. 填写用户信息:
    • 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()

用户配置 #

修改密码 #

  1. 点击右上角用户名
  2. 点击 Configure
  3. Password 区域修改密码

配置API Token #

  1. 点击右上角用户名
  2. 点击 Configure
  3. API Token 区域
  4. 点击 Add new Token
  5. 输入名称并生成

配置邮箱 #

  1. 点击右上角用户名
  2. 点击 Configure
  3. Email 区域配置邮箱

删除用户 #

  1. 进入 Manage Jenkins
  2. 点击 Manage Users
  3. 点击用户名
  4. 点击左侧 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 插件。

管理角色 #

  1. 进入 Manage Jenkins
  2. 点击 Manage and Assign Roles
  3. 点击 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

分配角色 #

  1. 进入 Manage Jenkins
  2. 点击 Manage and Assign Roles
  3. 点击 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