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