![将 /etc 下的配置文件的权限更改为非 root 用户是否存在潜在的陷阱?](https://linux22.com/image/782190/%E5%B0%86%20%2Fetc%20%E4%B8%8B%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9A%84%E6%9D%83%E9%99%90%E6%9B%B4%E6%94%B9%E4%B8%BA%E9%9D%9E%20root%20%E7%94%A8%E6%88%B7%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%E6%BD%9C%E5%9C%A8%E7%9A%84%E9%99%B7%E9%98%B1%EF%BC%9F.png)
我们的机器上运行着各种服务,例如 cassandra、datadog 等。
有时,我们需要更改配置,并且我们希望自动传播配置文件并重新启动。
我们使用 Jenkins 来自动化应用软件的工作流程,并考虑将其用于服务。我们不希望 Jenkins 运行的服务器具有对主机服务器的远程 root(甚至 sudo)访问权限。
我想知道我们是否可以安全地将 /etc/cassandra 的所有者更改为 cassandra,将 /etc/datadog 的所有者更改为 dd-agent 等,因为这将有助于我们实现自动化。(实际上,建议将此类文件夹/文件应该由适当的用户拥有,并且以 root 作为所有者是错误的?)
答案1
这个目录的想法是,/etc
目录包含所有全系统配置 - 与每个单独的用户配置相对,在大多数情况下,该配置位于下面的$HOME/.config
某个位置。由于系统范围的配置会影响所有用户,因此这些文件归 root 所有是正确的。
现在,我不知道您的系统,但您可能每个系统都运行一次 cassandra 等,因此您可能不需要单独的用户配置文件。我认为更改这些文件/子目录的所有权没有任何缺陷,除非它与设计方式相矛盾。(只要您不更改主目录的所有权/etc
!)
就我个人而言,我会设置一个实例目录(可能在其主文件夹中),并使用存储在其中的配置 - 但这取决于您。
答案2
Root 不应是与应用程序相关的 etc 配置文件的所有者。优雅的解决方案应该是这样的:datadog 应用程序由用户 datadog 运行,配置文件由 datadog 和组 datadog 拥有。但现在 jenkins 出现了,需要查看/编辑 /etc/datadog 中的某些文件,但可能不是全部。
因此,我们创建了一个名为“datadogjenkins”的新组,并将 datadog 和 jenkins 都设为该组的成员。然后,我们将 jenkins 需要读取/写入/执行的文件/文件夹的所有者组更改为我们的新组。
现在,datadog 和 jenkins 都可以访问这些资产。而且它们都不需要将权限提升到 root。而且我们可以阻止 jenkins 查看它不需要查看的内容,以防 jenkins 受到攻击。
希望这足以解释这一点。