Как определить статус связи NTP от имени пользователя, не являющегося root

#embedded-linux #yocto #ntp

#встроенный-linux #yocto #ntp

Вопрос:

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

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

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

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

Затем я также попробовал chronyd amp; 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. Вместо cmdport вам следует посмотреть на bindcmdaddress 127.0.0.1 , чтобы подключался только localhost, но, похоже, это значение по умолчанию, поэтому ваши опасения по поводу доступа в Интернет могут быть необоснованными.

2. @meuh, спасибо за ваш ответ, похоже, вы правы. Но мне интересно, есть ли какое-либо другое доступное решение.

Ответ №1:

Как насчет того, чтобы поместить

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

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

(Я бы поместил это в комментарий, но у меня недостаточно кредитов.)