Synchronizacja czasu serwera – rdate
Napisał: Patryk Krawaczyński
29/05/2006 w Administracja Brak komentarzy. (artykuł nr 12, ilość słów: 649)
K
ażdy szanujący się serwer powinien zawsze posiadać, dokładny czas charakterystyczny dla jego strefy czasowej. Dlaczego? Ponieważ korekcja zdarzeń zachodzących w serwerach może być czynnością żmudną, jeżeli występują różnice w czasie wskazywanym przez ich zegary. Synchronizacja zegarów może zaoszczędzić nam wiele cennego czasu podczas analizowania dzienników zdarzeń (mamy pewność, że zdarzenia zdarzyły się dokładnie o tej godzinie i minucie) po wykryciu próby włamania lub nawet podczas rozwiązywania codziennych problemów sieciowych.
Na szczęście nie jest to takie trudne, a z pomocą przychodzi takie narzędzie jak rdate.
Produkowane obecnie komputery są wyposażone w podtrzymywanie przez baterię zegary czasu rzeczywistego (RTC – Real Time Clock). Zwykle jednak ich dokładność czasami zawodzi oraz pozostawia wiele do życzenia (potrafią się rozsynchronizować w przeciągu doby), a ręczne ich ustawienie i pilnowanie nie stanowi problematycznego rozwiązania. Rozwiązaniem tego problemu jest wykorzystanie NTP (Network Time Protocol), który jest równorzędnym protokołem, stworzonym do zapewnienia lepszej niż sekundowa dokładności pracy zegarów komputerów podłączonych do Internetu. Jego działanie opera się na istnieniu kliku “wzorcowych” komputerów, których zegary synchronizowane są z zegarami atomowymi, drogą radiową lub satelitarną (niektóre z nich są bezpośrednio podłączone do takich zegarów). Pozostałe komputery synchronizuję się od nich i od kolejnych pośredników, tworząc strukturę drzewiastą. Pojęciem związanym z tą strukturą drzewiastą jest warstwa (stratum). Warstwa określa miejsce serwera czasu w hierarchii publicznej infrastruktury NTP. Serwery warstwy 1. są przeważnie wyposażone we własne źródła czasu, takie jak GPS czy zegar atomowy. Serwery warstwy 2. uzyskują czas od serwerów warstwy 1., a ich dokładność jest dla naszych potrzeb zupełnie wystarczająca. Serwery warstwy 3. uzyskują czas od warstwy 2. itd. Zegary tych komputerów nie tylko są przestawiane, ale także przyspieszane / opóźniane, aby same “trzymały dokładność”.
Aby skorzystać z możliwości protokołu NTP, należy posiadać zainstalowany jego pakiet dystrybucyjny, zawierający demona synchronizacji zegarów oraz dodatkowe narzędzia. Protokół NTP może nie być zainstalowany domyślnie w każdym systemie, ale przeważnie umieszczany jest w pakietach dystrybucyjnych systemów Linux, FreeBSD czy OpenBSD, dlatego w jego poszukiwaniu warto przejrzeć nośniki instalacyjne systemu (w dystrybucji Slackware znajduje się on jako ntpd w sekcji N – etworking). Jeżeli go tam nie ma, można go pobrać z witryny http://www.ntp.org i skompilować samodzielnie.
My jednak nie będziemy korzystali z usług demona ntpd (ponieważ na potrzeby serwera nie prowadzącego własnego serwera czasu jest to zbyteczne) tylko narzędzia poza systemowego – rdate, którego konfiguracja jako klienta usług czasu jest bardzo prosta i wystarczająca na podstawową sunchronizację (chyba, że zależy nam na dokładności do milisekund). Zaczniemy od ściągnięcia źródeł rdate ze strony: http://www.aelius.com/njh/rdate/rdate-1.5.tar.gz/ oraz ich skompilowania:
tar -zxvf rdate-1.5.tar.gz cd rdate-1.5/ make make install
Rdate jest narzędziem oferującym synchronizację z serwerem za pomocą protokołu TCP (opcją jest wykorzystanie do tego protokołu UDP). Specyfikacja ta przydaje się podczas posiadania firewalla z regułami stateful – możemy wykonywać synchronizację z dowolnym serwerem nie otwierając żadnego portu w serwerze. Na potrzeby poprawnego działania i synchronizacji przy pomocy rdate – wystarczy stworzyć jeden skrypt, który będzie raz dziennie (za pomocą crontab) przeprowadzał synchronizację z serwerem czasu z warstwy 1. oraz ustawiał czas sprzętowy komputera według czasu systemowego:
touch /etc/cron.daily/rdate chmod ug+x /etc/cron.daily/rdate echo '#!/bin/sh' > /etc/cron.daily/rdate echo "/usr/bin/rdate -l -s vega.cbk.poznan.pl" >> /etc/cron.daily/rdate echo "/sbin/hwclock --systohc" >> /etc/cron.daily/rdate
Po stworzeniu tego skryptu należy upewnić się jeszcze, że podczas instalacji systemu Slackware dokonaliśmy poprawnych wyborów. W tym celu należy użyć polecenia: timeconfig. Spyta się ono nas czy zegar ustawiony jest na czas lokalny, czy czas uniwersalny. Najczęściej zegar jest ustawiony na czas lokalny, więc należy wybrać opcję No. Później wybieramy strefę czasową: Europe/Warsaw. Na konieć dodam, że istnieje wiele serwerów NTP (ten wykorzystany w przykładzie znajduje się w 1. warstwie) – jednak z dostępnej na Internecie listy serwerów należy wybrać taki, który jest niezbyt oddalony od nas geograficznie (oczywiście należy tu uwzględnić geografię łączy ISP – Internet Service Provider), co może wpłynąć na dokładność synchronizacji czasu.
Więcej informacji: man rdate, NTP servers, VEGA Poznań, One Time Servers