Sincronizzare il sistema con HTPDate

Illustriamo in quest’esempio un modo alternativo a NTP (Network Time Protocol) per sincronizzare il nostro sistema.
Questa diversa modalità di operare potrebbe esserci utile perché ci potremmo trovare, tipicamente in presenza di reti Corporate o comunque rigidamente filtrate, a dover sincronizzare Linux Box che consentono il traffico da e verso la nostra organizzazione solo mediante la porta 80, ovvero HTTP, o comunque non attraverso la porta 123, tipica del protocollo NTP.

A tal scopo, è possibile utilizzare il comando HTPDate(8), il quale può essere utilizzato sia in modalità interattiva sia in modalità di servizio (daemon mode). Ma come lavora?

HTPDate sfrutta una connessione Telnet sulla porta 80 per recuperare una pagina web da una lista di Web Server specificati in input, i quali tipicamente restituiscono, a fronte di una richiesta standard GET / HTTP/1.1, oltre alla pagina desiderata, diverse informazioni addizionali quali ad esempio:

Date: Tue, 24 Jun 2008 13:43:48 GMT

Compreso il funzionamento di base del programma, utilizzarlo risulta davvero abbastanza semplice. In particolare, mediante il comando:

# htpdate -d www.google.com yahoo.com www.kernel.org
www.google.com 24 Jun 2008 11:38:36 GMT (0.055) => 1645
www.google.com 24 Jun 2008 11:38:37 GMT (0.055) => 1645
www.yahoo.com 24 Jun 2008 11:38:37 GMT (0.118) => 1645
www.yahoo.com 24 Jun 2008 11:38:38 GMT (0.117) => 1645
www.kernel.org 24 Jun 2008 11:38:39 GMT (0.190) => 1645
www.kernel.org 24 Jun 2008 11:38:40 GMT (0.189) => 1645
#: 3, mean: 1645, average: 1645.000
Timezone: GMT+1 (CET,CEST)
Offset 1645.000 seconds

vengono effettuare due richieste per ognuno dei tre Server Web specificati, ognuno dei quali ci evidenzia un offset di 1645 secondi, ovvero poco più di 27 minuti di differenza tra l’orario definito sulla nostra Linux Box e quello restituito rispettivamente dai tre Server Web.

A questo punto, constatando che il server più veloce nella risposta (e quindi il più accurato) è stato quello di Google (0.055 il suo tempo di risposta), sarà possibile sincronizzare la nostra Linux Box mediante il comando:

# htpdate -s -l www.google.com

dove il flag -l specifica l’utilizzo del Syslog come standard output.

Il file di log /var/log/messages riporterà quindi la serie delle operazioni eseguite da HTPDate, in particolare l’interrogazione del Server Web www.google.com, il calcolo della media delle risposte (in questo caso le due query risultano identiche), il recupero del Timezone corrente ed infine l’effettiva sincronizzazione del tempo.

Jun 24 13:21:55 seti htpdate: www.google.com
24 Jun 2008 11:49:20 GMT (0.076) => 1645
[...]
Jun 24 13:21:56 seti htpdate: Setting 1645.000 seconds
Jun 24 13:21:56 seti htpdate: Set: Tue Jun 24 13:49:21 2008

Il nostro sistema è quindi aggiornato!

La seconda modalità operativa di HTPDate consente di lanciare il comando in daemon mode, in modo tale da avere il nostro sistema costantemente sincronizzato ad intervalli regolari. Ad esempio mediante il comando:

# htpdate -D www.google.com www.yahoo.com www.kernel.org

verrà mantenuta la sincronizzazione con la lista dei Server Web indicati, nell’ordine specificato da HTPDate. Altre interessanti opzioni, come l’intervallo di polling per la sincronizzazione, la possibilità di specificare utente e gruppo per l’esecuzione del comando in modalità daemon mode (ad esempio nobody) piuttosto che l’opportunità di scegliere una porta arbitraria per l’esecuzione del programma (ad esempio la porta 8080 se fossimo in presenza di reti il cui accesso web sia consentito solo tramite Proxy Server definiti su quella porta) sono nella pagina man.