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

Lecture de 5 minute(s)
0

Lorsque j'exécute des commandes sudo sur mon instance Linux Amazon Elastic Compute Cloud (Amazon EC2), un message d'erreur s’affiche.

Brève description

L'erreur suivante peut survenir lorsque vous tentez d'exécuter des commandes sudo sur une instance Linux Amazon EC2 :

  • « /usr/bin/sudo doit appartenir à uid 0 et avoir le bit set setuid défini »

Cette erreur survient lorsque le fichier /usr/bin/sudo appartient à un utilisateur autre qu'un utilisateur racine. Le fichier /usr/bin/sudo doit avoir root:root pour propriétaire.

  • Erreur « sudo: /etc/sudoers est accessible en écriture universelle »

Cette erreur survient lorsque les autorisations du fichier /etc/sudoers sont incorrectes. Le fichier sudoers ne peut pas être accessible en écriture universelle. En effet, si un fichier est accessible en écriture universelle, ses droits d'écriture sont ouverts à tout un chacun. Par défaut, le mode de fichier du fichier sudoers est 0440. Ce mode permet au propriétaire et au groupe de lire le fichier, mais interdit à quiconque d'écrire dans le fichier.

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

Résolution

Utilisation de l'EC2 Serial Console

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

Avant d'utiliser la console série, accordez-lui un accès au niveau du compte. Créez ensuite des politiques de gestion des identités et des accès (IAM) AWS qui accordent l'accès aux utilisateurs IAM. De plus, chaque instance utilisant la console série doit inclure au moins un utilisateur utilisant un mot de passe. Si vous ne parvenez pas à accéder à l’instance ou à la console série, suivez les instructions de la section Méthode 2 : utilisation d’un script de données utilisateur. Pour en savoir plus sur la configuration de l'EC2 Serial Console pour Linux, reportez-vous à la section Configuration de l'accès à l'EC2 Serial Console.

Remarque : si des erreurs surviennent lors de l'exécution des commandes AWS CLI, vérifiez que vous utilisez la version la plus récente de l'AWS CLI.

Utilisation d'un script de données utilisateur

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

  • Distributions basées sur Red Hat comme SUSE, CentOS, Amazon Linux 1, Amazon Linux 2, Amazon Linux 2023 et RHEL
  • Distributions basées sur Debian comme Ubuntu

Important : cette procédure nécessite l'arrêt et le démarrage de l'instance EC2. Cela peut entraîner une perte de données, l'arrêt d'autres instances et des modifications de l'adresse IP publique. Pour en savoir plus, reportez-vous à la section Ce qu’il se passe lorsque vous arrêtez une instance.

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

  2. Choisissez Actions, État de l'instance, puis Arrêter.
    Remarque : si vous ne pouvez pas sélectionner Arrêter, cela signifie que l'instance est déjà arrêtée ou que son périphérique racine est un volume de stockage d'instances.

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

  4. Copiez et collez le script suivant dans le champ Modifier les données utilisateur, puis choisissez Enregistrer. Veillez à copier l'intégralité du script. Il ne faut pas insérer d'espaces supplémentaires lorsque vous collez le script :
    Distributions basées sur Red Hat

    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 permettent de récupérer les autorisations, le propriétaire et le groupe pour les plugins de politique de sécurité sudo personnalisés dans le répertoire /etc/sudoers.d/.
    Distributions basées sur Debian

    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 {} \;
    --//

    Les deux dernières lignes de commande permettent de récupérer les autorisations, le propriétaire et le groupe pour les plugins de politique de sécurité sudo personnalisés dans le répertoire /etc/sudoers.d/.
    Important : les autorisations pour /usr/bin/sudo varient selon les distributions Linux. Avant de définir des autorisations définitives, consultez celles d'une instance dotée d'un système d'exploitation similaire. Exécutez ls -l /usr/bin/sudo, puis basez-vous sur les autorisations de cet exemple.
    Vérifiez que l’instance de référence est une nouvelle installation qui n'est pas en production, afin que ce fichier reste inchangé.

  5. Démarrez l'instance, puis connectez-vous à l'instance à l'aide de SSH.
    Remarque : si vous recevez une erreur de syntaxe, consultez la page J'ai modifié le fichier sudoers sur mon instance EC2 et reçois des erreurs de syntaxe lorsque j’exécute des commandes sudo. Comment puis-je résoudre ce problème ?

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