“chage -l” e “passwd -S” fornecem valores diferentes para a data do conjunto de senhas no RHEL 6

3

Percebi que no RHEL 6 "chage -l USER" e "passwd -S USER" fornecem datas diferentes de configuração de senha. Curioso para saber porque. Aqui está o que eu vejo:

[root@sci-fi ~]# chage -l jedi
Last password change                    : Jun 21, 2015
Password expires                    : never
Password inactive                   : never
Account expires                     : never
Minimum number of days between password change      : 0
Maximum number of days between password change      : 99999
Number of days of warning before password expires   : 7

[root@sci-fi ~]# passwd -S jedi
jedi PS 2015-06-20 0 99999 7 -1 (Password set, SHA512 crypt.)

Quando eu coincidir os resultados com o que é visto em / etc / shadow para a nova conta, recebo 6/20/2015 como mostra passwd . Aqui está a época convertida em um valor de data para o usuário jedi:

[root@sci-fi ~]# date -d@"$(echo "$(awk -F ":" '/jedi/ {print $3}' /etc/shadow)*86400"|bc)"
Sat Jun 20 20:00:00 EDT 2015

Então, o que está correto?

** Embora a resposta correta já tenha sido dada abaixo. Fiz um pouco mais de escavação e consegui provar razoavelmente que a resposta está correta. Este link foi muito útil:

link

  1. Quando uma senha é definida através do comando passwd, o / etc / shadow irá gravar o número de dias desde a época (1/1/1970) usando o tempo em UTC

Eu fiz um teste para provar isso. Eu defino uma nova senha na conta jedi. Os dias atuais desde a época são 16823, conforme calculado abaixo

[root@sci-fi ~]# echo $(($(date --utc --date "$1" +%s)/86400))
16823

O arquivo / etc / shadow concorda com isso (então isso é um fato):

[root@sci-fi ~]# awk -F ":" '/jedi/ {print $3}' /etc/shadow
16823
  1. O programa chage usa a última alteração de senha conforme relatado no arquivo / etc / shadow para relatar a última data de alteração:

A ferramenta strace mostra-me que o arquivo / etc / shadow é acessado por chage. Sim, alguns outros arquivos são lidos por chage, mas apenas o arquivo de sombra tem os dias desde a época em que a senha foi definida pela última vez

[root@sci-fi ~]# strace chage -l jedi 2>&1 | grep etc
open("/etc/ld.so.cache", O_RDONLY)      = 3
access("/etc/shadow", F_OK)             = 0
open("/etc/passwd", O_RDONLY)           = 4
open("/etc/shadow", O_RDONLY)           = 5
open("/etc/localtime", O_RDONLY)        = 6

Por causa disso, não é surpresa que o programa chage relate que o a senha foi alterada pela última vez em 23 de janeiro

[root@sci-fi ~]# chage -l jedi | head -1
Last password change                    : Jan 23, 2016
  1. O comando passwd é um pouco diferente e não tão claro.

Usando strace, parece que o comando passwd também extrai o última alteração de senha de / etc / shadow.

[root@sci-fi ~]# strace passwd -S jedi 2>&1 | grep etc
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/etc/nsswitch.conf", O_RDONLY)    = 4
read(4, "#\n# /etc/nsswitch.conf\n#\n# An ex"..., 4096) = 1688
open("/etc/ld.so.cache", O_RDONLY)      = 4
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
open("/etc/libuser.conf", O_RDONLY)     = 4
open("/etc/login.defs", O_RDONLY)       = 4
open("/etc/default/useradd", O_RDONLY)  = 4
stat("/etc/shadow", {st_mode=S_IFREG, st_size=1295, ...}) = 0
open("/etc/passwd", O_RDONLY)           = 4
open("/etc/shadow", O_RDONLY)           = 4
open("/etc/localtime", O_RDONLY)        = 4
  1. A saída "passwd -S" parece reportar a última alteração de senha tempo como registrado em / etc / shadow em relação ao local de o sistema. Aqui está minha localidade e a saída de "passwd -S":

    [root @ sci-fi ~] # ls -l / etc / localtime lrwxrwxrwx. 1 raiz do root 36 Jan 23 17:59 / etc / localtime - > / usr / share / zoneinfo / America / New_York

    [root @ sci-fi ~] # passwd -S jedi jedi PS 2016-01-22 0 99999 7 -1 (senha definida, SHA512 crypt.)

Para testar minha teoria. Eu mudei a zona para Londres (5 horas à frente):

[root@sci-fi ~]# ls -l /etc/localtime
lrwxrwxrwx. 1 root root 33 Jan 24 00:33 /etc/localtime -> /usr/share/zoneinfo/Europe/London

[root@sci-fi ~]# passwd -S jedi
jedi PS 2016-01-23 0 99999 7 -1 (Password set, SHA512 crypt.)

A saída do comando "passwd -S" agora corresponde ao que é visto por "chage -l".

Se eu alterar o fuso horário para o padrão de montanha (MST), obtenho o mesmo valor que usei no fuso horário EST:

[root@sci-fi ~]# ls -l /etc/localtime
lrwxrwxrwx. 1 root root 34 Jan 23 17:49 /etc/localtime -> /usr/share/zoneinfo/America/Denver

[root@sci-fi ~]# passwd -S jedi
jedi PS 2016-01-22 0 99999 7 -1 (Password set, SHA512 crypt.)
    
por Suave-V 20.01.2016 / 00:47

1 resposta

0

Provavelmente ambos:

link

Se você adicionar o sinalizador "-u" até o momento em seu cálculo, espero que ele retorne também no dia 21 de junho.

    
por 20.01.2016 / 01:12