sudo non può aprire / etc / sudoers


15

sudonon funziona. Arch Linux è installato su una chiave USB formattata con BTRFS. Ecco l'output quando eseguo '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) +++

Che dire ls -ld /etc?
Ansgar Esztermann,

Aggiunto nell'ultima modifica.
Chipuba,

3
Mostra l'output di ls -l $(which sudo), questa è la fonte del problema
daisy

Hai verificato che la sintassi dei sudoers non abbia problemi?
Tim

Aggiunti entrambi nelle modifiche, nessun errore di sintassi ...
chipuba,

Risposte:


19

Ok, sembra che tu non abbia accesso a / (impossibile cd),

Puoi provare chmod 755 /


@UlrichDangel davvero? Ho provato un programma semplice, con quelle chiamate, anche se il programma è suid-ed, la funzione restituirà comunque -1. (L'ho fatto chown root ./suid_teste chmod 4755 ./suid_test), codice sorgente: pastebin.mozilla.org/1650215
margherita,

'./suid_test': 0 setresuid: 0 0
chipuba

Non risolve il problema
chipuba,

"strace -uuli -f ./suid_test | & grep uid" non produce nulla.
Chipuba,

"strace -f ./suid_test | & grep uid" produce: execve ("./ suid_test", ["./suid_test"], [/ * 22 vars * /]) = 0 geteuid32 () = 0 setresuid32 (0, -1, -1) = 0 geteuid32 () = 0 write (1, "0 \ nsetresuid: 0 \ n0 \ n", 170 setresuid: 0
chipuba

1

L'eseguibile deve essere setuid e di proprietà di root:

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

Nel tuo binario manca uno di quei tratti. Fai questo (come root):

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

Potrei sbagliarmi, ma non credo che il bit di suid manchi come valore di ritorno per setresuid32(0, -1, -1)ed setresgid32(-1, 0, -1)è sia il tempo 0 che indica che il programma ha i permessi corretti
Ulrich Dangel,

Ulrich Dangel ha ragione, purtroppo. Ciò non fa differenza (e l'avevo già provato).
Chipuba,

0

come lo hai installato? devi montare la partizione sulla chiavetta USB come root per l'installazione. Non so perché, ma ha funzionato per me solo in questo modo. Successivamente puoi montare la partizione come utente e aggiornarla tramite rsync e non dovrebbe apparire alcun problema (ma non l'ho testato ampiamente).

Molto probabilmente c'è qualcosa di rotto nel sistema di montaggio dell'utente.


-2

Segui questi passi:

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

-1: questo è un pessimo consiglio. Non dovresti rompere ciecamente i permessi su tutto in /roote /etc. C'è un motivo per cui questi file vengono installati con autorizzazioni diverse. Il consiglio di impostare ciecamente le autorizzazioni eseguibili su tutti questi file è falso; pochi file in questi alberi lo richiedono. E il consiglio di dare permessi di lettura e esecuzione a tutto il mondo /rooted /etcè incredibilmente male; potresti anche inviare per e-mail la password di root a tutti gli utenti che possono accedere a quel sistema mentre ci sei, perché in questo modo hai già dato loro l'intera esecuzione del box.
Warren Young,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.