将非 root 用户拥有的脚本保存在 /etc/init.d 中有多安全?

Aka*_*aks 15 linux init.d

我有一个应用程序,它作为守护进程运行,并由 /etc/init.d 中的脚本控制
有时我们需要更改这些脚本的启动/控制的一些参数,然后重新启动守护进程。这些脚本只有 root 用户的写权限,所以在编辑这些脚本时我需要 root 权限。

我在想的是,我应该让非 root 用户成为这些脚本的所有者。这样只有 root 和特殊用户才能编辑这些脚本。

在 /etc/init.d 目录下保留一些非 root 拥有的文件是否可以接受?
还是荒谬的,扰乱了系统的自然秩序?

Tim*_*ost 17

立即想到的是一个弱势用户能够以root 身份在启动时运行东西,这对破解者来说是可取的:

  • 想提升其他账号的权限
  • 想要使用您的服务器来托管流氓服务
  • 如果服务器重新启动,想要启动 IRC/垃圾邮件机器人
  • 想要 ping 一艘母船说“我又起来了”,也许下载一个新的有效载荷
  • 想要清理他们的踪迹
  • ……其他坏处。

如果您的弱势用户以某种方式受到损害,可能是通过其他服务 (http/etc),这是可能的。大多数攻击者会快速运行一个ls或一个find/所有的东西,/etc只是为了看看是否存在这种可能性,他们使用各种语言编写的 shell 使这变得简单。

如果您远程管理服务器,主要是通过 SSH,除非您检查 init 脚本,否则很有可能您甚至看不到这一点,因为您不会在启动时看到输出(不过,您应该使用一些根据已知哈希检查这些脚本的哈希值,以查看是否有更改,或版本控制软件等)

您绝对不希望这种情况发生,root 确实需要拥有该 init 脚本。您可以将开发用户添加到 sudoers 列表中,这样更新脚本就足够方便了,但我建议不要允许对 init.d 中的任何内容进行低权限写访问

  • *tl;dr*:如果你这样做,非 root 用户在下次启动时与 root 用户一样好。你乞求被掠夺。 (5认同)

Jen*_*y D 9

除了 Tim Post 提出的非常好的观点之外,我还要补充一点,对于需要多人将更改推送到服务器的设置,您应该考虑使用某种配置管理系统。

例如,如果您使用 puppet、chef 或 cfengine,您可以让相关用户在本地编辑文件,然后使用配置管理推送更改。确切的设置方式当然会因您使用的系统而异,但正确设置它将包括版本控制软件,以便在(注意:,而不是如果!)有人犯了一个错误。它还可以让您更轻松地将配置复制到单独的测试系统等。