Desde que troquei do Ubuntu para o Manjaro há vários meses, tenho tido um problema estranho: não consigo logar no console virtual, sempre recebo uma mensagem de "Login incorreto", embora todas as outras autenticações tenham funcionado perfeitamente. Hoje, finalmente decidi resolver isso, mas não tive sucesso.
getty
parece funcionar normalmente e invocar login
conforme o esperado.
$ ps auxww |grep getty
root 129384 0.0 0.0 7176 3880 tty3 Ss+ 22:47 0:00 /sbin/agetty -o -p -- \u --noclear - linux
Verifiquei que não há sobras /etc/nologin
de ou /var/run/nologin
, e as configurações relacionadas ( /etc/login.defs
, /etc/security/*
) estão totalmente intocadas e são padrões de distribuição bastante permissivos.
No entanto, ao tentar efetuar login no VC, estou recebendo (depois de habilitar a debug
opção para alguns módulos PAM):
dic 06 22:46:53 s0me0ne login[128494]: pam_systemd_home(login:auth): pam-systemd-homed authenticating
dic 06 22:46:53 s0me0ne login[128494]: pam_systemd_home(login:auth): New sd-bus connection (system-bus-pam-systemd-home-128494) opened.
dic 06 22:46:53 s0me0ne login[128494]: pam_systemd_home(login:auth): systemd-homed is not available: Could not activate remote peer 'org.freedesktop.home1': activation request failed: unknown unit
dic 06 22:46:53 s0me0ne login[128494]: pam_unix(login:auth): username [s0me0ne] obtained
dic 06 22:46:55 s0me0ne unix_chkpwd[129255]: password check failed for user (s0me0ne)
dic 06 22:46:55 s0me0ne login[128494]: pam_unix(login:auth): authentication failure; logname=LOGIN uid=0 euid=0 tty=/dev/tty3 ruser= rhost= user=s0me0ne
dic 06 22:46:56 s0me0ne login[128494]: FAILED LOGIN 1 FROM tty3 FOR s0me0ne, Authentication failure
Verifiquei novamente se todas as unix_chkpwd
instâncias presentes no sistema são SUID root e são hardlinks para o mesmo binário:
$ ls -li /usr/bin/unix_chkpwd /sbin/unix_chkpwd
220202420 -rwsr-sr-x 1 root root 26672 18 nov 12.58 /sbin/unix_chkpwd
220202420 -rwsr-sr-x 1 root root 26672 18 nov 12.58 /usr/bin/unix_chkpwd
Então me lembrei do bom e velho pamtester
truque e tentei:
$ pamtester -v login s0me0ne authenticate pamtester: invoking pam_start(login, s0me0ne, ...)
pamtester: performing operation - authenticate
Password:
pamtester: successfully authenticated
Funcionou perfeitamente e o PAM está feliz, sem erros nos logs.
A última coisa que tentei foi testar manualmente a unix_chkpwd
funcionalidade:
$ mkfifo /tmp/pw
$ echo -ne 'mypassword\0' >/tmp/pw &
[1] 137112
$ /sbin/unix_chkpwd s0me0ne nullok </tmp/pw
[1] + done echo -ne 'mypassword\0' > /tmp/pw
$ echo $?
0
Neste ponto, estou completamente travado e coçando a cabeça. Qualquer ideia é bem-vinda.