Skip to main content

108.1 Manutenção do Horário do sistema


No Linux temos 2 relógios, nós temos o relógio da BIOS e o relógio do sistema, podemos sincronizar um a partir do outro (o relógio da BIOS pode ser conhecido como hwclock por causa do comando usado para alterar o relógio da BIOS e o sof-clock, mas esse não possui nenhum comando.


Os dois comando mais usados para essa seção são: O comando date que é muito usado para verificar a hora do sistema, mas nesse caso para o horário do sistema e o comando hwclock que é usado para verificar o relogio da BIOS.

# Relógio do sistema:
$ date
Mon 14 Jun 2021 08:41:47 AM -03

# Relógio da BIOS:
$ sudo hwclock
2021-06-14 08:42:01.027372-03:00

Alterando a hora do sistema, para isso devemos definir como mês/dia/ano, isso se não mudou os locales para portugues brasil:

# Vamos mudar a data do sistema para o dia 1, do mês 12 as 15h30:
$ sudo date 12011530
# Se quiser, pode adicionar o ano ao final, ficando assim para 2010:
$ sudo date 120115302010

#########################################################
# Se não mudar, verifique se o NTP está ativo:
$ timedatectl | grep -i ntp
NTP service: inactive
# Se estiver, desative-o:
$ sudo timedatectl set-ntp 0

# Pode usar a palavra 'on' e 'off' no lugar do '0' e do '1'.

#########################################################

# Outra forma mais fácil de mudar a data/hora é:
$ sudo date -s "15 Sep 2013 15:00:00"

As vezes, mesmo com NTP ativo, você precisa ter o System clock synchronized ativo também, caso contrário, a hora e data não ficaram 100% corretas, mas para habilitar essa opção, você deve ter ou o software do ntp instalado ou do chrony, recomendo usar o chrony que é mais atual.


Depois de instalar, habilite o uso do ntp novamente, mesmo que já esteja ativo, isso vai ativar o uso do System clock synchronized sem ter que reiniciar.



hwclock


Duas opções mais usadas aqui são, mudar a hora da BIOS com base na hora do sistema e mudar a hora do sistema com base na hora da BIOS.

# Para atualizar a hora da BIOS para que ela tenha o mesmo horário que nosso sistema:
$ sudo hwclock --systohc

# Ou, você pode usar o '-w':
$ sudo hwclock -w

#########################################

# Agora vamos mudar a hora do sistema com base na hora da BIOS:
$ sudo hwclock --hctosys

# Ou, voce pode usar o '-s':
$ sudo hwclock -s

##########################################

# Mudando o horário na mão:
$ sudo hwclock --set --date "12/15/2022 12:00"


NTP - Network Time Protocol


É importante que o horário/data das máquinas estejam atualizados, isso é útil porque criptografia usa muito o horário, os logs do sistema e para facilitar essa configuração usamos um software que implementa o protocolo NTP.


Existe um software que chama ntp onde ele implementa o protocolo NTP e existe outro software chamado chrony, onde ele também implementa e é mais atual.

# Instalando o 'ntp':
$ sudo apt install ntp

# Instale também o 'ntpdate':
$ sudo apt install ntpdate

O ntp usa o protocolo de transporte UDP/TCP na porta 123, sendo preferencial para o cliente usar o UDP.


Feito a instalação do software do NTP, vamos ativar o NTP:

# Ativando o NTP:
$ sudo systemctl start ntp

# Agora vamos falar para o sistema usar o ntp:
$ sudo timedatectl set-ntp on

Para configurar o NTP usamos o arquivo /etc/ntp.conf.

# Linha informa o arquivo de log para sincronia de horário:
driftfile /var/lib/ntp/ntp.drift

# Servidores NTP usados:
pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst
# Onde está 'pool' no começo da linha, pode ser 'server', um ou outro.

Essas informações veem do ntp.org, visite também o site ntppool.org, outro projeto, mas esse voltado para o Brasil é o ntp.br, um projeto do NIC.BR para fornecer uma hora atualizada através de um relógio atômico.


Para verificar se as configurações estão funcionando usamos o comando abaixo:

# Verificar servidores de ntp que estão sendo usados e estatisticas sobre esses servidores:
$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
0.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
1.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
2.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
3.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
ntp.ubuntu.com .POOL. 16 p - 64 0 0.000 0.000 0.000
+time.cloudflare 10.97.10.21 3 u 7 64 377 7.725 -1.957 2.505
-45.15.168.198 193.204.114.233 2 u 11 64 367 116.273 5.617 2.555
*ntp2.wiktel.com .GPS. 1 u 12 64 377 165.405 -0.992 2.427
-y.ns.gin.ntt.ne 249.224.99.213 2 u 17 64 375 116.598 7.390 2.451
#38.229.52.9 172.16.21.35 2 u 17 64 377 183.181 6.811 2.354
#23.157.160.168 209.51.161.238 2 u 79 64 376 128.423 12.798 3.053
-darwin.kenyonra 80.72.67.48 3 u 11 64 377 186.196 5.837 2.333
+t1.time.gq1.yah 208.71.46.33 2 u 13 64 377 194.458 -0.539 2.480
-50-205-57-38-st .GPS. 1 u 11 64 377 120.387 7.209 2.251
#45.79.51.42 129.7.1.66 2 u 21 64 377 149.963 8.018 2.485
+golem.canonical 17.253.34.123 2 u 50 64 377 195.628 0.111 2.143
#ntp2i.versadns. 217.180.209.214 2 u 25 64 377 142.761 10.357 3.952
-pugot.canonical 140.203.204.77 2 u 53 64 377 209.305 6.507 2.335
#alphyn.canonica 94.198.159.10 2 u 54 64 377 127.522 10.486 1.616
#12.167.151.1 66.85.78.80 3 u 32 64 377 127.775 7.558 2.475
+chilipepper.can 17.253.34.253 2 u 44 64 377 192.036 1.108 2.505


Agora vamos ver como funciona o ntpdate. Ele não fica rodando toda hora, apenas atualiza naquele momento o horario com base no servidor ntp informado. Para isso vamos ter que parar o daemon do ntp.

# Parando serviço:
$ sudo systemctl stop ntp

# Verificando se parou mesmo:
$ sudo systemctl status ntp
● ntp.service - Network Time Service
Loaded: loaded (/lib/systemd/system/ntp.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Mon 2021-06-14 16:47:35 UTC; 4s ago
Docs: man:ntpd(8)
Main PID: 2218 (code=exited, status=0/SUCCESS)

Jun 14 16:47:35 ubuntu2004.localdomain ntpd[2218]: 74.6.168.72 local addr 192.168.121.83 -> <null>
Jun 14 16:47:35 ubuntu2004.localdomain ntpd[2218]: 50.205.57.38 local addr 192.168.121.83 -> <null>
Jun 14 16:47:35 ubuntu2004.localdomain ntpd[2218]: 45.79.51.42 local addr 192.168.121.83 -> <null>
Jun 14 16:47:35 ubuntu2004.localdomain ntpd[2218]: 192.210.199.110 local addr 192.168.121.83 -> <null>
Jun 14 16:47:35 ubuntu2004.localdomain ntpd[2218]: 91.189.94.4 local addr 192.168.121.83 -> <null>
Jun 14 16:47:35 ubuntu2004.localdomain ntpd[2218]: 91.189.91.157 local addr 192.168.121.83 -> <null>
Jun 14 16:47:35 ubuntu2004.localdomain ntpd[2218]: 12.167.151.1 local addr 192.168.121.83 -> <null>
Jun 14 16:47:35 ubuntu2004.localdomain systemd[1]: Stopping Network Time Service...
Jun 14 16:47:35 ubuntu2004.localdomain systemd[1]: ntp.service: Succeeded.
Jun 14 16:47:35 ubuntu2004.localdomain systemd[1]: Stopped Network Time Service.

# Mudando a hora para o servidor:
$ sudo ntpdate 3.pt.pool.ntp.org
14 Jun 13:51:59 ntpdate[3180]: adjust time server 194.8.30.16 offset -0.000469 sec
# Lembrando que será convertido do horario do servidor (UTC) para o horário cadastrado em nossa máquina.

# Verificando se o servidor está ok:
$ sudo ntpdate -q 3.pt.pool.ntp.org
server 5.135.59.152, stratum 2, offset -0.005437, delay 0.27318
server 194.8.30.16, stratum 2, offset -0.000262, delay 0.25244
14 Jun 13:53:17 ntpdate[3192]: adjust time server 194.8.30.16 offset -0.000262 sec


Systemd-TimeSyncD


Esse serviço do systemd é incompatível com o ntp, apesar desse serviço fornecer serviço de NTP, o software systemd-timesyncd e ntp não podem ser usados juntos. Por padrão temos systemd-timesyncd ativo no sistema e ele controla se vamos usar ou não o serviço de ntp através do timedatectl.


A principal função desse serviço é fornecer data/hora atualizadas no sistema, assim como ntp. Vale lembrar que timedatectl só é compatível com chrony e com o systemd-timesyncd.



Chrony


Implementa o protocolo NTP, é um software mais recente que o ntp e implementa melhorias, principalmente em redes com congestionamento maiores.

# Instalando o chrony:
$ sudo apt install chrony

# verificando o status do serviço:
$ sudo systemctl status chrony
● chrony.service - chrony, an NTP client/server
Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-06-14 14:13:44 -03; 2min 48s ago
Docs: man:chronyd(8)
man:chronyc(1)
man:chrony.conf(5)
Main PID: 4793 (chronyd)
Tasks: 2 (limit: 2280)
Memory: 1.4M
CGroup: /system.slice/chrony.service
├─4793 /usr/sbin/chronyd -F -1
└─4794 /usr/sbin/chronyd -F -1

Jun 14 14:13:44 ubuntu2004.localdomain systemd[1]: Starting chrony, an NTP client/server...
Jun 14 14:13:44 ubuntu2004.localdomain chronyd[4793]: chronyd version 3.5 starting (+CMDMON +NTP +REF>
Jun 14 14:13:44 ubuntu2004.localdomain chronyd[4793]: Initial frequency 148.127 ppm
Jun 14 14:13:44 ubuntu2004.localdomain chronyd[4793]: Loaded seccomp filter
Jun 14 14:13:44 ubuntu2004.localdomain systemd[1]: Started chrony, an NTP client/server.
Jun 14 14:13:54 ubuntu2004.localdomain chronyd[4793]: Selected source 45.11.105.123
Jun 14 14:14:58 ubuntu2004.localdomain chronyd[4793]: Selected source 45.11.105.223

# O arquivo de configuração fica em '/etc/chrony/chrony.conf':
$ sudo vim /etc/chrony/chrony.conf

Comando usados no chrony:

# Verificando o status/estatisticas do serviço:
$ sudo chronyc tracking
Reference ID : 2D0B69DF (45.11.105.223)
Stratum : 3
Ref time (UTC) : Mon Jun 14 17:19:16 2021
System time : 0.000035602 seconds slow of NTP time
Last offset : -0.000196141 seconds
RMS offset : 0.008034667 seconds
Frequency : 4.228 ppm slow
Residual freq : -0.027 ppm
Skew : 2.272 ppm
Root delay : 0.008962600 seconds
Root dispersion : 0.001945170 seconds
Update interval : 64.4 seconds
Leap status : Normal

# Verificar os servidores NTP que estão sendo utilizados:
$ sudo chronyc sources
210 Number of sources = 8
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- pugot.canonical.com 2 6 377 28 -1112us[-1112us] +/- 124ms
^- chilipepper.canonical.com 2 6 377 30 +4931us[+4931us] +/- 140ms
^- golem.canonical.com 2 6 377 30 +6770us[+6770us] +/- 118ms
^- alphyn.canonical.com 2 6 367 31 -273us[ -273us] +/- 125ms
^- 38.229.62.9 2 6 377 32 +465us[ +465us] +/- 84ms
^- 37.228.129.2 2 6 377 29 +1748us[+1748us] +/- 106ms
^+ stratum2-1.ntp.sao03.br.> 2 6 377 36 +137us[ +148us] +/- 6030us
^* 45.11.105.223 2 6 377 36 -114us[ -102us] +/- 6196us

# Verificando a atividade:
$ sudo chronyc activity
200 OK
8 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address


timedatectl


Usado para ver a hora configurada com o gmt da região e o horário UTC padrão. Podemos habilitar e desabilitar o System clock synchronized no qual trabalha com o NTP para ficar ajustando a hora/data, ele trabalha apenas com o chrony e systemd-timesyncd.

# Para habilitar voce pode usar qualquer variação do comando abaixo:
$ sudo timedatectl set-ntp 1
$ sudo timedatectl set-ntp on
$ sudo timedatectl set-ntp true

# E para desabilitar voce pode usar qualquer variação abaixo:
$ sudo timedatectl set-ntp 0
$ sudo timedatectl set-ntp off
$ sudo timedatectl set-ntp false

Lembrando que só usa isso se for usar o serviço de NTP do systemd ou em conjunto com o Chrony, para o serviço do ntp mesmo não precisa e nem tem como.