sudo ne peut pas ouvrir / etc / sudoers

15

sudone marche pas. J'ai installé Arch Linux sur une clé USB formatée avec BTRFS. Voici la sortie lorsque j'exécute '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
la source
Et alors ls -ld /etc?
Ansgar Esztermann
Ajouté dans la dernière édition.
chipuba
3
Afficher la sortie de ls -l $(which sudo), c'est la source du problème
marguerite
Avez-vous vérifié que la syntaxe sudoers ne pose aucun problème?
Tim
Ajouté à la fois dans les modifications, pas d'erreurs de syntaxe ...
chipuba

Réponses:

19

Ok, vous ne semblez pas avoir accès à / (ne peut pas cd),

Peux-tu essayer chmod 755 /

Marguerite
la source
@UlrichDangel vraiment? J'ai essayé un programme simple, avec ces appels, même si le programme est suid-ed, la fonction retournera toujours -1. (J'ai fait chown root ./suid_testet chmod 4755 ./suid_test), code source: pastebin.mozilla.org/1650215
marguerite
'./suid_test': 0 setresuid: 0 0
chipuba
Ne
résout
"strace -uuli -f ./suid_test | & grep uid" ne produit rien.
chipuba
"strace -f ./suid_test | & grep uid" produit: 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'exécutable doit être setuid et détenu par root:

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

Votre binaire manque l'un de ces traits. Faites ceci (en tant que root):

# chown root /usr/bin/sudo
# chmod u+xs /usr/bin/sudo
Andrew Schleifer
la source
Je peux me tromper mais je ne pense pas que le bit suid soit manquant comme valeur de retour pour setresuid32(0, -1, -1)et setresgid32(-1, 0, -1)soit à la fois 0 ce qui indique que le programme a les autorisations correctes
Ulrich Dangel
Ulrich Dangel a malheureusement raison. Cela ne fait aucune différence (et je l'avais déjà essayé).
chipuba
0

comment l'avez-vous installé? vous devez monter la partition sur la clé USB en tant que root pour l'installation. Je ne sais pas pourquoi mais ça n'a fonctionné pour moi que de cette façon. Ensuite, vous pouvez monter la partition en tant qu'utilisateur et la mettre à jour via rsync et aucun problème ne devrait apparaître (mais je n'ai pas testé cela de manière approfondie).

Il y a très probablement quelque chose de cassé dans le système de montage utilisateur.

alk
la source
-2

Suivez ces étapes:

~# chmod 440 /etc/sudoers
~# chmod -R 755 /root
~# chmod -R 755 /etc
~# chmod 755 /etc/phpmyadmin/config.inc.php
Ananthaselvam P
la source
-1: C'est un très mauvais conseil. Vous ne devez pas casser aveuglément les autorisations sur tout dans /rootet /etc. Il y a une raison pour laquelle ces fichiers sont installés avec différentes autorisations. Le conseil pour définir aveuglément les autorisations exécutables sur tous ces fichiers est faux; peu de fichiers dans ces arbres l'exigent. Et le conseil de donner des autorisations de lecture et d'exécution à tout le monde /rootet /etcest incroyablement mauvais; vous pourriez aussi bien envoyer le mot de passe root à chaque utilisateur qui peut se connecter à ce système pendant que vous y êtes, car vous leur avez déjà donné la pleine mesure de la boîte en faisant cela.
Warren Young