documentation.suse.com / Documentação do SUSE Linux Enterprise Desktop / Guia de Administração / Serviços / Sincronização de horário com NTP
Aplica-se a SUSE Linux Enterprise Desktop 15 SP7

39 Sincronização de horário com NTP

O mecanismo NTP (network time protocol) é um protocolo para sincronizar o horário do sistema na rede. Primeiro, uma máquina pode obter o horário de um servidor, que é uma fonte de horário confiável. Segundo, a máquina pode agir como uma fonte de horário para outros computadores na rede. O objetivo é duplo: manter o tempo absoluto e a sincronização do horário do sistema de todas as máquinas na rede.

Manter um horário exato do sistema é importante em várias situações. Geralmente, o relógio do hardware incorporado não atende aos requisitos dos aplicativos, como bancos de dados ou clusters. A correção manual do horário do sistema levaria a problemas severos pois, por exemplo, um pulo inverso pode causar o mau funcionamento de aplicativos críticos. Em uma rede, geralmente é necessário sincronizar o horário do sistema de todas as máquinas, porém, o ajuste manual do horário não é um bom método. O NTP dispõe de um mecanismo para resolver esses problemas. O serviço NTP ajusta continuamente o horário do sistema com servidores de horário confiáveis na rede. Ele habilita também o gerenciamento de relógios de referência local como relógios controlados pelo rádio.

A partir do SUSE Linux Enterprise Desktop 15, o chrony é a implementação padrão do NTP. O chrony inclui duas partes: chronyd é um daemon que pode ser iniciado no momento da inicialização e chronyc é um programa de interface de linha de comando que monitora o desempenho do chronyd e altera parâmetros operacionais em runtime.

A partir do SUSE Linux Enterprise Desktop 15.2, o módulo do YaST para configuração do cliente NTP define o systemd-timer, em vez do daemon cron, para executar o chrony, quando ele não está configurado para ser executado como daemon.

Nota
Nota

Para habilitar a sincronização de horário por meio do diretório ativo, siga as instruções em Procedure 7.2, “Joining an Active Directory domain using Windows domain membership.

39.1 Configurando um cliente NTP com YaST

O daemon do NTP (chronyd) que acompanha o pacote chrony vem predefinido para usar o relógio do hardware do computador local como referência de horário. A precisão de um relógio de hardware depende substancialmente da sua fonte de horário. Por exemplo, um relógio atômico ou um receptor GPS é uma fonte de horário precisa, enquanto um chip RTC comum não é uma fonte de horário confiável. O YaST simplifica a configuração de um cliente NTP.

Na janela de configuração do cliente NTP do YaST (Serviços de rede › Configuração do NTP), você pode especificar quando iniciar o daemon do NTP, o tipo de fonte de configuração e adicionar servidores de horário personalizados.

Janela de configuração do NTP
Figura 39.1: Janela de configuração do NTP

39.1.1 Início do daemon do NTP

Há três opções que você pode escolher para iniciar o daemon do NTP:

Apenas manualmente

Selecione Apenas Manualmente para iniciar manualmente o daemon chrony.

Sincronizar sem daemon

Selecione Sincronizar sem daemon para definir o horário do sistema periodicamente sem a execução permanente do chrony. Você pode definir o Intervalo da sincronização em minutos.

Agora e ao inicializar

Selecione Agora e ao inicializar para iniciar o chronyd automaticamente quando o sistema for inicializado. Essa configuração é recomendada.

39.1.2 Tipo de fonte de configuração

Na caixa suspensa Fonte de configuração, selecione Dinâmico ou Estático. Defina como Estático se o seu servidor usa apenas um conjunto fixo de servidores NTP (públicos). A opção Dinâmico é melhor quando sua rede interna oferece servidores NTP via DHCP.

39.1.3 Configurar servidores de horário

Os servidores de horário para consulta do cliente estão listados na parte inferior da janela Configuração do NTP. Modifique esta lista conforme necessário com Adicionar, Editar e Apagar.

Clique em Adicionar para adicionar um novo servidor de horário:

Adicionando um servidor de horário
Figura 39.2: Adicionando um servidor de horário
  1. No campo Endereço, digite o URL do servidor de horário ou do pool de servidores de horário com o qual você deseja sincronizar o horário da máquina. Depois que o URL estiver completo, clique em Testar para verificar se ele aponta para uma fonte de horário válida.

  2. Ative Sincronização inicial rápida para acelerar a sincronização de horário por meio do envio de mais solicitações quando o daemon chronyd é iniciado.

  3. Ative Iniciar offline para acelerar o tempo de inicialização nos sistemas que iniciam o daemon chronyd automaticamente e podem não ter uma conexão de Internet no momento da inicialização. Essa opção é útil, por exemplo, para laptops com conexões de rede gerenciadas pelo NetworkManager.

  4. Clique em OK para confirmar.

39.2 Configurando manualmente o NTP na rede

O chrony lê sua configuração do arquivo /etc/chrony.conf. Para manter o relógio do computador sincronizado, você precisa informar ao chrony quais servidores de horário devem ser usados. Você pode usar nomes de servidores ou endereços IP específicos. Por exemplo:

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

Você também pode especificar o nome de um pool. O nome do pool é resolvido para vários endereços IP:

pool pool.ntp.org
Dica
Dica: Computadores na mesma rede

Para sincronizar o horário em vários computadores na mesma rede, não é recomendável sincronizar todos eles com um servidor externo. Convém especificar um computador como servidor de horário, que é sincronizado com um servidor de horário externo, e o outro computador atua como cliente dele. Adicione uma diretiva local ao /etc/chrony.conf do servidor para diferenciá-lo de um servidor de horário autorizado:

local stratum 10

Para iniciar o chrony, execute:

systemctl start chronyd.service

Após a inicialização do chronyd, levará um tempo para estabilizar o horário, e o arquivo drift que corrige o relógio do computador local será criado. Com o arquivo DRIFT, o erro sistemático do relógio do hardware pode ser registrado quando o computador é ligado. A correção é usada imediatamente, resultando em uma estabilidade maior do horário do sistema.

Para habilitar o serviço que permite iniciar o chrony automaticamente no momento da inicialização, execute:

systemctl enable chronyd.service
Atenção
Atenção: Serviço yast-timesync.service conflitante

Além do serviço chronyd.service, o SLED inclui o yast-timesync.service. O yast-timesync.service é acionado por um temporizador a cada 5 minutos e executa o chronyd com a opção -q para definir o horário do sistema e sair. Como apenas uma instância do chronyd pode estar em execução a qualquer momento, não habilite nem inicie os dois serviços relacionados ao chronyd simultaneamente.

39.3 Configurando o NTS

O Network Time Protocol (NTP) é um protocolo usado para sincronizar e manter a precisão do horário do sistema de um ou mais hosts na rede. Este artigo descreve como proteger o NTP usando o Network Time Security (NTS).

O protocolo NTP não apresenta nenhum mecanismo de segurança para tornar a comunicação entre o servidor de horário e o cliente autenticada e criptografada. O Network Time Security (NTS) é uma extensão que reforça a segurança do NTP. O chrony suporta o NTS e pode autenticar fontes de horário e proteger contra determinados ataques à rede.

Os procedimentos a seguir descrevem como configurar o servidor de horário e a máquina do cliente para sincronização segura de horário.

Procedimento 39.1: Configurando o servidor de horário NTS
  1. (Opcional) É uma boa ideia configurar o servidor de horário para atualizar o horário pelo NTS. Isso garante uma sincronização de horário segura desde o início da cadeia de sincronização. Comente todas as fontes de horário existentes no arquivo /etc/chrony.conf que não suportam NTS e adicione pelo menos uma que suporte NTS, por exemplo:

    server time.cloudflare.com iburst nts
    Dica
    Dica

    A opção nts solicita a conexão por NTS se ela estiver disponível; do contrário, ela voltará para o NTP se o NTS não estiver disponível.

  2. Reinicie o serviço chronyd.

    > sudo systemctl restart chronyd.srvice
  3. Verifique as fontes de horário configuradas.

    > chronyc sources -v
    MS Name/IP address         Stratum Poll Reach LastRx Last sample               
    ===============================================================================
    ^? time.cloudflare.com           3   6     1     2   -947ms[ -947ms] +/-   12ms
    ^? pyrrha.fi.muni.cz             2   6     1     1   -948ms[ -948ms] +/-   39ms
    ^* whitesoft-intex16.c.cbsn>     1   6     1     2   -948ms[ -948ms] +/- 5444us
    ^? mail.combatostrich.dev        2   6     1     1   -948ms[ -948ms] +/-   28ms
    Nota
    Nota

    A linha que começa com ^* inclui a fonte de horário que foi selecionada como a melhor.

    Verifique se a fonte de horário configurada usa o modo NTS.

    > chronyc -N authdata
    Name/IP address             Mode KeyID Type KLen Last Atmp  NAK Cook CLen
    =========================================================================
    [...]
    time.cloudflare.com          NTS     1   15  256    3    0    0    8   96
  4. Verifique se a configuração do servidor inclui a opção allow, que especifica quais clientes podem sincronizar o horário com o servidor de horário, por exemplo:

    allow 192.168.1.0/24
  5. (Opcional) Se o servidor de horário estiver protegido por um firewall, permita a comunicação nas portas tanto para NTP quanto para NTS. Por padrão, as portas são 123 e 4460.

  6. Obtenha um certificado TLS e uma chave privada correspondente e copie-os para /var/lib/chrony/. Verifique se eles são legíveis para o chrony, por exemplo:

    > sudo install -m 0440 -o chrony -g chrony nts.key /var/lib/chrony/
    > sudo install -m 0440 -o chrony -g chrony nts.crt /var/lib/chrony/
    Dica
    Dica

    Encontre informações detalhadas sobre certificados TLS em um artigo específico.

  7. Edite o /etc/chrony.conf e verifique se a opção ntsdumpdir /var/lib/chrony está ativa. Em seguida, anexe os caminhos à chave e ao certificado TLS.

    ntsdumpdir /var/lib/chrony
    ntsserverkey /var/lib/chrony/nts.key
    ntsservercert /var/lib/chrony/nts.crt
  8. Reinicie o serviço chronyd.

    > sudo systemctl restart chronyd.service
Procedimento 39.2: Configurando os clientes NTS
  1. Desabilite as fontes de NTP existentes, por exemplo:

    #server 192.168.1.1 iburst

    As configurações dos códigos-fonte estão incluídas no /etc/chrony.conf ou nos arquivos em /etc/chrony.d/.

  2. O host do cliente precisa confiar na CA raiz que assinou o certificado TLS. Encontre detalhes sobre como gerenciar o armazenamento de certificados de CA em um artigo específico.

  3. Adicione a fonte do servidor de horário NTS que você configurou no Procedimento 39.1, “Configurando o servidor de horário NTS” à configuração do cliente chrony em /etc/chrony.conf, por exemplo:

    server nts1.example.com iburst nts
  4. Reinicie o serviço chronyd.

    > sudo systemctl restart chronyd.service
  5. Verifique as fontes de horário configuradas no cliente e confirme se a conexão foi autenticada.

    > sudo chronyc sources -v
    > sudo chronyc -N authdata
  6. No servidor de horário NTS, verifique as estatísticas por cliente sobre as conexões NTS.

    > sudo chronyc -N clients -k

39.4 Configurar o chronyd em tempo de execução usando o chronyc

Você pode usar o chronyc para mudar o comportamento do chronyd em tempo de execução. Ele também gera relatórios de status sobre a operação do chronyd.

Você pode executar o chronyc no modo interativo ou não interativo. Para executar o chronyc interativamente, digite chronyc na linha de comando. Esse procedimento exibe um prompt e aguarda a entrada do seu comando. Por exemplo, para verificar quantas fontes NTP estão online ou offline, execute:

# chronyc
chronyc> activity
200 OK
4 sources online
2 sources offline
1 sources doing burst (return to online)
1 sources doing burst (return to offline)
0 sources with unknown address

Para sair do prompt do chronyc, digite quit ou exit.

Se você não precisa usar o prompt interativo, digite o comando diretamente:

# chronyc activity
Nota
Nota: Mudanças temporárias

As mudanças feitas com o chronyc não são permanentes. Elas serão perdidas após a próxima reinicialização do chronyd. Para mudanças permanentes, modifique o /etc/chrony.conf.

Para obter uma lista completa dos comandos do chronyc, consulte a página de manual dele (man 1 chronyc).

39.5 Sincronização de horário dinâmica em tempo de execução

Embora o chronyd seja inicializado normalmente em um sistema que inicializa sem uma conexão de rede, a ferramenta não pode resolver os nomes DNS dos servidores de horário especificados no arquivo de configuração.

O chronyd continua tentando resolver os nomes de servidor de horário especificados pelas diretivas server, pool e peer em um intervalo de tempo crescente até obter êxito.

Se o servidor de horário não puder ser acessado quando o chronyd for iniciado, você poderá especificar a opção offline:

server server_address offline

O chronyd não tentará fazer poll no servidor até ser habilitado usando o seguinte comando:

# chronyc online server_address

Quando a opção auto_offline está definida, o chronyd pressupõe que o servidor de horário estava offline quando duas solicitações foram enviadas a ele sem receber uma resposta. Essa opção evita a necessidade de executar o comando offline do chronyc ao desconectar o link de rede.

39.6 Configurando um relógio de referência local

O pacote de software chrony depende de outros programas (como gpsd) para acessar os dados de horário por meio do driver SHM ou SOCK. Use a diretiva refclock em /etc/chrony.conf para especificar um relógio de referência de hardware a ser usado como fonte de horário. Ela tem dois parâmetros obrigatórios: um nome de driver e um parâmetro específico do driver. Os dois parâmetros são seguidos de zero ou mais opções refclock. O chronyd inclui os seguintes drivers:

  • PPS: driver para a API do kernel pulse per second. Por exemplo:

    refclock PPS /dev/pps0 lock NMEA refid GPS
  • SHM: driver de memória compartilhada do NTP. Por exemplo:

    refclock SHM 0 poll 3 refid GPS1
    refclock SHM 1:perm=0644 refid GPS2
  • SOCK: driver de soquete de domínio do Unix. Por exemplo:

    refclock SOCK /var/run/chrony.ttyS0.sock
  • PHC: driver de relógio do hardware PTP. Por exemplo:

    refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37
    refclock PHC /dev/ptp1:nocrossts poll 3 pps

Para obter mais informações sobre as opções de drivers individuais, consulte man 8 chrony.conf.

39.7 Sincronização do relógio com uma Referência de Horário Externa (ETR, External Time Reference)

O suporte para sincronização do relógio com uma referência de horário externa (ETR) está disponível. A referência de horário externa envia um sinal do oscilador e um sinal de sincronização a cada 2**20 (2 elevado à potência de 20) microssegundos para manter sincronizados os relógios TOD de todos os servidores conectados.

Para disponibilidade, é possível conectar duas unidades ETR a uma máquina. Se a diferença do relógio for maior do que a tolerância da verificação de sincronização, todas as CPUs terão suas máquinas marcadas indicando que o relógio não está sincronizado. Se isso acontecer, todos os dispositivos DASD de E/S habilitados para XRC serão parados até o relógio ser novamente sincronizado.

O suporte a ETR é ativado por meio de dois atributos sysfs. Execute os seguintes comandos como root:

echo 1 > /sys/devices/system/etr/etr0/online
echo 1 > /sys/devices/system/etr/etr1/online
Documentation survey