sudo는 / etc / sudoers를 열 수 없습니다


15

sudo작동하지 않습니다. BTRFS로 포맷 된 USB 키에 Arch Linux가 설치되어 있습니다. 'sudo'를 실행할 때의 결과는 다음과 같습니다.

$ sudo
sudo: unable to stat /etc/sudoers: Permission denied
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

$ ls -l /etc/sudoers
-r--r----- 1 root root 2849 May 18 15:00 /etc/sudoers

$ lsattr /etc/sudoers
--------------- /etc/sudoers

$ ls -ld /etc
drwxr-xr-x 1 root root 2476 May 25 13:45 /etc

$ ls -ld /
drwx------ 1 root root 142 May 25 06:51 /

$ ls -l $(which sudo)
---s--x--x 2 root root 123995 May 25 13:10 /usr/bin/sudo

$ strace -u ross sudo true 2>&1 | egrep '(sudo|set.*[ug].*id)'
execve("/usr/bin/sudo", ["sudo", "true"], [/* 30 vars */]) = 0
read(3, "31799 (sudo) R 31796 31796 31754"..., 1024) = 223
lstat64("/etc/sudo.conf", 0xbfcddeb0)   = -1 ENOENT (No such file or directory)
stat64("/usr/lib/sudoers.so", {st_mode=S_IFREG|0755, st_size=235092, ...}) = 0
open("/usr/lib/sudoers.so", O_RDONLY|O_CLOEXEC) = 3
stat64("/usr/lib/sudoers.so", {st_mode=S_IFREG|0755, st_size=235092, ...}) = 0
setresuid32(0, -1, -1)                  = 0
setresgid32(-1, 0, -1)                  = 0
setresuid32(-1, 1, -1)                  = 0
lstat64("/etc/sudoers", 0xbfcddd60)     = -1 EACCES (Permission denied)
setresuid32(-1, 0, -1)                  = 0
write(2, "sudo", 4sudo)                     = 4
write(2, "unable to stat /etc/sudoers", 27unable to stat /etc/sudoers) = 27
setresuid32(-1, 1, -1)                  = 0
setresgid32(-1, -1, -1)                 = 0
setresuid32(-1, 0, -1)                  = 0
setresuid32(-1, 0, -1)                  = 0
setresgid32(-1, 1000, -1)               = 0
write(2, "sudo", 4sudo)                     = 4
write(2, "no valid sudoers sources found, "..., 40no valid sudoers sources found, quitting) = 40
write(2, "sudo", 4sudo)                     = 4


$ ltrace -u ross sudo true 2>&1 | egrep '(sudo|stat|set.*[ug].*id)'
bindtextdomain("sudo", "/usr/share/locale")      = "/usr/share/locale"
textdomain("sudo")                               = "sudo"
fopen("/proc/31813/stat", "r")                   = 0x9e51d40
__xstat(3, "/dev/console", 0xbffd6074)           = 0
__xstat(3, "/dev/wscons", 0xbffd6074)            = -1
__xstat(3, "/dev/pts/4", 0xbffd6074)             = 0
__lxstat64(3, "/etc/sudo.conf", 0xbffd9040)      = -1
strlen("sudo")                                   = 4
memcpy(0x09e51e71, "sudo", 4)                    = 0x09e51e71
__xstat64(3, "/usr/lib/sudoers.so", 0xbffd810c)  = 0
dlopen("/usr/lib/sudoers.so", 257 <unfinished ...>
dlsym(0x09e51ef8, "sudoers_policy")              = 0xb75af520
__xstat64(3, "/usr/lib/sudoers.so", 0xbffd810c)  = 0
dlopen("/usr/lib/sudoers.so", 257)               = 0x09e51ef8
dlsym(0x09e51ef8, "sudoers_io")                  = 0xb75af560
fputs("sudo", 0xb7760920sudo)                        = 1
fputs("unable to stat /etc/sudoers", 0xb7760920unable to stat /etc/sudoers) = 1
fputs("sudo", 0xb7760920sudo)                        = 1
fputs("no valid sudoers sources found, "..., 0xb7760920no valid sudoers sources found, quitting) = 1
fputs("sudo", 0xb7760920sudo)                        = 1
+++ exited (status 1) +++

무엇에 대해 ls -ld /etc?
Ansgar Esztermann

최신 편집에 추가되었습니다.
chipuba

3
의 출력을 보여주십시오 ls -l $(which sudo). 그것이 문제의 원인입니다
데이지

sudoers 구문에 문제가 없는지 확인 했습니까?
Tim

편집에 구문 오류없이 둘 다 추가됨 ...
chipuba

답변:


19

좋아, 당신은 /에 대한 액세스 권한이없는 것 같습니다 (CD 할 수 없음),

너 시도 할 수있어 chmod 755 /


@UlrichDangel 정말? 프로그램이 suid-ed 되더라도 함수는 여전히 -1을 반환합니다. (내가 그랬어 chown root ./suid_testchmod 4755 ./suid_test: 소스 코드) pastebin.mozilla.org/1650215
데이지

'./suid_test': 0 setresuid :
chipuba

문제를 해결하지 못함
chipuba

"strace -uuli -f ./suid_test | & grep uid"는 아무 것도 생성하지 않습니다.
chipuba

"strace -f ./suid_test | & grep uid"는 다음을 생성합니다 : execve ( "./ suid_test", [ "./suid_test"], [/ * 22 vars * /]) = 0 geteuid32 () = 0 setresuid32 (0, -1, -1) = 0 geteuid32 () = 0 쓰기 (1, "0 \ nsetresuid : 0 \ n0 \ n", 170 setresuid : 0
chipuba

1

실행 파일은 setuid이고 root가 소유해야합니다.

$ ls -la /usr/bin/sudo
---s--x--x 2 root root 173154 Oct 19  2010 /usr/bin/sudo

바이너리에 이러한 특성 중 하나가 없습니다. 이 작업을 루트로 수행하십시오.

# chown root /usr/bin/sudo
# chmod u+xs /usr/bin/sudo

제가 틀릴 수도 있지만 나는 SUID 비트의 반환 값 실종 생각하지 않습니다 setresuid32(0, -1, -1)setresgid32(-1, 0, -1)프로그램에 올바른 사용 권한이 있음을 나타냅니다 두 시간 0
울리히 DANGEL

슬프게도 Ulrich Dangel이 옳습니다. 그것은 아무런 차이가 없습니다 (그리고 이미 시도했습니다).
chipuba

0

어떻게 설치 했습니까? 설치를 위해 루트로 USB 스틱에 파티션을 마운트해야합니다. 왜 그런지 모르겠지만 이런 식으로 만 효과가있었습니다. 나중에 파티션을 사용자로 마운트하고 rsync를 통해 업데이트 할 수 있으며 아무런 문제가 나타나지 않습니다 (그러나 이것을 광범위하게 테스트하지는 않았습니다).

사용자 마운트 시스템에 문제가있을 수 있습니다.


-2

다음과 같이하세요:

~# chmod 440 /etc/sudoers
~# chmod -R 755 /root
~# chmod -R 755 /etc
~# chmod 755 /etc/phpmyadmin/config.inc.php

-1 : 이것은 매우 나쁜 조언입니다. /root및의 모든 권한을 맹목적으로 박살 내서는 안됩니다 /etc. 이러한 파일이 다양한 권한으로 설치되는 이유가 있습니다. 이러한 모든 파일에 대해 실행 가능한 권한을 맹목적으로 설정하라는 조언은 가짜입니다. 이 트리에서 필요한 파일은 거의 없습니다. 그리고 조언은 세계 읽기 및 -execute의 모든 권한 부여하기 /root/etc놀랄만큼 나쁜입니다; 시스템을 사용하는 동안 시스템에 로그인 할 수있는 모든 사용자에게 루트 암호를 전자 메일로 보낼 수도 있습니다.
워렌 영
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.