我已经开发了一个使用NTP更改网络时间,同步两台计算机的应用程序。它运行为root
,因为在Linux上仅允许后者更改时间和日期(我想)。
现在,我想以用户身份运行它。但是,我需要获取时间。
- 在非root用户帐户下运行守护程序是否是一种好习惯?
- 我应该为我的应用程序提供诸如以下的功能
CAP_SYS_TIME
吗? - 它不会引入安全漏洞吗?
- 有没有更好的办法?
我已经开发了一个使用NTP更改网络时间,同步两台计算机的应用程序。它运行为root
,因为在Linux上仅允许后者更改时间和日期(我想)。
现在,我想以用户身份运行它。但是,我需要获取时间。
CAP_SYS_TIME
吗?Answers:
在非root用户帐户下运行守护程序是否是一种好习惯?
是的,这很普遍。例如,Apache以root身份启动,然后以www-data的形式派生新进程(默认情况下)。
如前所述,如果您的程序被黑客入侵(例如,代码注入),则攻击者将无法获得root用户访问权限,但仅限于您授予该特定用户的特权。
我是否要提供“功能”,例如“ CAP_SYS_TIME”?
这是一个好主意,因为您避免使用setuid,并且将权限限制为非常特定的功能。
我是否可以使用另一种方式将其视为“良好做法”?
您可以提高安全性,例如:
USER
到目录中,可以使用chroot
(以root用户身份运行)。但是,您必须先创建并初始化一个监狱(目录)。简而言之,您必须将流程所需的库和二进制文件放入此监狱,然后调用chroot <path/to/jail> <command>
。此处
- 我是否可以使用另一种方式将其视为“良好做法”?
除非您有强烈的,无可辩驳的理由,否则,您应该只使用GNU / Linux发行版随附的NTP软件包。标准的NTP守护程序已经花费了多年的时间,并具有复杂的功能,例如减慢或加快系统时钟使其与网络或GPS时钟同步。它是为同步时钟而量身定制的,因此很可能是围绕此目的的最佳工具。
ntpd
根据最近的更新(撰写本文时),仍保持不变。如果您需要更多功能,建议您直接与开发人员联系,请相信他们对此有何评论。
如果您有一个需要执行功能X的程序 (例如,操纵时钟),并且可以赋予它执行功能X的特权/权力,而没有其他任何事情,那将比给它完整的字母更好汤。这就是最小特权原则。考虑一下,如果您的程序有错误-普通的编程错误或可利用的安全漏洞,该怎么办。如果它以“ root”身份运行,则可能会删除每个人的文件,或者将其发送给攻击者。如果程序唯一能做的就是操纵时钟(以及非特权功能,如操纵锁定目录中的文件),那么如果程序变坏,那将是最糟糕的情况。
ntp
用户帐户运行(至少在Linux系统上),因此不需要您进行此更改。您安装了什么NTP软件包?