291 votes

Comment modifier un fichier '/etc/sudoers' invalide ?

Comment modifier un fichier sudoers invalide ? L'erreur suivante apparaît et je ne peux pas l'éditer à nouveau pour la corriger.

Voici ce qui se passe :

$ sudo visudo
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting

458voto

Eliah Kagan Points 111731

Sur un système Ubuntu moderne (et de nombreuses autres distributions GNU/Linux), la réparation d'un fichier corrompu sudoers est en fait assez facile, et ne nécessite pas de redémarrage, d'utilisation d'un CD live, ou d'accès physique à la machine.

Pour faire cela via SSH, connectez-vous à la machine et exécutez la commande pkexec visudo . Si vous avez un accès physique à la machine, SSH n'est pas nécessaire ; il suffit d'ouvrir une fenêtre de Terminal et d'exécuter ce qui suit pkexec comando.

En supposant que vous (ou un autre utilisateur) êtes autorisé à exécuter des programmes en tant que root avec PolicyKit, vous pouvez entrer votre mot de passe, et ensuite il s'exécutera visudo comme root et vous pouvez réparer votre /etc/sudoers .

Si vous avez besoin de modifier l'un des fichiers de configuration dans la section /etc/sudoers.d (ce qui est peu fréquent dans cette situation, mais possible), utilisez pkexec visudo -f /etc/sudoers.d/_filename_ .

Si vous avez une situation connexe où vous devez exécuter des commandes d'administration système supplémentaires en tant que root pour résoudre le problème (également rare dans cette circonstance, mais courant dans d'autres), vous pouvez démarrer un Shell interactif root avec pkexec bash . D'une manière générale, toute commande non graphique que vous exécutez avec la commande sudo peut être exécuté avec pkexec à la place.

(S'il y a plus d'un compte utilisateur sur le système autorisé à exécuter des programmes en tant que root avec PolicyKit, alors pour n'importe laquelle de ces actions, il vous sera demandé de sélectionner celle que vous voulez utiliser, avant de vous demander votre mot de passe).


Si cela ne fonctionne pas - par exemple, si aucun utilisateur n'est autorisé à exécuter des programmes en tant que root via PolicyKit -, démarrez à partir d'un CD live Ubuntu (comme le CD que vous avez probablement utilisé pour installer Ubuntu) et montez le système de fichiers du système installé. Vous pouvez le faire en exécutant sudo parted -l pour voir vos partitions - il n'y a probablement qu'une seule partition ext4, et c'est le système de fichiers racine.

Supposons que le système de fichiers racine du système Ubuntu installé soit sur /dev/sda1 . Ensuite, vous pouvez le monter avec sudo mount /dev/sda1 /mnt . Ensuite, vous pouvez éditer le fichier sudoers du système installé avec sudo nano -w /mnt/etc/sudoers . Ou, encore mieux, vous pouvez l'éditer avec

sudo visudo -f /mnt/etc/sudoers

(ce qui vous empêchera d'enregistrer un fichier sudoers avec une syntaxe incorrecte).

71voto

pele Points 9

Utilisez toujours visudo pour modifier votre fichier sudoers, ne le modifiez jamais directement vous-même. Il vous empêchera de l'enregistrer sur le disque s'il n'est pas validé.

32voto

Rob Vanstone Points 21

Tapez dans :

pkexec visudo

Ensuite, changez la dernière ligne

#includedir /etc/sudoers

A :

#includedir /etc/sudoers.d

Cela devrait résoudre votre problème.

15voto

Kresimir Pendic Points 1030

Si quelqu'un d'autre comme moi n'avait pas pkexec installé, ou n'était pas en mesure d'exécuter vi, visudo, nano ou tout autre éditeur pour modifier le fichier sudoers vous pouvez être sûr avec ce processus . J'ai été sauvé avec ceci :

  • redémarrer
  • maintenez la touche shift pendant le démarrage pour avoir l'option pour le mode de récupération (entrez-la)
  • entrer dans la ligne de commande en tant que root (avant-dernière option de mon menu Grub)
  • remonter le périphérique de démarrage pour rw, et appliquer le droit d'exécution pour l'utilisateur, et éditer le fichier

    mount -n -o remount,rw /
    chmod u+x /etc/sudoers
    visudo /etc/sudoers

réparez cette erreur et soyez heureux :)

13voto

Ali Tou Points 251

Lorsque cela se produit sur un système qui n'est pas doté d'une interface utilisateur graphique (votre serveur de production, par exemple), la fonction pkexec échoue avec ce message d'erreur :

polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized

Dans cette situation, l'utilisation de pkttyagent peut être utile. Si vous voulez supprimer un fichier corrompu en sudoers.d utilisez ceci :

pkttyagent -p $(echo $$) | pkexec rm /etc/sudoers.d/FILENAME

Si vous voulez récupérer la valeur par défaut /etc/sudoers vous pouvez utiliser cette phrase pour copier les configurations par défaut, en les plaçant dans un endroit non accessible à la racine (par exemple votre $HOME ). Ensuite, vous pouvez écraser votre fichier sudoers :

pkttyagent -p $(echo $$) | pkexec cp ~/sudoers /etc/sudoers

NOTE : En utilisant cette approche, après avoir exécuté votre commande, probablement votre accès au Shell sera perdu. Mais je suis sûr que perdre une session Shell est bien mieux que de perdre votre serveur ! (Selon le page d'accueil c'est le comportement normal : Lorsque ses services ne sont plus nécessaires, le processus peut être tué).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X