J'ai modifié le fichier sudoers sur mon instance EC2 et je reçois depuis des erreurs de syntaxe lorsque je tente d'exécuter des commandes sudo. Comment résoudre le problème ?

Dernière mise à jour : 17/09/2021

J'ai modifié manuellement le fichier sudoers sur mon service Amazon Elastic Compute Cloud (instance Amazon EC2). Je reçois à présent une erreur de syntaxe similaire à ce qui suit lorsque j'essaie d'exécuter des commandes sudo su ou des commandes qui requièrent un accès utilisateur privilégié :

  • « /etc/sudoers: syntax error near line xx »
  • « sudo: parse error in /etc/sudoers near line xx »
  • « sudo: no valid sudoers sources found, quitting »
  • « sudo : unable to initialize policy plugin »

Brève description

Cette erreur de syntaxe se produit lorsque le fichier /etc/sudoers est modifié manuellement pour apporter des modifications à l'utilisateur sudo et que des caractères indésirables sont ajoutés au fichier. Il peut en résulter une instance affectée ne pouvant pas exécuter la commande sudo su ou des commandes nécessitant un accès utilisateur privilégié. Pour éliminer cette erreur de syntaxe, arrêtez l'instance, détachez son volume racine, attachez-le à une instance de récupération, montez le volume racine en tant que volume secondaire, puis annulez les modifications apportées au fichier sudoers.

Avertissement : avant de lancer cette procédure, notez ce qui suit :

Solution

Remarque : ne modifiez pas manuellement le fichier sudoers à l'aide d'un éditeur de texte tel que vi, vim ou nano sur une instance en cours d'exécution à laquelle vous pouvez vous connecter. Utilisez toujours visudo pour modifier le fichier /etc/sudoers sur les instances auxquelles vous pouvez vous connecter. Visudo vérifie les erreurs d'analyse lorsque vous effectuez des modifications. Ainsi, tout problème introduit dans le fichier est signalé avant d'enregistrer les modifications.

1.    Ouvrez la console Amazon EC2.

2.    Sélectionnez Instances dans le volet de navigation, puis sélectionnez l'instance affectée.

3.    Sélectionnez Actions, puis Instance State (État de l'instance), et enfin Stop (Arrêter).

4.    Dans l'onglet Description sélectionnez le Root device (Périphérique racine), puis l'EBS ID (Identifiant EBS).

5.    Choisissez Actions, puis Détacher le volume (/dev/sda1 ou /dev/xvda) et Oui, détacher.

6.    Vérifiez que l'état est défini Disponible.

7.    Lancez une nouvelle instance EC2 dans la même zone de disponibilité que l'instance d'origine. Cette nouvelle instance devient votre instance de secours.

8.    Une fois que l'instance de secours démarre, choisissez Volumes dans le volet de navigation, puis sélectionnez le volume racine détaché de l'instance d'origine.

9.    Sélectionnez Actions, puis Attacher un volume.

10.    Sélectionnez l'ID d'instance de secours (1-xxxx), puis entrez un nom de périphérique (/dev/sdf, par exemple).

11.    Utilisez SSH pour vous connecter à l'instance de secours à l'aide de votre paire de clés.

12.    Exécutez la commande lsblk pour vérifier le nom du volume attaché.

lsblk

Voici un exemple de sortie.

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0    8G  0 disk
└─xvda1 202:1    0    8G  0 part /
xvdf    202:80   0  500G  0 disk
└─xvdf1 202:81   0  500G  0 part

13.    Créez un répertoire de montage, puis montez avec des privilèges d'utilisateur root :

Amazon Linux, Ubuntu et Debian :

sudo mount /dev/xvdf1 /mnt

Amazon Linux 2, CentOS 7 ou 8, SUSE Linux 12 et RHEL 7.x ou 8.x :

sudo mount -o nouuid /dev/xvdf1 /mnt

Dans la console, vérifiez le point de montage du volume nouvellement attaché. Habituellement, ce point de montage est /dev/xvdf1.

14.    Utilisez la commande chroot pour définir le répertoire monté comme répertoire racine.

for dir in {/dev,/dev/pts,/sys,/proc}; do sudo mount -o bind $dir /mnt$dir; done
chroot /mnt

15.    Modifiez le fichier sudoers à l'aide de la commande visudo.

visudo

Il existe deux options pour modifier le fichier :

Option 1 : annulez les modifications que vous avez effectuées et qui ont créé l'erreur de syntaxe.

Option 2 : remplacez le fichier /mnt/etc/sudoers par un fichier correct connu de l'instance de récupération en copiant le fichier depuis l'instance de récupération.

Créez une sauvegarde du fichier d'origine.

sudo mv /mnt/etc/sudoers /mnt/etc/sudoers.backup

Copiez le fichier sur l'instance.

sudo cp /etc/sudoers /mnt/etc/sudoers

16.    Une fois que vous avez modifié ou remplacé le fichier sudoers, démontez le volume.

for dir in {/dev,/dev/pts,/sys,/proc}; do umount /mnt$dir; done
sudo umount /mnt

17.    Attachez le volume à l'instance d'origine. Spécifiez le point de montage comme /dev/xvda ou /dev/sda1, car il s'agit du volume racine de l'instance d'origine.

18.    Démarrez l'instance d'origine.

19.    Connectez-vous à l'instance via SSH et essayez d'exécuter les commandes sudo.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?