PAM timestamp - como inspecionar o arquivo / var / run / sudo / user?

1

A documentação afirmou que:

... In the PAM timestamp scheme, the graphical administrative application prompts the user for the root password when it is launched. When the user has been authenticated, the pam_timestamp.so module creates a timestamp file. By default, this is created in the /var/run/sudo/ directory. If the timestamp file already exists, graphical administrative programs do not prompt for a password. Instead, the pam_timestamp.so module freshens the timestamp file, reserving an extra five minutes of unchallenged administrative access for the user.

You can verify the actual state of the timestamp file by inspecting the /var/run/sudo/ file. For the desktop, the relevant file is unknown:root. If it is present and its timestamp is less than five minutes old, the credentials are valid. ...

Eu então verifico o arquivo, seu formato binário:

[xiaobai@xiaobai note]$ sudo cat /var/run/sudo/ts/xiaobai 
(�r�3�+�[xiaobai@xiaobai note]$ 
[xiaobai@xiaobai note]$ sudo hexdump -C /var/run/sudo/ts/xiaobai
00000000  01 00 28 00 02 00 00 00  e8 03 00 00 72 17 00 00  |..(.........r...|
00000010  06 34 00 00 00 00 00 00  4e a7 c9 3a 00 00 00 00  |.4......N..:....|
00000020  01 88 00 00 00 00 00 00                           |........|
00000028
[xiaobai@xiaobai note]$
...
[xiaobai@xiaobai note]$
(�ry5S�V�[xiaobai@xiaobasudo hexdump -C /var/run/sudo/ts/xiaobai
00000000  01 00 28 00 02 00 00 00  e8 03 00 00 72 17 00 00  |..(.........r...|
00000010  af 35 00 00 00 00 00 00  5d 1a 24 07 00 00 00 00  |.5......].$.....|
00000020  01 88 00 00 00 00 00 00                           |........|
00000028
[xiaobai@xiaobai note]$

e o número aumenta lentamente de 4 e 5 e eu acho que é o minuto. Por que eu posso estar errado porque eu notei quando chegou a 9, parece que mais de 1 minuto. E depois das 9, ele se torna cada vez mais ilegível:

xiaobai@xiaobai note]$ sudo hexdump -C /var/run/sudo/ts/xiaobai
00000000  01 00 28 00 02 00 00 00  e8 03 00 00 72 17 00 00  |..(.........r...|
00000010  30 3b 00 00 00 00 00 00  59 f9 63 32 00 00 00 00  |0;......Y.c2....|
00000020  01 88 00 00 00 00 00 00                           |........|
00000028
[xiaobai@xiaobai note]$ sudo hexdump -C /var/run/sudo/ts/xiaobai
00000000  01 00 28 00 02 00 00 00  e8 03 00 00 72 17 00 00  |..(.........r...|
00000010  32 3b 00 00 00 00 00 00  ad 72 8f 1b 00 00 00 00  |2;.......r......|
00000020  01 88 00 00 00 00 00 00                           |........|
00000028
[xiaobai@xiaobai note]$ 

Então, minha primeira pergunta é, como devo inspecionar o arquivo / var / run / sudo / user que estava no formato binário ? O documento afirmou que "Se estiver presente e o seu carimbo de data / hora for inferior a cinco minutos , as credenciais são válidas." Como este < 5 minutos

E minha segunda pergunta, o PAM timestamp (pam_timestamp.so) e timestamp_timeout (/ etc / sudoers) é a mesma coisa?

p / s: Eu testei no Fedora 21.

    
por 林果皞 12.05.2015 / 20:07

1 resposta

2

Se você seguir o próximo link na página da documentação: link você pode encontrar uma referência ao utilitário pam_timestamp_check.

O utilitário pam_timestamp_check verificará a validade do arquivo e o valor de retorno poderá ser verificado.

Veja também man pam_timestamp_check para detalhes.

No meu sistema (Linux Mint), também descobri que pam_timestamp_check sempre retorna o código de saída 7 - O registro de data e hora não é válido. Usando strace pam_timestamp_check para depurar o processo, ele retorna o código de saída 2 - O binário não é setuid root. Depois de fazer o setuid binário usando chmod u+s /usr/bin/strace , consegui rastrear o processo:

lambert # strace pam_timestamp_check root
.
.
lstat("/var/run/sudo/lambert/9:root", {st_mode=S_IFREG|0600, st_size=57, ...}) = 0
access("/var/run/utmpx", F_OK)          = -1 ENOENT (No such file or directory)
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
access("/var/run/utmpx", F_OK)          = -1 ENOENT (No such file or directory)
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
exit_group(7)                           = ?
+++ exited with 7 +++

A partir desta saída, posso ver que /var/run/utmp está marcado e não pode ser encontrado.

A pesquisa no meu sistema de arquivos mostra que o arquivo utmp está localizado em /run/utmp em vez de /var/run/utmp . Depois de criar o arquivo usando:

touch /var/run/utmp
chmod 664 /var/run/utmp
chown root:utmp /var/run/utmp

Consegui iniciar uma nova sessão de sudo (a partir de um novo terminal):

lambert $ sudo su
lambert # ls -l /var/run/utmp
-rw-rw-r-- 1 root utmp 384 mei 12 21:59 /var/run/utmp
#logout
lambert $ pam_timestamp_check root
lambert $ echo $?
0
    
por 12.05.2015 / 20:23