NTP no Linux (atualiza relógio) [Guia Básico]

O Linux mantém dois relógios: um deles é alimentado por bateria, conhecido como “Real Time Clock”, RTC, “CMOS clock”, “Hardware clock” ou relógio da máquina. Ele conta o tempo quando o sistema é desligado e não é utilizado quando o sistema está ativo. O NTP no Linux é uma implementação que mantém o relógio atualizado.

O outro relógio chamado de “system clock”, “kernel clock”, “software clock” ou relógio do sistema é um software que conta o tempo baseado nas interrupções do processador. Ele precisa ser inicializado pelo RTC durante a carga do sistema.

Geralmente poderá haver diferenças entre o tempo marcado entre estes dois relógios, a hora e data reais. Veremos os comandos para ajustar o relógio do sistema.

O tempo na Terra é medido em segundos, que é uma unidade do Sistema Internacional de Unidades.  Desde 1967 o segundo é definido com base na medição de relógios atômicos, que é a duração de 9.192.631.770 períodos da radiação correspondente à transição entre dois níveis hiper finos do estado fundamental do átomo de césio 133.

Uma importante característica do tempo é sua monotonicidade, que significa que o tempo sempre avança. Essa característica é difícil de ser mantida por relógios implementados em software, como nos Sistemas Operacionais. 

Desta forma, os sistemas computacionais carecem de ter os seus relógios frequentemente ajustados.

Para resolver este problema, foi criado o NTP – Network Time Protocol, que implementa, além de um protocolo, uma rede de servidores com relógios atômicos que servem para ajustar os relógios dos demais computadores do mundo.

Estes relógios são coordenados pelo Bureau International des Poids et Mesures (BIPM) que compõe mais de 260 relógios atômicos localizados em institutos e observatórios de metrologia ao redor do mundo, inclusive no Brasil. 

O NTP é um protocolo para sincronização dos relógios dos computadores, baseados em alguma fonte confiável de tempo, como os relógios atômicos do Observatório Nacional, que definem a Hora Legal Brasileira. Com o NTP é fácil manter o relógio do computador sempre com a hora certa.

Desta forma, o NTP faz acesso a um ou mais servidores de tempo, e ajusta a hora local do sistema com base nestes servidores.

A última versão do software do NTP pode ser obtida no endereço http://www.ntp.org/downloads.html ou baixada como um pacote da distribuição Linux.

O pacote do NTP instala um serviço chamado ntpd, que executa em segundo plano, e faz ajustes da hora de tempos em tampos mantendo o relógio do sistema atualizado.

Arquivo ntp.conf

O NTP possui um arquivo de configuração chamado ntp.conf que reside geralmente no diretório /etc.

Veja o arquivo de configuração ntpd.conf do CentOS 7:

# arquivo de “memoria” para o escorregamento de frequência do computador
driftfile /var/lib/ntp/drift
# restringe o acesso somente ao localhost
restrict 127.0.0.1 
restrict ::1
# servidores
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

Além de sincronizar o relógio do sistema local com o relógio do servidor de NTP selecionado no arquivo de configuração, o NTP também disciplina o relógio através da fase e da frequência do sistema, de forma contínua, mesmo em períodos em que não é possível consultar servidores de tempo.

Desta forma, as características do relógio local são medidas e se tornam conhecidas do NTP, o que torna possível que ele faça as correções no tempo de forma independente. O arquivo indicado pela chave driftfile armazena o erro esperado de frequência para o relógio.

A chave restrict possibilita restringir o acesso ao NTP somente a endereços de redes do localhost ou da rede local. 

Não é necessário que todos os computadores conectem remotamente em um servidor de tempo externo. Um Linux operando como gateway de rede pode se conectar à um servidor de NTP externo, e servir de fonte de sincronização para os demais computadores na rede. 

O parâmetro server seguido do nome ou endereço do servidor, indica de quais servidores o NTP irá buscar a hora.  É recomendável também usar adicionalmente o parâmetro iburst no comando, que serve para acelerar a sincronização inicial. 

É comum indicar mais de um servidor com o parâmetro server, de forma que o cliente pode buscar a hora simultaneamente em mais de um servidor.

Por padrão, o arquivo de configuração do NTP já contém uma lista de servidores de NTP. Não é necessário alterar o arquivo, a menos que se deseje. 

Depois de instalado e configurado, para utilizar o serviço do NTP é necessário iniciar o serviço com o comando:

# systemctl start ntpd

E depois habilitar o serviço para iniciação na carga do sistema:

# systemctl enable ntpd

O serviço do ntpd utiliza a porta 123 do protocolo de transporte UDP para falar com seus clientes ou conectar nos servidores. O comando “ss” com a opção “-lup” pode visualizar o status de escuta da porta 123:

# ss -lup | grep ntp
UNCONN    *:ntp    *:*    users:(("ntpd",pid=7744,fd=16))

Fuso Horário

Mesmo que o NTP busque a hora de um determinado servidor, de um país ou região que esteja com a hora em outro fuso horário, o Linux ainda faz o ajuste de fuso horário local utilizando um dos meios abaixo:

Forma de AjusteObservação
/etc/localtimeLink simbólico para alguma zona de fuso horário em /usr/share/zoneinfo. Geralmente utilizado para configurar o Fuso Horário de distribuições baseadas em Red Hat.
/etc/timezoneArquivo que contém o nome da Zona de Fuso Horário utilizada pelo Linux. Geralmente utilizado para configurar o Fuso Horário de distribuições baseadas em Debian.
TZVariável ambiental que contém o nome da Zona de Fuso Horário. Funciona em qualquer Linux e pode ser customizada para cada usuário.
timedatectlServiço do Systemd que pode ser utilizado para configurar a Zona de Fuso Horário em distribuições que usam o Systemd.

pool.ntp.org

O projeto pool.ntp.org é um grande cluster virtual de servidores de tempo fornecendo um serviço NTP confiável e fácil de usar para milhões de clientes.

O pool.ntp.prg está sendo usado por dezenas de milhões de sistemas por todo o mundo. É o “servidor de tempo” padrão para a maioria das distribuições Linux e muitos appliances de rede.

O seu uso é muito simples, basta usar os seus servidores como referência na configuração:

server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org

Comando ntpdate

O comando ntpdate também pode ser utilizado para sincronizar o relógio num determinado momento, mesmo que o serviço de NTP não esteja ativo:

$ ntpdate  -q a.ntp.br
server 2001:12ff::8, stratum 2, offset 0.004601, delay 0.04297
server 200.160.0.8, stratum 2, offset 0.003794, delay 0.04475
20 Oct 14:50:02 ntpdate[10902]: adjust time server 2001:12ff::8 offset 0.004601 sec

A opção “-q” apenas faz uma query para o servidor, sem alterar o relógio local. Para alterar o relógio local com o ntpdate, o serviço de ntpd não pode estar em execução.

Comando ntpq

O utilitário ntpq pode ser utilizado para fazer queries em servidores de NTP. Ele pode ser usado no modo interativo, em que um prompt será apresentado ou usando parâmetros.

A opção “-p” mostra a lista de servidores pares e o status de cada um:

# ntpq -p
     remote       st t when poll reach   delay   offset  jitter
===================================================================
+gps.ntp.br      2 u   86  256  217   19.648   -1.463 1059.39
*b.st1.ntp.br    1 u  198  256  307   31.605    4.667 828.577
 2001:440:1880:5 16 -  52m 1024    0    0.000    0.000   0.000
 b.ntp.br        2 u   63  256  237   55.025    0.950 732561.
+a.ntp.br        2 u   81  256  217   20.002   -1.437 1057.36
+a.st1.ntp.br    1 u   56  256  217   21.052   -1.931 1065.28
+gps.jd.ntp.br   1 u   96  256  217   21.140   -1.688 1055.66
+d.st1.ntp.br    1 u  121  256  217   23.940    0.083 1058.75

Comando hwclock

O comando hwclock pode ser usado para ler o relógio de máquina ou atualizar o relógio de máquina com o relógio do sistema e vice-versa.

Como dito no início do capítulo, os computadores mantêm dois relógios. Um chamado de relógio de máquina (hardware), é ligado quando o sistema está inativo, e é mantido por um cristal de quartzo e uma bateria quando o computador está desligado. Esta bateria é capaz de manter o relógio mesmo quando desligado da rede elétrica por um bom tempo.

Quando o computador é ligado, o Linux lê o relógio de máquina para atualizar o seu relógio de sistema. É comum existir uma pequena diferença entre estes dois relógios.

O comando hwclock tem as seguintes opções:

  • -r: informa as horas do relógio do hardware com o fuso horário local;
  • -s: configura o relógio do sistema com as horas do relógio do hardware;
  • -w: configura o relógio do hardware com as horas do relógio do sistema;
  • -c: compara as horas do relógio de hardware e do relógio do sistema de 10 em 10 segundos;
  • –adjust: adiciona ou subtrai tempo do relógio do hardware para ajusta-lo ao escorregamento da frequência;

Exemplos:

# hwclock -c
hw-time      system-time         freq-offset-ppm   tick
1571594417   1571594417.011423
1571594427   1571594427.012649               123      1

Para ajustar o relógio do Hardware com o relógio do sistema:

# hwclock -w

O pacote Chrony

O chrony é uma implementação versátil do Network Time Protocol (NTP). Ele pode sincronizar o relógio do sistema com servidores NTP.

Ele também pode operar como um servidor NTPv4 (RFC 5905) e ponto para fornecer um serviço de tempo para outros computadores na rede.

Ele pode ser instalado através dos pacotes da distribuição Linux:

$ sudo apt install chrony

Arquivo chrony.conf

O Chrony utiliza o arquivo de configuração chamado chrony.conf que pode residir no diretório /etc/ ou /etc/chrony.

Sua configuração é semelhante ao ntpd.conf, com a única diferença é que a chave server se chama pool:

$ cat /etc/chrony/chrony.conf 
pool ntp.ubuntu.com        iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2
driftfile /var/lib/chrony/chrony.drift

O serviço do chrony pode ser iniciado e habilitado com o comando systemctl:

$ sudo systemctl start chrony

Para habilitar o serviço na carga do sistema:

$ sudo systemctl enable chrony
Executing: /lib/systemd/systemd-sysv-install enable chrony

Comando chronyc

O chronyc é um utilitário usado para monitorar o desempenho do chronyd e para alterar seu funcionamento enquanto ele está em execução.

Se nenhum comando for especificado na linha de comando, chronyc esperará entrada do usuário através do prompt chronyc>.

Ele aceita diversos comandos, tanto no modo interativo quanto diretamente como argumento:

$ chronyc
chronyc> sources
210 Number of sources = 8
MS Name/IP address     Stratum Poll Reach LastRx Last sample               
=========================================================================
^- golem.canonical.com     2   6   373    70  -9241us[-9241us] +/-  143ms
^- pugot.canonical.com     2   6   377    77    -11ms[  -11ms] +/-  135ms
chronyc> quit

O comando sources faz a mesma coisa que o “ntpq -p”.

O comando tracking mostra o status do relógio do sistema:

$ chronyc tracking
Reference ID    : C814BA4C (d.st1.ntp.br)
Stratum         : 2
Ref time (UTC)  : Sun Oct 20 20:15:10 2019
System time     : 0.000793245 seconds slow of NTP time
Last offset     : -0.000647185 seconds
RMS offset      : 0.001815075 seconds
Frequency       : 4.009 ppm slow
Residual freq   : -0.191 ppm
Skew            : 3.915 ppm
Root delay      : 0.031462338 seconds
Root dispersion : 0.002590907 seconds
Update interval : 129.0 seconds
Leap status     : Normal

A comunicação entre o servidor chronyd e o cliente chronyc é feita através da porta 323 UDP:

$ sudo ss -lunp | grep chrony
UNCONN  [::1]:323    [::]:*     users:(("chronyd",pid=18869,fd=6))     

Comando timedatectl

O comando timedatectl é capaz de identificar que o Linux está utilizando algum serviço de atualização do relógio do sistema, como o ntpd ou o chronyd:

$ timedatectl 
               Local time: Sun 2019-10-20 17:17:34 -03
           Universal time: Sun 2019-10-20 20:17:34 UTC
                 RTC time: Sun 2019-10-20 20:17:34
                Time zone: America/Buenos_Aires (-03, -0300)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

O chrony por ser mais rápido para atualizar a data e hora no sistema, ele é ideal para sistemas desktop e notebooks, que são desligados com frequência. Já o ntp é adequado para computadores que ficam permanentemente ligados.

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe