PAM이 루트가 useradd를 사용하는 것을 방지하는 이유는 무엇입니까?

PAM이 루트가 useradd를 사용하는 것을 방지하는 이유는 무엇입니까?

저는 일반 사용자를 위한 LXDE 및 lxde-session 자동 로그인 기능이 있는 단일 사용자 워크스테이션에서 Arch Linux를 사용하고 있습니다. 그런 다음 "su" 또는 "sudo"를 사용하여 루트 권한을 얻고 "useradd"를 실행하려고 합니다.

내 시스템에서 useradd가 실패합니다. 시스템은 1년도 채 되지 않아 처음부터 다시 설치되었으며 "pacman -Syu"가 정기적으로 실행됩니다. 저는 맞춤 시스템 관리를 많이 하지 않습니다. 주로 일반 사용자 계정으로 LXDE와 vim/gcc/make를 실행합니다. pacman이 useradd를 실행하려고 하면 실패합니다.

최근 설치 후 시스템에서 mariadb나 percona-server가 시작되지 않는 문제가 발생하여 mysql 사용자가 올바르게 생성되지 않는 것을 추적했습니다. useradd를 수동으로 실행하려고 할 때 유틸리티가 손상되었음을 발견했습니다. 인터넷 검색 후 사람들은 이것이 /etc/shadow 또는 /etc/pam.d/의 구성 파일에 문제가 있을 수 있다고 생각하여 조사했습니다.

내가 받는 오류는 다음과 같습니다. useradd: PAM: 인증 서비스가 인증 정보를 검색할 수 없습니다.

useradd에서 strace를 실행하면 /etc/shadow 및 /etc/passwd를 열 수 있는 것으로 보이며 getuid()는 "root"에 대해 0을 반환합니다.

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

구성 파일이 좋아 보입니다.

[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]# 

이 문제를 해결하고 디버그하기 위한 다음 단계는 무엇입니까? PAM 결정이 실패하는 이유에 대한 디버깅을 어디에서나 찾을 수 있습니까? 이전 /var/log/auth.log는 더 이상 존재하지 않으며 Journalctl -b는 별로 도움이 되지 않습니다.

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

아직도 PAM에서 많은 정보를 얻을 수 없습니다. 구체적으로 어떤 모듈이 어느 단계에서 실패했습니까? 나는 useradd에 대한 코드와 PAM에 대한 코드를 읽었습니다(아아아! 고글! 그들은 아무것도 하지 않습니다!) 결국 pam_warn.so를 "other"에 추가하고 "account" 작업에 대한 "useradd"를 추가했습니다. 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>]

터미널, ruser 및 rhost 알 수 없는 사이에 어떤 관계가 있습니까? 내가 어떻게 알아?

답변1

첫 번째 줄을 보세요 /etc/shadow. 필드가 누락된 것 같습니다.

답변2

알려지지 않은루터그리고주인당신이 멀지 않기 때문에 예상됩니다. 알려지지 않은단말기 놀랄 수도 있지만 그것이 당신의 고민의 원인이 아닐 수도 있습니다.

대부분의 PAM 모듈은디버그매개변수는 더 많은 정보를 제공할 수 있습니다. 예를 들어,

auth        required    pam_unix.so debug

와 같이 귀하의 계정에 LDAP와 같은 것을 구성했습니까 /etc/nsswitch.conf? "인증 정보를 검색할 수 없습니다."는 LDAP 계정을 사용하여 시스템에 로컬 사용자를 추가하려고 할 때 발생한 오류를 상기시킵니다.

Arch Linux용 SELinux나 기타 고급 보안 계층과 같은 것이 있습니까?

관련 정보