Por que o PAM impede que o root use useradd?

0

Estou usando o Arch Linux em uma estação de trabalho de usuário único com o LXDE e autologin lxde-session para o usuário comum. Eu então "su" ou "sudo" para privilégios de root, e tento rodar "useradd."

useradd falha no meu sistema. Este sistema foi reinstalado do zero há menos de um ano, e teve um "pacman -Syu" regular rodando nele. Eu não faço muita administração de sistema personalizada; principalmente executar o LXDE e vim / gcc / make como minha conta de usuário regular. useradd também falha quando o pacman tenta executá-lo.

Recentemente encontrei um problema no qual o mariadb e o percona-server falhariam no sistema após a instalação, e o rastreou até o usuário mysql não ser criado corretamente. Tentando executar useradd manualmente, acho que esse utilitário foi quebrado. Pesquisando, as pessoas sugerem que isso pode ser um problema com arquivos / etc / shadow ou confg em /etc/pam.d/, então eu olhei para isso.

O erro que recebo é:     useradd: PAM: o serviço de autenticação não pode recuperar informações de autenticação

Correndo strace em useradd, parece ser capaz de abrir / etc / shadow e / etc / passwd, e getuid () retorna 0 para "root":

open("/etc/pam.d/other", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=127, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1a7c0eb000
read(3, "#%PAM-1.0\nauth\t\trequired\tpam_uni"..., 4096) = 127
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f1a7c0eb000, 4096)            = 0
getuid()                                = 0
getuid()                                = 0
open("/etc/login.defs", O_RDONLY)       = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=5519, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1a7c0eb000
read(3, "#\n# /etc/login.defs - Configurat"..., 4096) = 4096
read(3, "gular users using chfn - use\n# a"..., 4096) = 1423
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f1a7c0eb000, 4096)            = 0
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=610, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1a7c0eb000
read(3, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 610
close(3)                                = 0
munmap(0x7f1a7c0eb000, 4096)            = 0
geteuid()                               = 0
open("/etc/shadow", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0600, st_size=413, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1a7c0eb000
read(3, "root:x::::::\nbin:x:14871::::::\nd"..., 4096) = 413
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f1a7c0eb000, 4096)            = 0
write(2, "useradd: PAM: Authentication ser"..., 73useradd: PAM: Authentication service cannot retrieve authentication info
) = 73

Os arquivos de configuração parecem bem:

[root@robot1 jwatte]# cat /etc/pam.d/useradd 
#%PAM-1.0
auth        sufficient  pam_rootok.so
auth        required    pam_unix.so
account     required    pam_unix.so
session     required    pam_unix.so
password    required    pam_permit.so

[root@robot1 jwatte]# cat /etc/pam.d/other 
#%PAM-1.0
auth        required    pam_unix.so
account     required    pam_unix.so
password    required    pam_unix.so
session     required    pam_unix.so
[root@robot1 jwatte]# 

Como faço o próximo passo para resolver e depurar este problema? Existe alguma depuração que eu possa encontrar em qualquer lugar sobre o motivo pelo qual o PAM decide que isso deve falhar? O bom / velho / log / aututh.log não existe mais, e journalctl -b não é muito útil:

May 17 09:52:15 robot1 sudo[676]: pam_unix(sudo:session): session opened for user root by jwatte(uid=0)
May 17 09:52:15 robot1 useradd[677]: Authentication service cannot retrieve authentication info
May 17 09:52:15 robot1 useradd[677]: failed adding user 'mysql', data deleted

Ainda não consigo obter muita informação do PAM - especificamente, qual módulo falha, em que etapa? Eu li o código do useradd e o código do PAM (AAAUUGH! THE GOGGLES! NÃO FAZEM NADA!) Acabei adicionando pam_warn.so a "outros" e "useradd" para a ação "conta", e consegui mais uma (1) linha no journalctl:

May 17 11:04:54 robot1 useradd[29944]: pam_warn(useradd:account): function=[pam_sm_acct_mgmt] service=[useradd] terminal=[<unknown>] user=[root] ruser=[<unknown>] rhost=[<unknown>]

Importa que terminal, ruser e rhost sejam desconhecidos? Como eu descobriria?

    
por Jon Watte 18.05.2014 / 18:24

2 respostas

1

Veja a primeira linha em /etc/shadow : parece que falta um campo

    
por 19.06.2015 / 16:53
0

O desconhecido ruser e rhost são esperados, desde que você não seja remoto. O terminal desconhecido pode ser surpreendente, mas provavelmente não é a fonte do seu problema.

A maioria dos módulos PAM recebe um parâmetro debug que pode fornecer mais informações. Por exemplo,

auth        required    pam_unix.so debug

Você tem algo como o LDAP configurado para contas, como em /etc/nsswitch.conf ? O "não é possível recuperar informações de autenticação" lembra o tipo de erros que eu vi tentando adicionar usuários locais em um sistema com contas LDAP.

O Arch Linux tem algo parecido com o SELinux ou outra camada de segurança avançada?

    
por 19.05.2014 / 10:22