Comment puis-je corriger des erreurs sudo sur mon instance EC2 lorsque j'exécute la commande sudo ?
J'ai modifié ou supprimé le fichier /etc/sudoers sur mon instance Amazon Elastic Compute Cloud (Amazon EC2). Je reçois ensuite des erreurs de syntaxe ou sudo lorsque j'exécute des commandes sudo.
Brève description
Lorsque vous supprimez ou configurez incorrectement le fichier /etc/sudoers, les erreurs de syntaxe ou sudo suivantes se produisent :
- « /etc/sudoers:abc:x: syntax error »
- « sudo: unable to open /etc/sudoers: No such file or directory »
- « sudo: no valid sudoers sources found, quitting »
- « sudo: error initializing audit plugin sudoers_audit »
Si l'une de ces erreurs s'affiche, vous ne pouvez pas accorder aux utilisateurs ou aux groupes d'utilisateurs des autorisations d'accès aux ressources du système. Pour corriger le fichier /etc/sudoers, attachez le disque racine à une instance de secours. Si vous ne parvenez pas à associer un disque racine à une instance de secours, utilisez les données utilisateur pour modifier le fichier.
Résolution
Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.
Attacher un disque racine à une instance de secours
Il est recommandé d'associer un disque racine à une instance de secours afin de modifier le fichier /etc/sudoers.
Prérequis : Lorsque vous arrêtez et redémarrez une instance, les données des volumes de stockage d'instance sont effacées. Sauvegardez sur le volume de stockage d'instances toutes les données que vous souhaitez conserver. Pour plus d'informations, consultez la section Type de périphérique racine. Aussi, lorsque vous arrêtez ou démarrez une instance, son adresse IP publique change. Lorsque vous acheminez le trafic externe vers votre instance, il est recommandé d'utiliser une adresse IP Elastic au lieu d'une adresse IP publique.
Pour associer un disque racine à une instance de secours, procédez comme suit :
-
Obtenez l'ID de volume et le nom du périphérique pour le volume racine de l'instance d'origine.
-
Lancez une instance de restauration à partir d'une AMI (Amazon Machine Image) avec la même version du système d'exploitation Linux dans la même zone de disponibilité.
-
Détachez le volume racine de l'instance d'origine, puis attachez-le à l'instance de restauration en tant que volume secondaire.
-
Connectez-vous à l'instance de restauration à l'aide de votre nouvelle paire de clés SSH.
-
Exécutez la commande suivante pour passer à l’utilisateur racine :
[ec2-user ~]$ sudo su
-
Pour identifier le nom et la partition du périphérique de stockage bloqué, exécutez la commande suivante depuis l'instance de restauration :
[root ~]$ lsblkNAME 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 101G 0 disk └─xvdf1 202:81 0 101G 0 part xvdg 202:96 0 30G 0 disk
Dans l'exemple précédent, les noms des périphériques de volume /dev/xvda et /dev/xvdf sont des volumes partitionnés, et /dev/xvdg n’en est pas un.
Si votre volume est partitionné, exécutez la commande suivante pour monter la partition /dev/xvdf1 au lieu du périphérique brut /dev/xvdf :[root ~]$ mount -o nouuid /dev/xvdf1 /mnt
Si vous utilisez une instance basée sur le système AWS Nitro, le nom du périphérique de volume est similaire à /dev/nvme[0-26]n1. Si votre instance est créée sur Nitro System avec NVMe, montez la partition dans le répertoire /mnt. Utilisez le nom de périphérique que vous avez identifié à l'aide de la commande lsblk :
[root ~]$ mount -o nouuid /dev/nvme1n1p1 /mnt
Pour plus d'informations, consultez la section Noms de périphériques pour les volumes sur les instances Amazon EC2.
-
Pour copier le fichier /etc/sudoers à partir de l'instance de travail en tant que sauvegarde, exécutez la commande suivante :
[root ~]$ cp /etc/sudoers /mnt/etc/sudoers.bak
-
Pour créer un environnement chroot dans le répertoire /mnt, exécutez la commande suivante :
[root ~]$ for i in dev proc sys run; do mount -o bind /$i /mnt/$i; done; chroot /mnt
Dans l’exemple précédent, les répertoires /dev, /proc, /sys et /run sont montés par liaison à partir du système de fichiers racine d’origine. Cela permet aux processus qui s'exécutent dans l'environnement chroot d'accéder à ces répertoires système. Pour modifier le fichier /etc/sudoers, exécutez la commande visudo dans l'environnement chroot :
[root ~]$ visudo
Remarque : Vous devez exécuter la commande visudo pour modifier le fichier sudoers. La commande visudo verrouille le fichier sudoers.
Si vous recevez des erreurs à l’issue de la commande précédente, exécutez la commande diff suivante pour comparer le fichier /etc/sudoers avec le nouveau fichier /etc/sudoers.bak :
[root ~]$ diff /etc/sudoers /etc/sudoers.bak
Remarque : Si vous n'avez pas apporté de modifications personnalisées avant de modifier le fichier, restaurez le fichier /etc/sudoers.bak dans /etc/sudoers. Pour quitter l'environnement chroot, exécutez la commande suivante :
[root ~]$ exit
- Pour démonter le volume racine, exécutez la commande suivante :
[root ~]$ umount -fl /mnt
- Détachez le volume racine qui était attaché en tant que volume secondaire de l'instance de restauration. Puis, rattachez-le à l'instance d'origine avec le nom du périphérique indiqué à l'étape 2.
- Démarrez l'instance d'origine, puis vérifiez que les commandes sudo fonctionnent correctement.
Utiliser les données utilisateur pour modifier le fichier
Remarque : La méthode de dépannage suivante utilise les données saisies par l'utilisateur. Pour utiliser cette méthode, vous devez définir un mot de passe pour l'utilisateur racine.
Pour utiliser les données utilisateur afin de modifier le fichier, procédez comme suit :
-
Ouvrez la console Amazon EC2.
-
Dans le volet de navigation, sélectionnez Instances, puis cliquez sur l’instance.
-
Sélectionnez État de l’instance, puis Arrêter l’instance.
-
Sous Arrêter l’instance ?, sélectionnez Arrêter.
-
Définissez un mot de passe temporaire pour l'utilisateur racine.
Exemple :Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config cloud_final_modules: - [scripts-user, always] --// Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt" #!/bin/bash chpasswd <<<"root:root" --//
Important : Ce mot de passe utilise du texte brut pour transmettre des secrets et n'est pas sécurisé. Assurez-vous de supprimer le mot de passe temporaire de l'utilisateur racine après avoir terminé les étapes de dépannage.
-
Démarrez l'instance, puis connectez-vous en tant que ec2-user.
-
Pour accéder au fichier /etc/sudoers, exécutez la commande pkexec suivante :
pkexec /usr/sbin/visudo
-
Saisissez le mot de passe de l'utilisateur racine, puis modifiez le fichier /etc/sudoers.
-
Exécutez une commande sudo pour vérifier que sudo fonctionne correctement.
Pour utiliser la console Amazon EC2 afin de supprimer les valeurs des données utilisateur, y compris le mot de passe de l'utilisateur racine, procédez comme suit :
- Ouvrez la console Amazon EC2.
- Dans le volet de navigation, sélectionnez Instances, puis cliquez sur l’instance.
- Sélectionnez Actions, puis Paramètres de l’instance.
- Sélectionnez Modifier les données utilisateur, puis supprimez toutes les données utilisateur.
Pour utiliser l'interface de ligne de commande AWS afin de supprimer les valeurs de données utilisateur, y compris le mot de passe de l'utilisateur racine, exécutez la commande modify-instance-attribute suivante :
aws ec2 modify-instance-attribute --instance-id example-instance-id --user-data Value=""
Remarque : Remplacez example-instance-id par votre ID d'instance.
Pour vérifier que vous avez supprimé les données utilisateur, exécutez la commande describe-instance-attribute suivante :
aws ec2 describe-instance-attribute --instance-id example-instance-id --attribute userData
Remarque : Remplacez example-instance-id par votre ID d'instance.
Après avoir supprimé les données utilisateur, démarrez l'instance.
Informations connexes
Pourquoi ne puis-je pas exécuter de commandes sudo sur mon instance Linux EC2 ?
Contenus pertinents
- demandé il y a 7 moislg...
- Réponse acceptéedemandé il y a 7 moislg...
- demandé il y a 2 anslg...
- demandé il y a 2 anslg...
- demandé il y a 9 moislg...
- AWS OFFICIELA mis à jour il y a 7 mois
- AWS OFFICIELA mis à jour il y a un an