Veja a primeira linha em /etc/shadow
: parece que falta um campo
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?
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?
Tags useradd pam arch-linux