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


13

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

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

  • 在非root用户帐户下运行守护程序是否是一种好习惯?
  • 我应该为我的应用程序提供诸如以下的功能CAP_SYS_TIME吗?
  • 它不会引入安全漏洞吗?
  • 有没有更好的办法?

通常,NTP守护程序应该以ntp用户帐户运行(至少在Linux系统上),因此不需要您进行此更改。您安装了什么NTP软件包?

6
在非root用户帐户下运行守护程序称为“放弃root特权”,这是一种众所周知的良好做法,因为它可以限制守护程序中安全漏洞的潜在损害。

1
请参阅Wikipedia中的“ 特权分离 ”。
库桑兰达

我已经从源代码中编译了NTP。我没有NTP组
Anonymous12223

@xhaltar您可以创建NTP组和用户。要配置服务(用户,组等)的启动方式,可以创建/编辑服务初始化脚本,也可以创建/配置systemd单元。
2015年

Answers:


15

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

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

我是否要提供“功能”,例如“ CAP_SYS_TIME”?

这是一个好主意,因为您避免使用setuid,并且将权限限制为非常特定的功能。

我是否可以使用另一种方式将其视为“良好做法”?

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

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

注意:如果您是root用户并在Linux上运行,则Chroot不提供任何安全性。root用户可以在chroot中创建目录,打开chroot的根目录,将chroot移至新目录,将chdir退回到真实根目录,然后将chroot转换为真实根目录。BSD通过不允许将目录fd放入chroot来解决此问题。
凯文

@Kevin如果您是root用户,还可以在chroot之外ptrace进程,还有许多其他方法可以绕过它。区区的chroot不能保持在根目录下。
吉尔“SO-停止作恶”

//,出于安全原因,emp.jar.st实际上为自己创建了一个用户。很好的做法。
弥敦道(Nathan Basanese),2015年

等待,如果我是USER,可以将USER锁定到特定目录吗?如“ / opt”(例如)?
Anonymous12223

@xhaltar要将运行的进程锁定USER到目录中,可以使用chroot(以root用户身份运行)。但是,您必须先创建并初始化一个监狱(目录)。简而言之,您必须将流程所需的库和二进制文件放入此监狱,然后调用chroot <path/to/jail> <command>此处
Pl4nk 2015年

13
  • 我是否可以使用另一种方式将其视为“良好做法”?

除非您有强烈的,无可辩驳的理由,否则,您应该只使用GNU / Linux发行版随附的NTP软件包。标准的NTP守护程序已经花费了多年的时间,并具有复杂的功能,例如减慢或加快系统时钟使其与网络或GPS时钟同步。它是为同步时钟而量身定制的,因此很可能围绕此目的的最佳工具。

ntpd根据最近的更新(撰写本文时),仍保持不变。如果您需要更多功能,建议您直接与开发人员联系,请相信他们对此有何评论。


5

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.