
Ich möchte den gemeinsamen ntpd
Daemon verwenden, um zu testen, ob die Zeit von einer virtuellen Maschine gehalten wird oder nicht, ohne sie tatsächlichanpassendie Uhr.
Ich verwende Solaris 11.4 (Oracles Standardimage für Intel) in VirtualBox auf einem macOS-System und kann die Zeit nicht richtig synchronisieren. Mir ist aufgefallen, dass die VM hierfür möglicherweise bereits VirtualBox Guest Additions verwendet (ich weiß nicht, wie das funktioniert) und dass ich die Zeitmessung durch die Ausführung ntpd
im Gast möglicherweise durcheinanderbringe.
ntpd
Um dies zu testen, habe ich mir überlegt , es in der Solaris-VM so einzurichten,Monitorein paar öffentliche Zeitserver, aber irgendwie verhindern, dass die lokale Uhr geändert wird. Auf diese Weise konnte ich mir ansehen, wie die loopstats
Protokolle peerstats
im Laufe der Zeit aussahen, um festzustellen, ob die lokale Uhr tatsächlich die richtige Zeit anzeigte.
Das Problem besteht darin, dass ich keine Hinweise dazu finde, wie ich das ntpd
Verstellen der lokalen Uhr verhindern kann.
Ich wollte dies in der Vergangenheit auch auf Systemen tun, auf denen ich openntpd
(von OpenBSD) zur tatsächlichen Zeitmessung verwende. Der ntpd
Daemon könnte dann einfach im Hintergrund sitzen und überwachen, ohne einzugreifen. Aber ich konnte auch damals keine Möglichkeit finden, dies zu erreichen.
Antwort1
ntpd
Verstehen Sie, dass Siemussverwenden Sie ntpd, meines Wissens nach sind die einzigen Optionen:
NTP deaktivieren
Wie gesehen beidie ntp.conf
ManualpageEs besteht die Möglichkeit, den NTP zu deaktivierenRückkopplungsschleife, oder, in Laiensprache: Entfernen Sie die Möglichkeit, Zeitkorrekturen zwischen Zeitservern und der lokalen Uhr zu berechnen. Die ntp.conf
zum Aktivieren dieser Option erforderliche Zeile lautet:
disable ntp
Hinweis: Bei Verwendung dieser Option kann die Zeit, die ntpd anderen Systemen, die eine Zeitreferenz anfordern, geben kann, falsch/falsch sein. Es erscheint sinnvoll, eine Zeile zu verwenden, um deny
alle Zeitanfragen von anderen Systemen abzulehnen, es sei denn, Sie möchten die Zeitabweichung von einem externen System überwachen (verwenden Sie „Verweigern“ und lassen Sie die IP des externen Systems zu).
Notiz:Mir ist nicht ganz klar, ob die Systemuhr von ntpd tatsächlich „frei laufen“ gelassen wird. Es handelt sich jedoch um eine dokumentierte Option. Wenn ntpd also nicht den dokumentierten Vorgaben entspricht, handelt es sich um einen Fehler.
minsane
minsane minsane
Dies ist die Mindestanzahl an Kandidaten, die dem Taktauswahlalgorithmus zur Verfügung stehen, um einen oder mehrere Truechimere für den Clusteralgorithmus zu erzeugen. Wenn weniger als diese Anzahl verfügbar sind,Die Uhr ist undiszipliniert und darf frei laufen.
Dies geschieht durch das Einfügen einer Zeile ( in ntp.conf
) wie:
tos minsane 100
Oder eine andere hohe Zahl (größer als die Anzahl der verfügbaren oder verwendeten Server).
Hinweis: Mir ist nicht klar, dass der Kernel-Drift-Wert auf 0 zurückgesetzt wird, um zu verhindern, dass sich der Wert der Uhr langsam verschiebt. Möglicherweise ist es sinnvoll, zusätzlich die disable kernel
Kernel-Disziplin-Funktionen zu deaktivieren.
Verwandt
ntpd -qn
Wenn ein ntpd
Server läuft, ntpq -pn
könnte er melden, wie gut der Ntpd-Server seine Aufgabe erfüllt, die Systemuhr synchron zu halten. Dies ist eine alternative Möglichkeit, den Zeitunterschied zu protokollieren.
ntpdate -q
Das Paket ntpdate
(das als veraltet gekennzeichnet ist) kann verwendet werden, um den Zeitunterschied mit Folgendem zu überprüfen:
ntpdate -q 'pool.ntp.org' # marked as deprecated.
Verwenden Sie es ntpdate -qu 'pool.ntp.org'
, damit für die Ausführung des Befehls keine Root-Befugnisse erforderlich sind ( -u
bedeutet „nicht privilegierte Netzwerkports verwenden“, trotzdem muss die ausführbare Datei für den Benutzer zugänglich sein).
SNTP
Es gibt ein einfaches Programm zum Abfragen (ändert sich nicht, wenn keine Option -s oder -S verwendet wird):
sntp pool.ntp.org
Datum
Das Programm rdate
kann die Remote-Zeit (und die Ortszeit) anzeigen:
rdate -np pool.ntp.org; date
Wobei -n
bedeutet: Verwenden Sie SNTP (RFC 2030) anstelle des (Standard-)Zeitprotokolls RFC 868; und nurdruckendas Ergebnis, ohne tatsächliche Änderungen vorzunehmen.
Dieses Programm ist jedoch auf eine Auflösung von ganzen Sekunden (nicht Bruchteilen) beschränkt. Und eshat keine Optionen in Solaris
Chroniken
Das Ersatzpaket von ntp (chrony) kann einen Test der Zeitdifferenz durchführen, ohne die Systemuhr einzustellen:
chronyd -Q 'pool pool.ntp.org iburst'
Ich glaube, dass dies alles Methoden sind, um die Zeitdifferenz zwischen der Internet-NTP-Zeit und der Systemzeit zu erkennen (ohne sie zu ändern).
Antwort2
Ich bezweifle, dass dies mit ntpd
der Standardkonfiguration möglich ist:
- In seinem Kern
ntpd
gibt es keine „dritte“ Uhr.(Wobei die ersten beidenSystemtakt und monotone Uhr). - Funktional
ntpd
ist geschrieben, um Anpassungen nicht nur an der aktuellen Zeit vorzunehmen,sondern auch Parameter anpassen, die die Laufgeschwindigkeit der Systemuhr steuern. Es dient implizit dazu, die Auswirkung dieser Anpassungen zu überwachen.
Wenn man diese beiden zusammennimmt, ist es höchst unwahrscheinlich, dass ntpd einen Modus hat, der die Werte für diese Parameter ordnungsgemäß verwalten kann, ohne Echtzeitanpassungen vorzunehmen.AUhr, wobei die einzige verfügbare Uhr die Systemuhr ist.
Aus Ihrer Frage geht nicht hervor, ob Sie das wirklich brauchen ntpd
. Jeder [S]NTP-Client reicht aus.
Wenn Sie mit ein wenig Code vertraut sind, können Sie möglicherweise etwas zusammenstellen, das Server für Sie abfragt, ohne die Systemuhr neu kalibrieren zu müssen.
Als Beispiel gibt es eine NTP-Bibliothek für Python namensntplibEin Skript zum Ausdrucken des Offsets einer 60-Sekunden-Umfrage könnte folgendermaßen aussehen:
import ntplib
import sys
import time
def main(*args):
ntp_client = ntplib.NTPClient()
while True:
for server in args:
try:
response = ntp_client.request(server, version=3)
print(response.offset)
time.sleep(60)
except ntplib.NTPException:
print("query failed: {}".format(server))
if __name__ == "__main__":
if len(sys.argv) == 1:
# Do not use this server for commertial software without permission
main('pool.ntp.org')
else:
main(sys.argv[1:])
Legen Sie dies in eine Datei . Stellen Sie sicher, dass Sie ntplib entweder mit oder distributionsspezifisch ( ) ntp_check.py
installiert haben . Rufen Sie es dann mit auf:pip install ntplib
apt-get install python3-ntplib
python3 ntp_check.py