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


238

Comment modifier un fichier sudoers invalide? Cela renvoie l'erreur ci-dessous et ne me permet pas de modifier à nouveau pour la 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

2
excellente question compte tenu de cette page crée cette erreur help.ubuntu.com/community/RootSudoTimeout

Réponses:


361

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

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. ouvrez simplement une fenêtre de terminal et lancez cette pkexeccommande.

En supposant que vous (ou un autre utilisateur) êtes autorisé à exécuter des programmes comme rootavec PolicyKit, vous pouvez entrer votre mot de passe, puis il s'exécutera en visudotant que root, et vous pourrez y remédier /etc/sudoers.

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

Si vous rencontrez une situation connexe dans laquelle 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 ce cas, mais commun dans d'autres), vous pouvez démarrer un shell racine interactif avec pkexec bash. De manière générale, toute commande non graphique que vous exécuteriez sudopeut être exécutée à la pkexecplace.

(S'il existe plus d'un compte utilisateur sur le système autorisé à exécuter des programmes comme rootavec PolicyKit, il vous sera demandé de sélectionner celui que vous souhaitez 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 live CD Ubuntu (comme le CD que vous avez probablement utilisé pour installer Ubuntu) et montez le système de fichiers pour le système installé. Vous pouvez le faire en exécutant sudo parted -lpour afficher vos partitions - il n'y a probablement qu'une 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 éditer le fichier sudoers du système installé avec sudo nano -w /mnt/etc/sudoers. Ou, mieux encore, vous pouvez le modifier avec

sudo visudo -f /mnt/etc/sudoers

(ce qui vous empêchera de sauvegarder un fichier sudoers avec une syntaxe incorrecte).


7
pkexec / usr / sbin / visudo a fonctionné sous debian 7
marinara

10
SAINTE VACHE! Merci beaucoup! Sauvé mon bacon. Ajout d'un fichier comme suggéré dans le répertoire etc / sudoers.d / EN UTILISANT UN ÉDITEUR DE TEXTE RÉGULIER (DON-T__D-O__T-HAT !!!). Perdu toute capacité à faire des privilèges élevés, y compris, l'édition du fichier fautif. Cela a aidé à éditer le fichier. Bizarre cependant, je devais d'abord éditer / etc / sudoers, puis il trouva les erreurs dans l'autre fichier et l'ouvrit pour moi. EVEN WEIRDER, la directive du fichier / etc / sudoers 'inlcudedir /etc/sudoers.d' a été commentée et est toujours incluse.
Dennis

4
@Dennis De manière quelque peu déroutante, les #includedirectives dans les sudoersfichiers sont traitées spécialement; le début #ne fait pas que le reste de la ligne soit interprété comme un commentaire, dans ce cas. Comme man sudoersdit: "Le signe dièse ('#') est utilisé pour indiquer un commentaire (sauf s'il fait partie d'une directive #include ou si ..." Voir aussi visudo: #includedir sudoers.d (archivé de lzone.de/ blog )
Eliah Kagan

5
Mon utilisateur est sudoer mais j'ai eu cette erreur: Erreur lors de l'exécution de la commande en tant qu'un autre utilisateur: Non autorisé
SuB

2
Dans Ubuntu 16.04, pkexec visudodemande un mot de passe, qui n’accepte pas le mot de passe correct. Il génère une erreur "ÉCHEC AUTHENTIFICATION".
Juha Untinen

54

Toujours utiliser visudopour modifier votre fichier sudoers, ne le modifiez jamais directement vous-même. Cela vous empêchera de l'enregistrer sur le disque à moins qu'il ne soit validé.


17
le recul est 20/20
code_monk

4
Cela n'empêchera pas le désastre. Il est assez facile de vous nier validement.
Josué

Le visudo peut-il être utilisé par les scritps? Si c'est le cas, comment?
Lukas

Je n'ai pas de visudo installé. J'ai donc fait pkexec vim. Ensuite, il affiche la liste des utilisateurs et demande un mot de passe. Lorsque je fournis un mot de passe, l'erreur est générée comme suit: "Erreur lors de l'exécution de la commande sous un autre utilisateur: non autorisé". S'il vous plaît aider
Shyamkkhadka

24

Tapez:

pkexec visudo

Puis changez la dernière ligne

#includedir /etc/sudoers

À:

#includedir /etc/sudoers.d

Cela devrait résoudre votre problème.


2
J'ai remarqué que la suppression de la tête #de liste des #includedircauses d'erreur de syntaxe #faisait partie de la directive, du moins sur Ubuntu 12.10.
SAFX

1
Cela m'a évité beaucoup de maux de tête. Merci beaucoup!
Addo Solutions

1
Je n'ai pas de visudo installé. J'ai donc fait pkexec vim. Ensuite, il affiche la liste des utilisateurs et demande un mot de passe. Lorsque je fournis un mot de passe, l'erreur est générée comme suit: "Erreur lors de l'exécution de la commande sous un autre utilisateur: non autorisé". S'il vous plaît aider
Shyamkkhadka

11

Si quelqu'un d'autre comme moi n'avait pas installé pkexec ou n'était pas capable d'exécuter vi, visudo, nano ou tout autre éditeur pour changer de fichier sudoers, vous pouvez être sûr de ce processus .. J'ai été enregistré 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 dans le menu de menu)
  • remonter le périphérique d’amorçage pour rw, appliquer un droit d’exécution correct pour l’utilisateur et modifier le fichier

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

corrige cette erreur et sois heureux :)


Bien que la solution pkexec suggérée par @ eliah-kagan semble plus facile, celle-ci est plus universelle. Sur ma machine, il s'est avéré qu'il n'y a pas de pkexec installé et, bien sûr, je ne pouvais pas l'installer car sudo apt-get install pkexec ne fonctionnait pas.
course à pied

Aussi dans cette approche, j'utiliserais visudoplutôt nano /etc/sudoers.
Pa4080

7

Si vous avez foiré votre sudoersdossier, vous devrez:

  • Redémarrez en mode de récupération (appuyez sur Échap au démarrage, choisissez l'option du mode de récupération sur l'écran de démarrage).
  • Choisissez l'option 'Activer le réseau' (sinon, votre système de fichiers sera monté en lecture seule. Qui le savait)
  • Choisissez l'option 'Drop to root shell'
  • courir visudo, réparer votre fichier
  • Redémarrez avec l'option normale

source: - http://mario.net.au/content/recover-etcsudoers-ubuntu-1204


Bonjour, supprime-t-il les iptables, fichiers du système existant?
Shyamkkhadka

6

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

Mais assurez-vous de ne pas avoir d'erreur de syntaxe. J'ai eu le même problème, mais j'ai passé des heures à réparer et à comprendre qu'il s'agit d'erreurs de syntaxe. Reportez-vous au manuel et corrigez-le.

Par exemple, dites que votre nom d'utilisateur est: dolly j'ai utilisé après ce qui est faux

 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 t'aides


Une meilleure approche que de s’assurer que vous n’avez pas d’erreurs de syntaxe est de toujours utiliser visudolors de l’édition de ces fichiers, ce qui vous évite d’avoir des erreurs de syntaxe avant la modification du fichier. visudon’est pas uniquement destiné à l’édition - /etc/sudoersil créera et modifiera également des fichiers /etc/sudoers.d. Cela fonctionnera également avec l’éditeur de texte de votre choix. Voir la page de manuel pour plus de détails.
Eliah Kagan

En ce qui concerne l’autorisation spécifique, notez que ceci n’est utile que pour des commandes / applications très simples, car toute application suffisamment complexe (y compris thunderbird, qui ne devrait jamais être exécutée en tant que root) donnera effectivement à l’utilisateur un accès complet au système lorsqu’elle sera exécutée en tant que root. Même une fonctionnalité apparemment simple ouvre la porte à un accès root complet. Par exemple, un utilisateur pouvant exécuter un programme pouvant enregistrer un fichier à un emplacement arbitraire en tant que root peut obtenir un accès root complet (il peut installer le vôtre /etc/sudoers, ou si les limitations de syntaxe le permettent, il peut installer le vôtre /etc/crontab).
Eliah Kagan

3

exécuter le mode de récupération puis tapez ce

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

seuls le groupe et l'utilisateur root doivent avoir lu privilège


3

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


2

Vous pouvez également modifier votre entrée de démarrage lorsque vous êtes dans grub.

Redémarrez simplement votre ordinateur et attendez que grub apparaisse. Puis appuyez sur "e" sur l'entrée "Ubuntu" pour le modifier.

Cherchez 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 pourrez éditer le fichier sudoers avec s.th. comme nano / etc / sudoers à son état précédent.

Puis redémarrez et c'est fait.


2
pkexec visudo

puis revenez sur vos erreurs


1
pas nécessaire d'utiliser pkexec
Braiam

@Braiam visudodoit être lancé en tant que root. Si sudoça ne marche pas, pkexecça marche parfois. Ceci est couvert par ma réponse précédente ... mais c'est une réponse correcte, visudoelle ne fonctionnera pas en soi (si elle n'est pas exécutée en tant que root), et des réponses correctes et brèves peuvent être utiles, même lorsque leurs recommandations se chevauchent considérablement avec d'autres réponses. Bien sûr, si l’on passe en mode de récupération, il s’agit d’un shell root et ni sudoni visudonécessaire pour des commandes comme pkexec. C'est peut-être ce que vous voulez dire ...
Eliah Kagan

0

Dans Ubuntu 16.04 s’exécutant sur une VirtualBox (cela ne devrait pas faire de différence), les méthodes ci-dessus ne fonctionnaient pas pour moi (ligne non valide à la fin du fichier). Quel était le travail était:

  1. Redémarrez la VirtualBox
  2. Laissez-le démarrer normalement, jusqu'à ce qu'il vous demande votre nom d'utilisateur et votre 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 de dialogue 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 root@ubuntu-xenial:~#prompt, si le /etc/sudoersn'est pas trop cassé ou vide. Pas sûr de ce qui se passerait dans ce cas.
  6. Ensuite, vous pouvez simplement exécuter visudoet réparer le fichier.
  7. Ensuite Ctrl + X, vous serez invité à enregistrer le tampon modifié. Presse YetEnter
  8. Redémarrez la boîte et cela devrait fonctionner maintenant.

Au cas où votre /etc/sudoersest vide ou manque quelque chose, et vous pouvez le modifier, alors voici le contenu du mien:

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

Votre étape 4 n’a aucun sens, elle ne fonctionne que si votre mot de passe root est identique à votre utilisateur normal.
alfred

Ce qui est très commun dans une VM locale.
Juha Untinen

0

Bonne pratique: une fenêtre de terminal de sauvegarde et d’exécution sudo su. Sur un autre termianl, exécutez visudo ou sudo vim / etc / sudoers. Si quelque chose ne va pas, retournez à la première borne et corrigez le fichier. Vous pouvez demander, pourquoi ne pas simplement courir sudo suavant visudodans un terminal? Cela fonctionne aussi, mais vous avez plus de risques de fermer le terminal avant de le savoir.


-1

Il y a une solution plus simple. Sans redémarrage, en mode de récupération ou pkgexec( pkgexeccela ne fonctionne pas et je ne sais pas pourquoi ni comment je devrais l'utiliser), faites simplement:

su root # switch to root user, without using sudo (which is broken at this point)
your_favorite_editor /etc/sudoers # e.g. nano

Et puis corrigez l'erreur de syntaxe!


Quel est avec le downvote? A parfaitement fonctionné pour moi.
rien333
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.