jenkins - Jenkins 管道脚本中的 sudo
问题描述
我们有以下设置:
- 我们的 UNIX 机器很少。
- 为这些框提供了用户(例如:spande)。
- 这些用户的权限有限,但可以执行 sudo 来提升权限(sudo user: admin)。
- sudo 在没有任何密码的情况下发生。
我们在 Jenkins 中有一个 CICD 工具,它使用这些 Unix 盒子作为奴隶。我们拥有通过 Jenkins 登录到这个 unix 服务器的spande凭据。
我们正在使用 Jenkins 流水线脚本(groovy)。一切都很好,但我们希望 Jenkins 脚本以更高的权限运行,因此需要知道:
- 我们如何在 Jenkins 脚本中执行 sudo?(须藤苏 - 管理员)
- 这是脚本中 sudo 的最佳实践/好方法吗?如果没有,我们还有什么其他选择?(由于组织政策,我们的 Unix 服务器团队尚未准备好创建具有更高权限的启用密码的用户)
任何帮助表示赞赏!
解决方案
一般来说sudo
,作为脚本的一部分使用是可以的,只要您没有授予比您需要的更高的权限。su - admin
通常最好弄清楚 Jenkins 需要以管理员身份运行哪些命令并将这些命令直接放入您的 sudoers 文件中,而不是运行它。
假设您需要admin
作为 Jenkins 工作的一部分以用户身份运行以下程序:
/usr/bin/execute
/home/admin/calculate
/opt/synergize
您的 sudoers 文件可能如下所示(假设您的 Jenkins 用户是jenkins
):
jenkins ALL = (admin) NOPASSWD: /usr/bin/execute, /home/admin/calculate, /opt/synergize
这将允许jenkins
用户在没有密码的情况下运行以下命令:
sudo -u admin /usr/bin/execute
sudo -u admin /home/admin/calculate
sudo -u admin /opt/synergize
从安全的角度来看,这比提供su - admin
访问更可取,因为这样就可以在没有任何实际限制的情况下jenkins
做任何事情。admin
sudoers 文件非常灵活,您应该能够限制 jenkins,同时仍然允许它完成它需要做的工作。
推荐阅读
- javascript - 为什么请求正文未定义?
- amazon-web-services - 无法在 ubuntu AWS EC2 服务器上访问 nginx
- java - 使用 S3 和 java 如何为下面的 fileUpload 方法编写 junit 测试
- powershell - Powershell - 保存加密用户并传入脚本?
- python - 从 python 模块返回变量
- javascript - React axios response.json 不是函数
- python - 使用带有默认值的 SQL-ALCHEMY 插入行 Postgresql
- apache - 我应该怎么做才能修复 Apache 上的 HTTP 请求走私?
- java - 即使在 Eclipse 中进行 Maven 更新后也无法导入依赖项
- ubuntu-18.04 - 如何修复出现在 Eclipse 中的 ns3 的“程序”/waf“未在 PATH 中找到”错误?