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

Lecture de 5 minute(s)
0

J'ai modifié manuellement le fichier sudoers sur mon instance Amazon Elastic Compute Cloud (Amazon EC2). Je reçois à présent un message d'erreur de syntaxe similaire à ce qui suit lorsque j'exécute 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 vous modifiez manuellement le fichier /etc/sudoers 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 qui ne peut pas exécuter la commande sudo su ou des commandes qui nécessitent un accès utilisateur privilégié. Pour corriger cette erreur de syntaxe, procédez comme suit :

  1. Arrêtez l'instance.
  2. Détachez son volume racine.
  3. Attachez le volume racine à une instance de récupération en tant que volume secondaire.
  4. Montez le volume associé.
  5. Annulez les modifications apportées au fichier sudoers.

Résolution

Conditions préalables

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. Exécutez la commande visudo pour modifier le fichier /etc/sudoers sur les instances auxquelles vous pouvez vous connecter. La commande visudo vérifie les erreurs d'analyse lorsque vous effectuez des modifications et vous avertit des problèmes que vous introduisez dans le fichier avant d'enregistrer les modifications.

1.    Ouvrez la console Amazon EC2.

2.    Dans le volet de navigation, choisissez Instances.

3.    Sélectionnez l'instance affectée, choisissez État de l'instance, puis cliquez sur Arrêter l'instance.

4.    Dans la fenêtre contextuelle Arrêter l'instance ?, choisissez Arrêter.

5.    Sous l'onglet Stockage, cliquez sur l'ID de volume du nom du périphérique racine.

6.    Sur la page Volumes, sélectionnez le volume, choisissez Actions, puis Détacher le volume.

7.    Dans la fenêtre contextuelle, choisissez Détacher. Vérifiez que l'état du volume est défini sur Disponible.

8.    Lancez une nouvelle instance EC2 dans la même zone de disponibilité (AZ) que l'instance d'origine. La nouvelle instance devient votre instance de secours.

9.    Une fois l'instance de secours lancée, choisissez Volumes dans le volet de navigation.

10.    Sélectionnez le volume root dissocié de l'instance d'origine. Choisissez Actions, puis Associer un volume.

11.    Pour Instance, sélectionnez l'ID de l'instance de secours et saisissez un nom de périphérique. Choisissez ensuite Associer un volume.

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

13.    Pour vérifier le nom de périphérique du volume attaché, exécutez la commande lsblk.

lsblk

Exemple de sortie :

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTxvda    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

14.    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 2023, Amazon Linux 2, CentOS 7 ou 8, SUSE Linux 12 et RHEL 7.x ou 8.x :

sudo mount -o nouuid /dev/xvdf1 /mnt

Vérifiez le point de montage du nouveau volume attaché dans la console. Ce point de montage est généralement /dev/xvdf1.

15.    Exécutez la commande chroot dans le répertoire monté.

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

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

visudo

Lorsque vous modifiez le fichier, vous pouvez annuler les modifications que vous avez apportées et qui ont créé l'erreur de syntaxe. Vous pouvez également copier le fichier depuis l'instance de récupération et remplacer le fichier /mnt/etc/sudoers par un fichier connu correct :

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

17.    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; donesudo umount /mnt

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

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

20.    Utilisez SSH pour vous connecter à l'instance et exécutez les commandes sudo.

Informations connexes

Pourquoi ne puis-je pas exécuter de commandes sudo sur mon instance Linux EC2 ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 7 mois