Jakie są wady wyłączenia paniki druciarza 0 w NTP?

10

Czasami mamy problem z tym, że nowe serwery mają niewłaściwy czas w biosie, więc czas może być wyłączony o miesiąc.

Gdy zawiesisz maszynę wirtualną w VMware, a następnie ją zawiesisz, czas też się skończy. Ponieważ NTP nie synchronizuje się po maksymalnym przesunięciu, rozważam użycie paniki druciarza 0 w pliku /etc/ntp.conf.

Jaki jest powód, dla którego istnieje domyślne maksymalne przesunięcie 1000 sekund, które powoduje, że NTP przestaje synchronizować czas? Używamy Puppet do skonfigurowania NTP, rozważam, aby ustawić majsterkowanie 0 w pliku ntp.conf, więc NTP i tak się zsynchronizuje. Jakie są wady robienia tego?

ujjain
źródło

Odpowiedzi:

8

Przyczyna braku synchronizacji z serwerem, którego czas jest tak inny, jest udokumentowana tutaj :

5.1.1.4. Co się stanie, jeśli zmieni się czas odniesienia?

Idealnie czas odniesienia jest taki sam na całym świecie. Po zsynchronizowaniu nie powinno być żadnych nieoczekiwanych zmian między zegarem systemu operacyjnego a zegarem odniesienia. Dlatego NTP nie ma specjalnych metod radzenia sobie z sytuacją.

Zamiast tego reakcja ntpd będzie zależeć od przesunięcia między zegarem lokalnym a czasem odniesienia. Dla niewielkiego przesunięcia ntpd jak zwykle dostosuje lokalny zegar; w przypadku małych i większych przesunięć ntpd na chwilę odrzuci czas odniesienia. W tym drugim przypadku zegar systemu operacyjnego będzie kontynuował z ostatnimi obowiązującymi korektami, gdy nowy czas odniesienia zostanie odrzucony. Po pewnym czasie zostaną przesunięte małe przesunięcia (znacznie krótsze niż sekunda) (powoli wyregulowane), a większe przesunięcia spowodują przesunięcie zegara (ustawienie na nowo). Ogromne przesunięcia są odrzucane, a ntpd zakończy się, wierząc, że musiało się wydarzyć coś bardzo dziwnego.

W mojej bieżącej konfiguracji NTP, również kontrolowanej przez puppet, wymuszam synchronizację z serwerem, zarówno w ntp.confpliku, używając tinker panic, jak i w ustawieniach demona ( /etc/sysconfig/ntpd), jak opisano na stronie ntpd(8)podręcznika:

-g Zwykle ntpd kończy działanie z komunikatem do dziennika systemowego, jeśli przesunięcie przekracza próg paniki, który domyślnie wynosi 1000 s. Ta opcja pozwala ustawić czas na dowolną wartość bez ograniczeń; może się to jednak zdarzyć tylko raz. Jeśli próg zostanie przekroczony, ntpd zakończy pracę z komunikatem do dziennika systemu. Tej opcji można używać z opcjami -q i -x.

Robię to, ponieważ mogę zaufać serwerowi NTP, z którym się łączę.

Odpowiednia część modułu, która dotyczy klientów, jest następująca:

class ntp (
  $foo
  $bar
  ...
  ){

  $my_files = {
    'ntp.conf'      => {
      path    => '/etc/ntp.conf',
      content => template("ntp/ntp.conf.$template.erb"),
      selrole => 'object_r',
      seltype => 'net_conf_t',
      require => Package['ntp'], },
    'ntp-sysconfig' => {
      path    => '/etc/sysconfig/ntpd',
      source  => 'puppet:///modules/ntp/ntp-sysconfig',
      require => Package['ntp'], },
      ...
  }

  $my_files_defaults = {
    ensure   => file,
    owner    => 'root',
    group    => 'root',
    mode     => '0644',
    selrange => 's0',
    selrole  => 'object_r',
    seltype  => 'etc_t',
    seluser  => 'system_u',
  }

  create_resources(file, $my_files, $my_files_defaults)

  exec { 'ntp initial clock set':
    command     => '/usr/sbin/ntpd -g -q -u ntp:ntp',
    refreshonly => true,
    timeout     => '-1',
    subscribe   => File['/etc/ntp.conf'],
  }

}

A zawartość odnośników to:

$ cat devops/puppet/modules/ntp/files/ntp-sysconfig
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g -a"

i:

$ cat devops/puppet/modules/ntp/templates/ntp.conf.RedHat.erb
# HEADER: This file was autogenerated by puppet.
# HEADER: While it can still be managed manually, it
# HEADER: is definitely not recommended.
tinker panic 0
<% server.each do |ntpserver| -%>
server <%= ntpserver %> autokey
<% end -%>
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
crypto pw hunter2
crypto randfile /dev/urandom
keysdir /etc/ntp

hieraCzęść brakuje tutaj, ale masz pomysł.

dawud
źródło
3

Najgorszym przykładem mogą być ataki na odbiornik GPS skierowany do sieci LAN, co zostało udowodnione, że jest możliwe i dlatego NTP w takich przypadkach raczej „odchodzi” niż natychmiast coś psuje. Tego rodzaju problem lub nagłe błędy oprogramowania były spodziewane w czasie projektowania NTP, a także oba mogą się zdarzyć.

Jednym z mechanizmów ochronnych w algorytmie jest wykrywanie tego, co nazywają falsetikiem , ale to może wykryć tylko niektóre problemy, głównie jeśli nagle nadrzędny zegar wysyła nagle czas do tyłu.

Jeśli chodzi tylko o „zły zegar w czasie rozpoczęcia”:

  • możesz użyć / etc / ntp / step-tickers (na RHEL *, Debian nigdy nie wpadł na ten pomysł). Plik znaczników kroku zajmuje co najmniej jednemu serwerowi NTP uruchomienie ntpdate przed uruchomieniem samego ntpd.
  • alternatywnie (lub dodatkowo) istnieje opcja -g dla ntpd , która pozwala na brzydkie przesunięcia, ale tylko wtedy, gdy zostaną znalezione na początku.
Florian Heigl
źródło