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

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

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 Amazon Elastic Compute Cloud (Amazon EC2) Linux. Comment 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 deux erreurs sur les distributions basées sur Red Hat telles que SUSE, CentOS, Amazon Linux 1, Amazon Linux 2 et RHEL ou celles basées sur Debian (comme Ubuntu) à l'aide du script de données utilisateur.

Résolution

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 d'instance), View/Change User Data (Afficher/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 résoudre ce problème ?


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

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


Vous avez besoin d’aide ?