ntpd

ntpd

Ich möchte den gemeinsamen ntpdDaemon 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 ntpdim Gast möglicherweise durcheinanderbringe.

ntpdUm 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 loopstatsProtokolle peerstatsim 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 ntpdVerstellen 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 ntpdDaemon 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.confManualpageEs 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.confzum 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 denyalle 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 kernelKernel-Disziplin-Funktionen zu deaktivieren.

Verwandt

ntpd -qn

Wenn ein ntpdServer läuft, ntpq -pnkö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 ( -ubedeutet „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 rdatekann die Remote-Zeit (und die Ortszeit) anzeigen:

rdate -np pool.ntp.org; date

Wobei -nbedeutet: 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 ntpdder Standardkonfiguration möglich ist:

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.pyinstalliert haben . Rufen Sie es dann mit auf:pip install ntplibapt-get install python3-ntplib

python3 ntp_check.py

verwandte Informationen