Как определить состояние связи NTP от имени пользователя без полномочий root - PullRequest
2 голосов
/ 05 апреля 2019

Я использую встроенный Linux. Необходимо знать из моего приложения, которое запускается не пользователем root, синхронизирован ли мой демон NTP.

Я попытался запустить ntpd, который поставляется с Busybox, следующим образом:

ntpd -n -p pool.ntp.org -q

но проблема в том, что для запуска требуются права суперпользователя, даже если я добавлю ntpd в /etc/busybox.conf [SUID]

Затем я также попробовал chronyd & chronyc. Схожая проблема, chronyd запускается пользователем root. Из соображений безопасности я также отключил сокеты интернет-команд (cmdport 0), а затем запустил chronyc от имени пользователя без полномочий root следующим образом:

chronyc waitsync

получил следующее сообщение об ошибке:

506 Cannot talk to daemon

Проверен код ntpstat, но он взаимодействует с chronyc или ntpd.

Мне интересно, есть ли доступное решение для этой задачи? Или, если нет, какие-либо предложения, как это можно сделать. Может быть, это можно сделать как-то из кода C? Но решение должно отвечать следующим ключевым требованиям:

1) work with no root privileges
2) be compact and easy implemented on Embedded Linux system
3) robust

Скрипт, инструмент или код C должны дать мне два вывода:

   synchronized -> wthe hen clock has already been synchronized with NTP server
   not synchronized -> otherwise

1 Ответ

0 голосов
/ 05 апреля 2019

Как насчет помещения

ntpd -n -p pool.ntp.org -q

в процедуру инициализации (для этого вам понадобится root-доступ один раз).

(Это можно было бы добавить в комментарии, ноне хватает кредитов.)

...