在非 root 用户帐户下运行守护程序是一个好习惯吗?

Ano*_*223 14 security daemon access-control

我开发了一个应用程序,它使用 NTP 来更改网络时间,以同步我的两台计算机。它运行为root,因为在 Linux 上只允许后者更改时间和日期(我猜)。

现在,我想以用户身份运行它。但是,我需要访问时间。

  • 在非 root 用户帐户下运行守护程序是一个好习惯吗?
  • 我给我的应用程序的能力,如CAP_SYS_TIME
  • 它不会引入安全漏洞吗?
  • 有没有更好的办法?

小智 15

在非 root 用户帐户下运行守护程序是一个好习惯吗?

是的,这很常见。例如,Apache 以 root 身份启动,然后将新进程派生为www-data(默认情况下)。
如前所述,如果您的程序被黑客入侵(例如:代码注入),攻击者将无法获得 root 访问权限,但将仅限于您授予该特定用户的权限。

我应该给出一个“能力”,比如“CAP_SYS_TIME”吗?

这是一个好主意,因为您避免使用setuid,并限制对这个非常具体的功能的权限。

我是否应该使用另一种方式来做到这一点,这将被视为“良好做法”?

您可以提高安全性,例如:

  • 以非特权用户身份运行服务,没有外壳。
  • 使用chroot将用户锁定在其主目录中。


小智 13

  • 我是否应该使用另一种方式来做到这一点,这将被视为“良好做法”?

除非你有强有力的、无可辩驳的理由,否则你应该只使用你的 GNU/Linux 发行版附带的 NTP 包。标准的 NTP 守护进程已经花费数年时间成熟,并具有复杂的功能,例如减慢或加快系统时钟以使其与网络或 GPS 时钟同步。它是为同步时钟量身定制的,因此它很可能为此目的的最佳工具。

ntpd从最近的更新来看(在撰写本文时),它仍在维护中。如果您需要更多功能,我建议您直接联系开发人员,相信他们对此的看法。


G-M*_*ca' 5

如果您有一个程序需要能够执行函数X (例如,操纵时钟),并且您可以赋予它执行函数X的特权/权力而不是其他任何东西,那么这比给它完整的字母表要好汤。这被称为最小特权原则。考虑一下,如果您的程序有错误 - 一个普通的编程错误或一个可利用的安全漏洞怎么办。如果它以“root”身份运行,它可能会删除每个人的文件——或者将它们发送给攻击者。如果程序唯一能做的就是操纵时钟(以及非特权功能,例如操纵锁定目录中的文件),那么如果程序变得流氓,这就是最糟糕的情况。