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

Lecture de 5 minute(s)
0

Je reçois l'erreur : « sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set » ou « sudo: /etc/sudoers is world writable » lorsque j'essaie d'exécuter des commandes sudo sur mon instance Linux Amazon Elastic Compute Cloud (Amazon EC2).

Brève description

L'erreur sudo : « /usr/bin/sudo must be owned by uid 0 and have the setuid bit set » se produit lorsque le fichier**/usr/bin/sudo** appartient à un utilisateur non root. Le fichier /usr/bin/sudo doit avoir root:root comme propriétaire.

L'erreur « sudo: /etc/sudoers is world writable » se produit lorsque le fichier /etc/sudoers possède des autorisations erronées. Le fichier sudoers ne doit pas être accessible en écriture. Si un fichier est accessible en écriture, tous les utilisateurs pourront y écrire des données. Par défaut, le mode de fichier du fichier sudoers est 0440. Ceci permet au propriétaire et au groupe de lire le fichier et interdit à quiconque d'y écrire des données.

Vous pouvez corriger ces erreurs à l'aide de l'EC2 Serial Console ou d'un script de données utilisateur.

Résolution

Méthode 1 : Utiliser l'EC2 Serial Console

Si vous avez activé l'EC2 Serial Console pour Linux, alors vous pourrez l'utiliser pour résoudre les problèmes liés aux types d'instances Nitro pris en charge. La console série vous aide à résoudre les problèmes de démarrage, de configuration réseau et de configuration SSH. La console série se connecte à votre instance sans avoir besoin d'une connexion réseau fonctionnelle. Vous pouvez accéder à la console série à l'aide de la console Amazon EC2 ou de l'interface de la ligne de commande AWS (AWS CLI).

Avant d'utiliser la console série, accordez l'accès à la console au niveau du compte. Créez ensuite des politiques de gestion des identités et des accès AWS (AWS IAM) accordant l'accès à vos utilisateurs IAM. En outre, chaque instance qui utilise la console série doit inclure au moins un utilisateur avec mot de passe. Si votre instance n’est pas accessible et que vous n'avez pas configuré l'accès à la console série suivez les instructions de la section, Méthode 2 : Utilisez un script de données utilisateur. Pour plus d'informations sur la configuration de l'EC2 Serial Console pour Linux, voir Configurer l'accès à l'EC2 Serial Console.

Remarque : Si vous recevez des erreurs lors de l'exécution des commandes de l'AWS CLI, assurez-vous que vous utilisez la version la plus récente de l'AWS CLI.

Méthode 2 : Utiliser un script de données utilisateur

Utilisez un script de données utilisateur pour corriger les erreurs suivantes :

  • Distributions basées sur Red Hat telles que SUSE, CentOS, Amazon Linux 1, Amazon Linux 2 et RHEL.
  • Distributions basées sur Debian (comme Ubuntu).

1.Ouvrez la console Amazon EC2, puis sélectionnez votre instance.

2.Choisissez Actions, État de l'instance, Arrêter.

Remarque : Si Arrêter n'est pas activé, soit l'instance est déjà arrêtée, soit son périphérique racine est un volume de stockage d'instances.

3.Choisissez Actions, Paramètres de l'instance, Modifier les données utilisateur.

4.Copiez et collez le script suivant dans le champ Modifier les données utilisateur, puis choisissez Enregistrer. Assurez-vous de copier l'intégralité du script. N'insérez pas d'espaces supplémentaires lorsque vous collez le script.

Distributions basées sur Red Hat

Pour les distributions basées sur Red Hat, utilisez le script de données utilisateur suivant :

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
PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
rpm --setugids sudo && rpm --setperms sudo
find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \;
find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \;
--//

Remarque : Les deux dernières lignes de commande récupèrent les autorisations, le propriétaire et le groupe pour les plugins personnalisés de la politique de sécurité sudo dans le répertoire « /etc/sudoers.d/ ».

Distributions basées sur Debian

Pour les distributions basées sur Debian, utilisez le script de données utilisateur suivant :

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
/bin/chown root:root /usr/bin/sudo
/bin/chmod 4111 /usr/bin/sudo
/bin/chmod 644 /usr/lib/sudo/sudoers.so
/bin/chmod 0440 /etc/sudoers
/bin/chmod 750 /etc/sudoers.d
find /etc/sudoers.d/ -type f -exec /bin/chmod 0440 {} \;
find /etc/sudoers.d/ -type f -exec /bin/chown root:root {} \;
--//

Remarque : Les deux dernières lignes de commande récupèrent les autorisations, le propriétaire et le groupe pour les plugins personnalisés de la politique de sécurité sudo dans le répertoire « /etc/sudoers.d/ ».

5.Démarrez l'instance, puis connectez-vous à l'instance via SSH.

Remarque : Si vous recevez des erreurs de syntaxe lorsque vous essayez de vous connecter à l'instance via SSH, après avoir modifié le fichier sudoers, consultez la rubrique J'ai modifié le fichier sudoers sur mon instance EC2 et je reçois maintenant des erreurs de syntaxe lorsque j'essaie d'exécuter des commandes sudo. Comment puis-je résoudre ce problème ?

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