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

Date de la dernière mise à jour : 27/03/2020

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 corriger 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 d'entamer la procédure, prenez note des points suivants :

Ré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 au fur et à mesure que vous effectuez des modifications. Ainsi, tout problème introduit dans le fichier sera porté à votre attention 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 Root device (Périphérique racine), puis EBS ID (Identifiant EBS).

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

6.    Vérifiez que State (État) est défini sur Available (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 est lancée, 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 de périphérique du volume attaché.

lsblk

Voici un exemple de résultat.

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 racine.

sudo mount /dev/xvdf1 /mnt

Vérifiez le point de montage dans la console pour le volume nouvellement attaché. Généralement, il s'agit de /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.


Cette page vous a-t-elle été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?