Corrigindo Data e Hora no Kali Linux 2020

Publicado por Igor Matsunaga em

créditos na imagem

Antecipadamente, a data e hora do meu Kali Linux ou outro SO pode ficar errada e me causar algum problema?

Quando nos utilizamos de uma máquina virtual como o Virtual Box por exemplo, temos a opção de utilizar um Snapshot para salvarmos o estado atual da máquina, porém a data e hora também se manterão, causando erros em diversos programas que frequentemente se utilizem de dados vindos da rede. Por exemplo ao acessar algum Browser o mesmo não se conectará, pois verá a diferença de horário como um problema de segurança.

SnapShot

De antemão a palavra snapshot significa “foto instantânea”, na tecnologia é uma cópia de dados que possuem comportamento semelhante a um backup.

Antes de mais nada as funções Snapshot fornecem cópias instantâneas de dados que se parecem e se comportam como backups completos sem consumir o espaço em disco equivalente. Além disso as imagens instantâneas (snapshots) são ideais para várias aplicações, incluindo testes de backup, ou de desenvolvimento, análise da informação e mineração de dados.

A princípio até como forma de segurança antes de realizar quaisquer grandes mudanças no seu sistema e interessante que se utilize do Snapshot,  para caso algum problema aconteça.

Como funciona a data/hora no Linux?

Existem dois principais sistemas de hora no Linux:

  • O Relógio do Hardware: que roda independente de qualquer sistema e continua funcionando mesmo quando o pc está desligado. Esse relógio é comumente chamado de Relógio de Hardware, Relógio de Tempo Real, RTC (sigla em inglês para Real Time Clock), Relógio da BIOS e Relógio CMOS.
  • O Relógio do Sistema: esse guarda a hora utilizando um relógio dentro do kernel do Linux e é comandado por uma interrupção especial chamada timer. Aqui o Relógio da BIOS é utilizado apenas para marcar a data/hora quando o sistema não está ligado. No processo de boot essa data/hora armazenada na BIOS é lida e nunca mais requisitada até o próximo boot.

Comando Date

  • Primeiramente quando desejamos verificar a data e hora de um sistema GNU/Linux Debian e seus derivados como Kali Linux ou Ubuntu por exemplo,  utilizamos o comando date, sem argumentos e ele mostrará a data e hora do sistema no formato definido em timezone.
Sáb Out 3 18:26:58 -03 2020

Ajustar manualmente a data e hora

Quando necessitamos ajustar o horário e data do sistema manualmente, o formato necessário pode ser um pouco confuso (o ?POSIX convencionou o formato MMDDhhmmYYYY). Contudo, no uso do argumento –set o date aceita a data e horário em muitos outros formato. Por exemplo, você pode ler a página do manual do date, ou usar o exemplo abaixo para um teste em um formato bem útil. O argumento –set usado no exemplo abaixo é especificado no padrão ISO 8601 formato extenso como YYYY-MM-DD para Ano-Mês-DiaDoMês, e o horário HH:MM:SS usando o formato de 24 horas. Zeros a esquerda são necessários.

     date --set 2020-10-03 
     date --set 15:30:00

O comando acima configura a data para três de outubro de 2020, e o horário para três horas e 30 minutos da tarde.

Configure o horário automaticamente

Todavia o protocolo usado para configurar o horário e data é o Network Time Protocol ou NTP. Porém para configurar automaticamente é necessário acesso a um servidor NTP. Sua rede local pode fornecer tal servidor, apesar disso a maioria das pessoas acessam um servidor NTP pela internet.

Atualmente na internet alguns servidores de horário proveem o horário correto. Seu servidor de internet (ISP) provavelmente disponibiliza um servidor de tempo e deve ser sua mais próxima e mais precisa fonte. Existem muitos servidores NTP independentes para conectar, mas sua melhor fonte é https://pool.ntp.org. A fonte oficial do Brasil é a https://www.pool.ntp.org/zone/br.

Instalação do NTP

Antes de mais nada a instalação é muito fácil. Antes de tudo não se esqueça de utilizar o comando sudo para obter privilégio root.

  • sudo apt-get install ntp

Devido a lista ser global, você deve ajustar

  • /etc/ntp.conf

para usar uma fonte local. Mude a linha

  • server pool.ntp.org

para

  • server XX.pool.ntp.org

onde XX é seu continente ou as duas letras do código de seu país. Exemplos: CA para Canadá, BR para Brasil e etc…

Para maior acurácia você deve incluir linhas com servidores extras como

  • server 0.XX.pool.ntp.org
    server 1.XX.pool.ntp.org

aumentando o número a cada linha. Dois ou três devem ser o suficiente.

Relógio do hardware e horário do sistema com dual boot

Enquanto o Debian prefere manter o relógio do hardware no UTC (isto previne a necessidade de mudar no horário de verão) outros sistemas (como o Windows) mantém, por padrão, o relógio do hardware sincronizado como o horário local. Para manter o relógio sã e mostrar a hora corretamente em vários sistemas eles precisam concordar como o horário é armazenado no relógio do hardware.

No Debian o fuso horário é armazenado no arquivo /etc/adjtime;

0.000000 14602224559 0.000000 
1460224559
UTC

Edite o /etc/adjtime, e mude de “UTC” para “LOCAL” se você quiser manter o relógio de hardware no formato do tempo local ao invés do UTC. Você precisará usar o sudo ou o su para editar esse arquivo. Qualquer editor resolve, mas o nano ou o vi são a escolha normal.

Clock

Clock é um link para hwclock e a opção -w é usada para utilizar a data/hora do sistema para atualizar a data/hora da BIOS. O contrário também é possível, podemos utilizar a data/hora da BIOS para setar nosso sistema, trocando a opção -w por -s. Isso é feito pelo sistema na inicialização.

# clock -w
# clock -s

Prática

Para nosso vídeo vou utilizar o formato  # date {mmddhhmiyyyy.ss}.

O # significa que o comando está sendo executado como root, caso não esteja logado como root($), utilize o comando sudo antes dos comandos listados.

Sendo:

  • mm: Mês (dois dígitos ex: 10 = Outubro);
  • dd: Dia do mês (dois dígitos de 01 até 31);
  • hh: Hora (formato de 24 horas);
  • mi: Minutos (dois dígitos de 00 até 60);
  • yyyy: Ano (quatro dígitos);
  • ss: Segundos (dois dígitos de 00 até 60).

Para alterarmos a data e a hora para o momento em que escrevo esse post, , 03 de Outubro de 2020, 17:57:20(ainda não gravei o vídeo, então o horário e dia estão diferentes daqui), podemos fazer:

# date 100317572020.20

Também é possível usar argumentos em conjunto com o comando date para alterar apenas o relógio ou a data, ou ainda, usar formatos de alteração mais agradáveis.

Observe os exemplos em que uso sempre a mesma data e hora do exemplo anterior (10 de Outubro de 2020, 17h 57min e 20seg).

Alterando a data no formato ano com 4 dígitos, mês e dia com 2 dígitos cada. Com o detalhe que esta operação, leva o relógio para zero (00:00:00):

# date +%Y%m%d -s "20201003"

Alterando data e relógio simultaneamente de 3 maneiras:

# date -s "03/10/2020 17:57:20"
# date -s "03 OCT 2020 17:57:20"
# date set="03 OCT 2020 17:57:20"

Alterando apenas o relógio:

# date +%T -s "17:57:20"
# date +%T%p -s "17:57:20PM"

Help

Alguns argumentos do comando date:

  • %a – dia da semana abreviado 3 letras
  • %A – dia da semana nome completo
  • %b – mês abreviado 3 letras
  • %B – mês completo nome completo
  • %d – dia do mês 2 dígitos
  • %y – ano 2 dígitos
  • %Y – ano 4 dígitos
  • %r – 12 horas (AM/PM)
  • %R – 24 horas
  • %T – Relógio no formato hh:mm:ss

Help

Para mais dicas utilize o comando help a qualquer momento:

date --help
Uso: date [OPÇÃO]… [+FORMATO]
ou: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current time in the given FORMAT, or set the system date.
Mandatory arguments to long options are mandatory for short options too.
-d, --date=STRING display time described by STRING, not 'now'
-f, --file=DATEFILE like --date; once for each line of DATEFILE
-I[FMT], --iso-8601[=FMT] output date/time in ISO 8601 format.
FMT='date' for date only (the default),
'hours', 'minutes', 'seconds', or 'ns'
for date and time to the indicated precision.
Example: 2006-08-14T02:34:56-0600
-R, --rfc-2822 output date and time in RFC 2822 format.
Example: Mon, 14 Aug 2006 02:34:56 -0600
--rfc-3339=FMT output date/time in RFC 3339 format.
FMT='date', 'seconds', or 'ns'
for date and time to the indicated precision.
Example: 2006-08-14 02:34:56-06:00
-r, --reference=FILE display the last modification time of FILE
-s, --set=STRING set time described by STRING
-u, --utc, --universal print or set Coordinated Universal Time (UTC)
--help mostra esta ajuda e finaliza
--version informa a versão e finaliza
FORMATO controla a saída. As sequências interpretadas são:
%% um % literal
%a nome abreviado do dia de semana da localidade (por exemplo, Sáb)
%A nome completo do dia de semana na localidade (por exemplo, Sábado)
%b nome abreviado do mês na localidade (por exemplo, Jan)
%B nome completo do mês na localidade (por exemplo, Janeiro)
%c data e hora na localidade (por exemplo, Sáb 08 Mar 2008 18:34:17 BRT)
%C século; como %Y, mas omite os dois últimos dígitos (por exemplo, 21)
%d dia do mês (por exemplo, 01)
%D data no formato estado-unidense; o mesmo que %d/%m/%y
%e dia do mês, preenchido com espaço; o mesmo que %_d
%F data completa; o mesmo que %Y-%m-%d
%g os últimos dois dígitos do ano do número ISO da semana (veja %G)
%G ano do número ISO da semana ISO (veja %V); normalmente útil só com %V
%h o mesmo que %b
%H hora (00..23)
%I hora (01..12)
%j dia do ano (001..366)
%k hora, com preenchimento de espaço ( 0..23); o mesmo que %_H
%l hora, com preenchimento de espaço ( 1..12); o mesmo que %_I
%m mês (01..12)
%M minuto (00..59)
%n um caractere de nova-linha
%N nanosegundos (000000000..999999999)
%p o equivalente na localidade para AM ou PM; em branco se desconhecido
%P como %p, mas em minúsculas
%r a hora no relógio de 12 horas na localidade (por exemplo, 11:11:04 PM)
%R hora e minuto no estilo 24 horas; o mesmo que %H:%M
%s segundos desde 1970-01-01 00:00:00 UTC
%S segundo (00..60)
%t uma tabulação
%T as horas; o mesmo que %H:%M:%S
%u dia da semana (1..7); 1 é segunda-feira
%U número da semana no ano, sendo domingo o início da semana (00..53)
%V número ISO da semana, sendo segunda-feira o início da semana (01..53)
%w dia da semana (0..6); 0 é domingo
%W número da semana no ano, sendo segunda-feira o início da semana (00..53)
%x representação da data na localidade (por exemplo, 31/12/99)
%X representação da hora na localidade (por exemplo, 23:13:48)
%y os últimos dois dígitos do ano (00..99)
%Y ano
%z fuso horário numérico +hhmm (por exemplo, -0400)
%:z fuso horário numérico +hh:mm (por exemplo, -04:00)
%::z fuso horário numérico +hh:mm:ss (por exemplo, -04:00:00)
%:::z fuso horário numérico com : para a precisão necessária
(por exemplo, -04, +05:30)
%Z abreviação alfabética do fuso horário (por exemplo, BRT)
Por padrão, campos numéricos de data são preenchidos com zeros.
As seguintes opções sinalizadoras podem seguir '%':
(hífen) não preencher o campo
_ (sublinhado) preencher com espaços
0 (zero) preencher com zeros
^ usar letras maiúsculas, se possível
# usar capitalização oposta, se possível
Depois de qualquer sinalizador pode haver uma largura de campo opcional,
como um número decimal; então, um modificador também opcional, que pode ser
E para usar as representações alternativas da localidade, se disponível, ou
O para usar os símbolos númericos alternativos da localidade, se disponível.
Exemplos:
Converte segundos desde o período (1970-01-01 UTC) até uma data
$ date --date='@2147483647'
Mostra a hora na costa oeste dos EUA (use tzselect(1) para encontrar TZ)
$ TZ='America/Los_Angeles' date
Mostra a hora local para 9AM próxima sexta-feira na costa oeste dos EUA
$ date --date='TZ="America/Los_Angeles" 09:00 next Fri'
GNU coreutils online help: http://www.gnu.org/software/coreutils/
Relate date erros de tradução para http://translationproject.org/team/pt_BR.html
Full documentation at: http://www.gnu.org/software/coreutils/date
or available locally via: info '(coreutils) date invocation'

Fontes:

infortrendbrasil

vivaolinux

gnu.org

dicas-l

wiki.debian

Categorias: Kali LinuxTutorial

Igor Matsunaga

Diretor Técnico da NSWorld, entusiasta da área hacking, desenvolvedor hacker ético, formado em Segurança da Informação.

0 comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *