以非根用户身份运行 ntpdate

Running ntpdate as non root user

本文关键字:运行 ntpdate 身份 用户      更新时间:2023-10-16

我正在尝试编写一个将侦听消息的代码,并在每次收到消息时强制ntp同步(使用ntpdate命令(。

该代码是用 C++ 编写的,在 Ubuntu 14.04 上,运行正常。但是系统命令每次都会失败,因为它没有 root 权限。

这段代码假设在系统启动时自动启动,所以我不能只用"sudo"运行可执行文件。搜索互联网后,我发现的唯一解决方案是以root用户身份登录,但这会影响安全性。

我知道 ntp 守护进程以根权限运行,但我不确定它是如何实现的。

您知道有什么方法可以在不影响安全性的情况下以root权限运行C ++代码吗?

  • NTP 守护程序以根权限运行,因为它是在根帐户下启动的。

  • 通常,作为守护进程运行的程序是在root帐户下启动的;其中一些程序通过调用setuid()seteuid()等自愿放弃root权限。

  • 您始终可以为该程序创建一个专用帐户并在该帐户下运行它,

    • 要么通过将其设置为该帐户的 setuid,
    • 或使用sudo -u
    • 或者,如果从systemd单元文件启动守护程序,则通过在单元描述文件中指定user=group=

    然后,您可以编辑/etc/sudoers以允许该帐户以ntpdate运行,并且仅以 root 身份ntpdate运行,而无需密码。