使用 Jenkins 或 Phing 重新启动 nginx - 允许 Jenkins 在不提示输入密码的情况下运行 sudo 是否安全

信息安全 密码 linux php 网络服务器 nginx
2021-08-29 18:11:41

我正在为我自己的 PHP 项目实施Integrating PHP projects with Jenkins中的建议。

我在我的 ubuntu 12.10 服务器中创建了一个 jenkins 用户。我使用 Phing 作为我的构建工具,我在构建过程中有一个步骤,我需要使用 sudo 重新启动我的 nginx。

根据这个解决方案,它建议允许詹金斯在没有密码的情况下使用sudo。

而且,它并不完全确定这种安排的安全影响。

我想问我是否应该继续这个安排。

我将 jenkins 安装在与生产代码相同的服务器上。

2个回答

链接的解决方案允许 jenkins 在没有密码的情况下运行任何命令sudo

一个更好的解决办法是让jenkins不用密码重启nginx,别的什么都没有。这样,您对需要执行的命令具有 root 权限,但您并没有授予 jenkins 执行任何操作的一揽子权限。

用于visudo将其粘贴在sudoers文件的底部:

Defaults:jenkins !requiretty,!lecture
jenkins ALL=NOPASSWD:/etc/init.d/nginx

为什么必须在开发服务器上以 root 身份运行 nginx?以普通用户身份运行它,这样 jenkins 就可以在没有 root 权限的情况下重新启动它。

另外,“jenkins 与生产代码在同一台服务器上”是什么意思?如果您的意思是您的生产应用程序实际上是在您的开发服务器上运行:这是一个坏主意(出于安全和性能原因),您应该尽快更改它。

编辑以回答后续问题:

我建议使用两台服务器,一台生产服务器和一台运行 jenkins、您的 SCM 等的服务器……如果您是唯一的开发人员,如果您愿意,第二台也可以作为您的开发工作站。不,您不需要以 jenkins 用户身份运行 nginx,您只需要一个允许 jenkins 重新启动 nginx 的配置(例如,jenkins 和 nginx-restart-script 的同一组以及 rwxr-x --- 权限或类似的)。