#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-доступ один раз).
(Я бы поместил это в комментарий, но у меня недостаточно кредитов.)