首页 > 解决方案 > Jenkins 管道脚本中的 sudo

问题描述

我们有以下设置:

  1. 我们的 UNIX 机器很少。
  2. 为这些框提供了用户(例如:spande)。
  3. 这些用户的权限有限,但可以执行 sudo 来提升权限(sudo user: admin)。
  4. sudo 在没有任何密码的情况下发生。

我们在 Jenkins 中有一个 CICD 工具,它使用这些 Unix 盒子作为奴隶。我们拥有通过 Jenkins 登录到这个 unix 服务器的spande凭据。

我们正在使用 Jenkins 流水线脚本(groovy)。一切都很好,但我们希望 Jenkins 脚本以更高的权限运行,因此需要知道:

  1. 我们如何在 Jenkins 脚本中执行 sudo?(须藤苏 - 管理员
  2. 这是脚本中 sudo 的最佳实践/好方法吗?如果没有,我们还有什么其他选择?(由于组织政策,我们的 Unix 服务器团队尚未准备好创建具有​​更高权限的启用密码的用户)

任何帮助表示赞赏!

标签: jenkinsgroovysudo

解决方案


一般来说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做任何事情。adminsudoers 文件非常灵活,您应该能够限制 jenkins,同时仍然允许它完成它需要做的工作。


推荐阅读