Jenkins Job Configure权限命令执行测试
- 2 mins0x01 简介
最近在测试的过程中,发现一个 Jenkins 允许匿名用户查看 Job
,并且拥有 Job
的 Configure
权限,但没有 Build
权限,无法通过在 Job
页面点击 Build Now(立即构建)
来触发命令的执行,研究了一下,这里还可以通过 Configure
页面 Build Triggers
的 Build periodically
选项,即周期构建功能来触发构建,这里记录一下本地复现的过程
0x02 环境搭建
Jenkins 测试版本为2.60.3
,使用 docker 搭建
docker run -p 18080:8080 -p 50000:50000 --name=jenkins jenkins:2.60.3
运行后 console 会输出如下内容
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
f9179271ec10492cb2606b1bd327414d
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
其中 f9179271ec10492cb2606b1bd327414d
为安装时需要的 password
访问 http://127.0.0.1:18080/login?from=%2F,填入 password
,点击 continue
然后选择 Install sugguested plugins
,会安装需要的插件,安装过程需要一定时间
插件安装完成后,需要设置 Admin User
的用户名和密码,这里设置为 root/root
,点击 Save and Finish
默认安装的情况下,匿名用户是没有任何权限的,这里修改配置,让匿名用户只拥有 查看Job、Job Configure 权限
点击 Manage Jenkins
- Configure Global Security
修改 Access Control
- Authorization
部分的配置,选择 Project-based Matrix Authorization Strategy
这里需要添加一个 root 用户,步骤为在 User/group to add:
填入 root
,然后点击 Add
,移到最右侧,点击 ✔️,让 root 用户拥有所有权限,此步非常重要,不然保存后会导致 admin is missing the Overall/Read permission
错误
匿名用户勾选 Overall
的 Read
权限,Job
的 Configure
和 Read
权限,如下图:
点击保存,然后访问 http://127.0.0.1:18080/newJob,创建一个 Job,名称填 Test
,类型选择 Freestyle project
点击 Save
,创建成功后如下图:
0x03 执行命令
退出 或 开隐私模式,访问 http://127.0.0.1:18080/,可以看到匿名用户可以查看 Job
,点击后,可以看到匿名用户拥有 Configure
权限
按照 五、低权限用户命令执行突破 中的说明,点击 Configure
,在 Build
部分选择 Execute shell
在 Command
中填入要执行的命令
id
uname -a
然后点击 Apply
,保存后需要回到 Job
页面,点击 左上侧的立即构建,才可以触发命令的执行,原文中图片为
因为这里的匿名用户是没有 Build
权限,即 Job
的页面中是没有 立即构建(Build Now)
按钮,所以这里无法通过点击 立即构建
来触发命令的执行。
通过查看 Configure
页面的选项,得知在 Build Triggers
部分可以设置任务 Build 的触发规则,其中有一个 Build periodically
,可以通过类似 Crontab
时间规则来触发,这里填入
*/1 * * * *
即每分钟执行一次 Build
,点击 Save
回到 Job
页面,等待一会,在左侧 Build History
可以看到,每分钟都会执行一次 Build
,这里点击查看 Console Output
可以看到命令执行成功