sudo no puede abrir / etc / sudoers

15

sudoNo funciona. Tengo Arch Linux instalado en una llave USB formateada con BTRFS. Aquí está la salida cuando ejecuto '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) +++
chipuba
fuente
¿Qué hay de ls -ld /etc?
Ansgar Esztermann
Agregado en la última edición.
chipuba
3
Mostrar salida de ls -l $(which sudo), esa es la fuente del problema
daisy
¿Has verificado que la sintaxis de sudoers no tiene problemas?
Tim
Se agregaron ambos en ediciones, sin errores de sintaxis ...
chipuba

Respuestas:

19

Ok, parece que no tienes acceso para / (no puedo cd),

Puedes intentar chmod 755 /

margarita
fuente
@UlrichDangel realmente? Intenté un programa simple, con esas llamadas, incluso si el programa es suid-ed, la función aún devolverá -1. (Lo hice chown root ./suid_testy chmod 4755 ./suid_test), código fuente: pastebin.mozilla.org/1650215
margarita
'./suid_test': 0 setresuid: 0 0
chipuba
No soluciona el problema
chipuba
"strace -uuli -f ./suid_test | & grep uid" no produce nada.
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 escritura (1, "0 \ nsetresuid: 0 \ n0 \ n", 170 setresuid: 0
chipuba
1

El ejecutable debe ser setuid y propiedad de root:

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

A tu binario le falta uno de esos rasgos. Haz esto (como root):

# chown root /usr/bin/sudo
# chmod u+xs /usr/bin/sudo
Andrew Schleifer
fuente
Puedo estar equivocado, pero no creo que falte el bit suid como valor de retorno setresuid32(0, -1, -1)y setresgid32(-1, 0, -1)sea ​​el tiempo 0, lo que indica que el programa tiene los permisos correctos
Ulrich Dangel
Ulrich Dangel tiene razón, tristemente. Eso no hace ninguna diferencia (y ya lo había intentado).
chipuba
0

como lo instalaste debe montar la partición en el dispositivo USB como raíz para la instalación. No sé por qué, pero funcionó para mí solo de esta manera. Luego puede montar la partición como usuario y actualizarla a través de rsync y no debería aparecer ningún problema (pero no lo he probado exhaustivamente).

Lo más probable es que haya algo roto en el sistema de montaje del usuario.

alk
fuente
-2

Sigue estos pasos:

~# chmod 440 /etc/sudoers
~# chmod -R 755 /root
~# chmod -R 755 /etc
~# chmod 755 /etc/phpmyadmin/config.inc.php
Ananthaselvam P
fuente
-1: Este es un muy mal consejo. No debe aplastar ciegamente los permisos de todo en /rooty /etc. Hay una razón por la que estos archivos se instalan con diferentes permisos. El consejo para establecer ciegamente permisos ejecutables en todos estos archivos es falso; pocos archivos en estos árboles lo requieren. Y el consejo para dar mundo-lectura y permisos -execute a todo /rooty /etces increíblemente mala; también puede enviar por correo electrónico la contraseña de root a cada usuario que pueda iniciar sesión en ese sistema mientras está en ello, porque ya les ha dado la ejecución completa de la caja al hacerlo.
Warren Young