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

203

Comment puis-je modifier un fichier sudoers invalide? Il jette sous l'erreur et il ne me permet pas de modifier à nouveau pour le réparer.

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
    
posée YumYumYum 30.10.2011 - 20:15
la source

12 réponses

312

Sur un système Ubuntu moderne (et de nombreuses autres distributions GNU / Linux), corriger un fichier sudoers corrompu est en fait assez facile et ne nécessite pas de redémarrage, en utilisant un CD en direct ou un accès physique à la machine. / p>

Pour ce faire, 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 Terminal et d'exécuter cette commande pkexec .

En supposant que vous (ou un autre utilisateur) êtes autorisé à exécuter des programmes avec root avec PolicyKit, vous pouvez entrer votre mot de passe, puis il exécutera visudo comme root et vous pourrez corriger votre /etc/sudoers .

Si vous devez modifier l'un des fichiers de configuration dans /etc/sudoers.d (ce qui est rare dans cette situation, mais possible), utilisez pkexec visudo -f /etc/sudoers.d/filename .

Si vous devez exécuter des commandes d'administration système supplémentaires en tant que root pour résoudre le problème (ce qui est également rare dans ce cas, mais commun à d'autres), vous pouvez démarrer un shell racine interactif avec pkexec bash . En règle générale, toute commande non graphique exécutée avec sudo peut être exécutée avec pkexec .

(S'il y a plus d'un compte d'utilisateur sur le système autorisé à exécuter des programmes avec root avec PolicyKit, alors, pour chacune de ces actions, il vous sera demandé de sélectionner celle que vous voulez utiliser avant de recevoir pour 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 - alors 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 pour système installé. Vous pouvez le faire en exécutant sudo parted -l pour afficher vos partitions - il y a probablement 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é se trouve sur / dev / sda1. Ensuite, vous pouvez le monter avec sudo mount /dev/sda1 /mnt . Ensuite, vous pouvez modifier le fichier sudoers du système installé avec sudo nano -w /mnt/etc/sudoers . Ou mieux encore, 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).

    
réponse donnée Eliah Kagan 30.10.2011 - 20:45
la source
42

Utilisez toujours visudo pour éditer votre fichier sudoers, ne le modifiez jamais directement vous-même. Cela vous empêchera de l'enregistrer sur le disque, à moins de le valider.

    
réponse donnée Caesium 20.11.2011 - 18:08
la source
19

Saisissez:

pkexec visudo

Puis changez la dernière ligne

#includedir /etc/sudoers

Pour:

#includedir /etc/sudoers.d

Cela devrait résoudre votre problème.

    
réponse donnée Andrej Burcev 21.02.2013 - 19:23
la source
10

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

  • redémarrer
  • maintenez la touche Maj enfoncée pendant le démarrage pour avoir l’option du mode de récupération (entrez-la)
  • entrez la ligne de commande en tant que root (deuxième dernière option du menu grub)
  • Remontez le périphérique de démarrage pour rw, et appliquez le droit d’exécution pour l’utilisateur et modifiez le fichier

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

corrigez cette erreur et soyez heureux:)

    
réponse donnée Kresimir Pendic 20.10.2014 - 23:40
la source
5

Il n'y a rien à redire #include sudoer.d supprimer #include sudoer.d ne fera aucune différence.

Veuillez vous assurer de ne pas avoir d’erreurs de syntaxe. J'ai eu le même problème mais et passé des heures à réparer et juste compris qu'ils sont des erreurs de syntaxe. Reportez-vous au manuel et corrigez-les.

Par exemple Dites que votre nom d'utilisateur est: dolly J'ai utilisé ce qui ne va pas

 dolly ALL = (ALL) ALL NO PASSWD: ALL

la syntaxe correcte est

dolly ALL = (ALL) ALL //give permission to everything, not good

ou

dolly ALL=(ALL) NOPASSWD:/usr/bin/thurderbird //good, give specific permission

j'espère que cela vous aidera

    
réponse donnée Thusitha Nuwan 03.07.2012 - 01:15
la source
5

Si vous avez foiré votre fichier sudoers.Vous devrez:

  • Redémarrez en mode de récupération (appuyez sur Échap pendant le démarrage, choisissez l’option de mode de récupération sur l’écran grub)
  • Choisissez l'option "Activer la mise en réseau" (si vous ne le faites pas, votre système de fichiers sera monté en lecture seule. Qui savait)
  • Choisissez l'option "Drop to root shell"
  • exécutez visudo, corrigez votre fichier
  • Redémarrez avec l'option grub normale

source: - lien

    
réponse donnée streak 14.12.2012 - 11:59
la source
3

exécuter le mode de récupération, puis tapez ceci

chown -R root:root /etc/sudoers.d
chmod u=rwx,g=rx,o=rx /etc/sudoers.d/
chmod u=r,g=r,o= /etc/sudoers.d/*

seul le groupe et l'utilisateur root doivent avoir lu privelege

    
réponse donnée kosaidpo 20.11.2011 - 18:11
la source
2

Vous pouvez également modifier votre entrée de démarrage dans grub.

Redémarrez simplement votre PC et attendez que grub s'affiche. Puis appuyez sur "e" sur l'entrée "Ubuntu" pour l'éditer.

Recherchez une ligne avec "linux=" ou "kernel=" et ajoutez simplement un "single" à la fin de cette ligne.

Appuyez ensuite sur F10 pour démarrer cette entrée de démarrage modifiée temporairement. Cela vous donnera un shell (sans interface graphique) avec les droits root et vous pouvez éditer le fichier sudoers avec s.th. comme nano / etc / sudoers à son état précédent.

Puis redémarrez et c'est fini.

    
réponse donnée Markus Ressel 13.01.2013 - 05:41
la source
2

Vous pouvez également vous connecter en tant que root sur une console tty avec Ctrl + Fn ( Fn de 1 à 6) et exécuter visudo .

    
réponse donnée magisterludi 09.03.2013 - 08:12
la source
2
pkexec visudo

alors revenez sur vos erreurs

    
réponse donnée Bhavesh Gabani 01.01.2014 - 09:23
la source
0

J'ai trouvé le bug. Il se trouve dans les deux dernières lignes du fichier /etc/sudoers par défaut. Supprimez les entrées suivantes à la fin du fichier / etc / sudoers avec visudo .

#includedir /etc/sudoers.d
    
réponse donnée George Van Tuyl 23.02.2012 - 22:57
la source
0

Dans Ubuntu 16.04 exécuté sur un VirtualBox (ne devrait pas faire de différence), les méthodes ci-dessus ne fonctionnaient pas pour moi (ligne non valide à la fin du fichier). Qu'est-ce que le travail a été:

  1. Redémarrez VirtualBox
  2. Laisse-le démarrer normalement jusqu'à ce qu'il demande ton nom d'utilisateur et ton ampli; mot de passe dans la console
  3. Connectez-vous normalement avec votre nom d'utilisateur
  4. Ensuite, lorsque vous vous retrouvez dans la console (à condition que votre boîte ne démarre pas dans une interface graphique), donnez simplement la commande su - puis donnez le mot de passe de votre propre nom d'utilisateur.
  5. Il devrait maintenant se retrouver dans l'invite [email protected]:~# , si le /etc/sudoers n'est pas trop cassé ou vide. Je ne sais pas ce qui se passerait dans ce cas.
  6. Ensuite, vous pouvez simplement exécuter visudo et réparer le fichier.
  7. Ensuite, Ctrl + X demandera de sauvegarder le tampon modifié. Appuyez sur Y et Enter
  8. Redémarrez la boîte et cela devrait fonctionner maintenant.

Dans le cas où votre /etc/sudoers est vide ou manque quelque chose, et que vous pouvez l’éditer, alors voici le contenu de la mienne:

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

%sudo ALL=(ALL:ALL) ALL
    
réponse donnée Juha Untinen 14.08.2018 - 11:40
la source

Lire d'autres questions sur les étiquettes