在没有root权限的情况下,如何更改Linux系统时间



我的场景如下:我有一个C++应用程序,它访问无线电接收器以从中获取时间信号,然后根据无线电信号的时间更新系统时间。为了安全起见,应用程序不应以root权限运行。在阅读了论坛帖子中的这条建议后,我尝试了如下代码片段:

tm              current_time;
struct timeval *epoch         = new timeval;
// current_time is filled with time data from the radio tuner here.
epoch -> tv_sec  = mktime (&current_time);
epoch -> tv_usec = 0;
if (difftime (epoch -> tv_sec, mktime (&this -> last_system_time_update)) > (time_t) receiver::SYSTEM_TIME_UPDATE_INTERVAL) {
retval += setgid       ((uid_t) 0);
retval += setuid       ((uid_t) 0);
retval += prctl        (PR_SET_KEEPCAPS, 1L, 0L, 0L, 0L);
retval += setgid       (group_id);
retval += setuid       (user_id);
retval += settimeofday (epoch, NULL);
}

与建议相反,当我不以root身份运行它时,这个片段将不起作用。我总是得到errno=1。

这里怎么了?还有:有变通办法吗?

您仍在尝试获得root权限。如果您有CAP_SYS_TIME功能,那么您只需要设置日期的时间((。

if (difftime (epoch -> tv_sec, mktime (&this -> last_system_time_update)) > 
(time_t) receiver::SYSTEM_TIME_UPDATE_INTERVAL) {
retval += settimeofday (epoch, NULL);
}

相关内容

  • 没有找到相关文章

最新更新