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

Dernière mise à jour : 12/05/2021

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). Comment puis-je résoudre ce problème ?

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-racine. 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 dispose d'autorisations incorrectes. Le fichier sudoers ne doit pas être accessible en écriture pour tous les utilisateurs. Si un fichier est accessible en écriture pour tous les utilisateurs, tout le monde peut écrire dans le fichier. Par défaut, le mode de fichier du fichier sudoers est 0440. Cela permet au propriétaire et au groupe de lire le fichier, et interdit à quiconque d'écrire dans le fichier.

Vous pouvez corriger ces erreurs à l'aide de la console série EC2 ou d'un script de données utilisateur.

Résolution

Méthode 1 : utiliser la console série EC2

Si vous avez activé la console série EC2 pour Linux, vous pouvez l'utiliser pour dépanner les types d'instances Nitro pris en charge. La console série EC2 permet de résoudre les problèmes de démarrage, ainsi que de configuration réseau et SSH. EC2 Serial Console se connecte à votre instance sans qu'aucune connexion réseau ne soit nécessaire. Vous pouvez accéder à EC2 Serial Console à l'aide de la console Amazon EC2 ou de l'interface de ligne de commande AWS (AWS CLI).

Avant d'utiliser EC2 Serial Console, accordez-lui l'accès au niveau du compte. Créez ensuite des stratégies AWS Identity and Access Management (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 suivante, Méthode 2 : utiliser un script de données utilisateur. Pour en savoir plus sur la configuration de la console série EC2 pour Linux, consultez Configurer l'accès à la console série EC2.

Remarque : en cas d'erreurs lors de l'exécution de commandes depuis AWS CLI, assurez-vous d'utiliser la version d'AWS CLI la plus récente.

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

Utilisez un script de données utilisateur pour corriger ces erreurs sur les éléments suivants :

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

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

2.    Choisissez Actions, Instance State (État de l'instance), Stop (Arrêter).

Remarque : si Stop (Arrêter) est désactivé, cela signifie que l'instance est déjà arrêtée ou que son périphérique racine est un volume de stockage d'instance.

3.    Choisissez Actions, Instance Settings (Paramètres de l'instance), Edit user data (Modifier les données utilisateur).

4.    Copiez et collez le script suivant dans le champ User Data (Données utilisateur), puis choisissez Save (Enregistrer). Veillez à copier le script en entier. N'insérez pas d'espaces supplémentaires en collant 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
--//

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
--//

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 section 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 puis-je résoudre ce problème ?


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


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