我使用SSH上发布插件将我的应用程序从Jenkins部署到不同的环境。一些部署作业会进行环境准备,诸如停止并重新启动应用程序服务器系统服务之类的事情。其中一些命令需要sudo

我很好奇,如果在远程发布和执行Jenkins作业中要求sudo可能是不良的安全实践。我们是否应该更改目标主机上的安全策略以允许无需sudo即可执行所需的功能?

#1 楼

不,当您需要更高级别的特权时,对sudo来说实际上是一种很好的安全实践。这就是大多数发行版禁止默认登录并实际上迫使您使用sudo su而不是仅键入su的原因-他们想鼓励您使用sudo以获得安全性。原因如下:


审核。进行sudo时,系统会记录谁进行了sudo以及他们运行的命令。当您需要回头找出发生了什么事情-指责,进行恶意活动或仅用于故障排除时,这在法医上增加了很多(在昨晚7PM发生在该服务器变为AWOL之前,到底发生了什么?)
须藤规则。仅仅因为用户需要使用已升级的特权来运行某些内容,并不意味着他们需要使用已升级的特权来运行所有操作。使用su或将用户添加到wheel允许用户执行所有操作。但是,使用sudo可以使用允许使用通配符的命令别名来指定用户可以做什么和不能做什么,从而允许灵活的规则允许用户特权使用某些命令,而不能使用其他命令。
强化。可以禁用root。同样,出于所有目的和目的,它并不存在,仅在单用户模式下有用/可用-需要重启服务器(允许这样做的唯一原因是密码恢复)。 sudo su不再起作用。这是通过将root用户的shell设置为/ bin / nologin来完成的。这是防止许多根升级漏洞的好方法。当然,这是假设您正确使用了上面的项目符号(并且您仍然可以向特定的管理员用户授予所有权限,尽管这会破坏您的安全性)。

这些当然只是安全模型的一部分。
例如,除非您没有具有完全管理特权的用户(有时甚至是那时),否则您的用户可能(可能)删除日志和历史记录-除非您使用日志服务器和syslog出厂时将日志发送出去。那就没有办法把那只猫放回书包里了。当然,如果您使用中央身份验证目录结构,那么它会重新发挥作用:如果我破坏了一个帐户,则该帐户将在组织中的所有服务器(包括您的日志服务器)上也受到破坏。

简而言之,安全性很复杂,但是sudo是设计安全环境的好工具,并且更多的人应该充分利用它。

#2 楼

无论您允许远程sudo还是远程访问SUID root的功能,您都有非常相似的攻击面。我会将sudo保留在链中,因为它使您可以轻松地限制命令,并具有日志记录,这对于以后需要审核的内容至关重要。 sudo在生产中的历史也更长。进行其他操作将减少历史记录,并增加令人不愉快的意外变化。

您还可以通过其他方法使操作更安全:


收紧ssh
仅允许几个特定用户的重启命令,其中包括jenkins的重启命令
仅允许所有内部IP或jenkins和跳转盒IP的特定用户登录
在远程邮箱上登录,这样它们就不会与

混在一起

评论


实际上,我只是配置了SSH作业,它不想运行sudo:“ sudo:抱歉,您必须有一个tty才能运行sudo”

–两栖动物
17-10-19在18:08

您可能需要给ssh -t选项。或者说服sudo不需要unix.stackexchange.com/questions/122616/…

–小鸡
17-10-19在18:50

从Jenkins调用SSH时,如何为SSH提供选项?

–两栖动物
17-10-20在14:57

对此我不确定。如链接所示,您是否尝试过调整sudo?

–小鸡
17-10-20在15:23

我通过将远程主机(SSH目标)上的sudoers更改为不需要tty来启用了来自Jenkins的sudo(注释为Defaults requiretty)

–两栖动物
17-10-20在21:18