我编写了一个 C 程序,用于将时间与 GPS 接收器的时间同步。该计算机运行的是 Ubuntu 16.04 LTS。程序使用clock_settime(CLOCK_REALTIME, ×pec)来设置时间。该程序在 bash 脚本中执行,我无法使用 sudo,因为该脚本是通过使用桌面文件启动的。有人有主意吗?
注意:该脚本正在执行多个程序,我不想以 root 身份执行
答案1
能力可以成为解决方案。
在运行程序之前,您可以向程序添加 CAP_SYS_TIME 功能,如下所示。
sudo setcap CAP_SYS_TIME+ep /path/to/program
码头工人中的示例
sys@2a2618c145ed:~$ ./a_pr.out
clock_gettime : 1534915500.689625314
clock_gettime : 1534916100.690310388
clock_gettime : 1534915500.690651299
sys@2a2618c145ed:~$ ./test.run
clock_gettime : 1534915504.139181778
Error : clock_settime -1
clock_gettime : 1534915504.139337010
Error : clock_settime -1
clock_gettime : 1534915504.139341290
sys@2a2618c145ed:~$ filecap $(pwd)
file capabilities
/jeremy/a_pr.out sys_time
sys@2a2618c145ed:~$
另外,我想推荐以下页面:允许特定用户或组在没有密码的情况下 root 访问 /bin/date
下一个可能会更好。 sudo setcap CAP_SYS_TIME+ei /路径/到/程序