Résoudre les problèmes liés aux fichiers sudoers


Vous trouverez sur cette page des conseils sur l'utilisation de l'utilitaire de ligne de commande sudo, la gestion du plug-in sudoers, ainsi que sur la prévention ou la résolution des problèmes pouvant survenir.

Causes des problèmes

À chaque exécution de la commande sudo, le processus suivant a lieu pour valider les fichiers sudoers :

  • L'exactitude de la syntaxe est vérifiée.
  • Le contenu est analysé pour exclure certaines des erreurs logiques.
  • La propriété et les autorisations sont vérifiées.

La validation des fichiers sudoers peut échouer en raison de l'une des erreurs suivantes :

Erreurs de syntaxe

Vous devez suivre des règles de syntaxe spécifiques lorsque vous apportez des modifications aux fichiers sudoers. Tout écart par rapport à cette syntaxe, y compris (mais sans s'y limiter) un caractère manquant ou supplémentaire, ou une virgule inappropriée, peut rendre le fichier non valide. L'invalidation du fichier rend impossible l'utilisation de l'utilitaire sudo.

Solution

La solution consiste à utiliser l'utilitaire visudo pour modifier les fichiers sudoers. Il valide le contenu du fichier avant l'enregistrement et vous notifie en cas de problème. L'utilitaire visudo a été créé pour modifier le fichier de manière sécurisée.


Les exemples suivants montrent des exemples de syntaxe correcte et incorrecte :

 Syntaxe correcte

user   ALL=(ALL) ALL

 Syntaxe incorrecte

user   ALL=(ALL), ALL

Exemple d'erreur de syntaxe

$ sudo useradd username
/etc/sudoers:20:17: syntax error
user   ALL=(ALL), ALL
                ^

Erreurs logiques

Les erreurs de ce type peuvent être dues à l'une des raisons suivantes :

  • Compréhension erronée des principes du plug-in sudoers.
  • Écarts par rapport à la syntaxe correcte.

Cependant, les erreurs logiques ne sont pas reconnues lors de la validation, car elles n'enfreignent pas les règles de syntaxe et sont donc difficiles à détecter.

Solution

Vous devez lire attentivement la documentation officielle et respecter ses principes lorsque vous modifiez le fichier.

Google vous recommande également d'utiliser l'utilitaire visudo pour modifier les fichiers sudoers, car celui-ci peut détecter certains types d'erreurs logiques, par exemple :

  • Alias non définis ou non utilisés
  • Références cycliques
  • Entrées en double

Si des problèmes sont détectés, un message d'avertissement s'affiche.


Les exemples suivants montrent des exemples de logique correcte et incorrecte :

 Logique correcte

barbara   ALL=(ALL:ALL) /usr/bin/ls

 Logique incorrecte

barbara   ALL=(4LL:ALL) /usr/bin/ls
               ^
barbara   ALL=(ALL;ALL) /usr/bin/ls
                  ^
bar6ara   ALL=(ALL:ALL) /usr/bin/1s
   ^                             ^

Autorisations incorrectes

Outre les erreurs causées par le contenu des fichiers sudoers, des autorisations de fichiers excessives ou une propriété incorrecte de ces fichiers peuvent également entraîner l'échec de l'utilitaire sudo.

Solution

Une description de ces erreurs s'affiche dans le résultat de la commande sudo ayant échoué. Lisez la description du message d'erreur et apportez les corrections nécessaires.


 Voici un exemple d'autorisations de fichiers et de propriété correctes :

$ ls -l /etc/sudoers
-r--r----- 1 root root 700 Jan 1 12:00 /etc/sudoers

$ sudo useradd username

 L'exemple suivant montre l'erreur qui s'affiche lorsqu'il existe des autorisations redondantes pour le groupe d'autorisations tous les utilisateurs :

$ ls -l /etc/sudoers
-r--r---w- 1 root root 700 Jan 1 12:00 /etc/sudoers

$ sudo useradd username
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: error initializing audit plugin sudoers_audit

 L'exemple suivant montre l'erreur affichée en cas de propriété incorrecte. Dans cet exemple, un utilisateur dont l'ID n'est pas 0 (ou un utilisateur qui n'est pas root) est le propriétaire du fichier :

$ ls -l /etc/sudoers
-r--r----- 1 user user 700 Jan 1 12:00 /etc/sudoers

$ sudo useradd username
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: error initializing audit plugin sudoers_audit

Pour en savoir plus sur la configuration des fichiers sudoers, consultez le Manuel de sudoers.

Pour savoir comment gérer et utiliser l'éditeur visudo, consultez le manuel de Visudo.

Conséquences des problèmes

Les problèmes liés aux fichiers sudoers ont des effets négatifs et peuvent affecter le fonctionnement de l'ensemble du système.

  • La commande sudo ne fonctionne plus.

    Il s'agit de la conséquence la plus notable des problèmes liés aux fichiers sudoers. Il en résulte qu'il est impossible pour les utilisateurs d'utiliser des droits élevés, ce qui bloque leur activité sur le serveur.

    Cependant, les défaillances des applications qui reposent sur la commande sudo sont les conséquences les plus destructrices et imprévisibles. Dans certains cas, cela peut causer l'échec complet de l'application, ce qui entraîne un comportement inattendu, des plantages ou une perte de données. Un autre exemple est le cas où la commande sudo est appelée par une application lors de la séquence de démarrage du système d'exploitation et échoue. Cela peut entraîner l'échec du système d'exploitation ou le blocage de la séquence de démarrage.

  • Possible accès non autorisé au système.

    Une autre conséquence risquée est que des problèmes liés aux fichiers sudoers peuvent entraîner un accès non autorisé au système. Cela peut se produire en raison d'une erreur logique, lorsque les règles des fichiers sudoers accordent des autorisations excessives à certains utilisateurs ou groupes.

    Cela peut également se produire quand le propriétaire du système désactive ou affaiblit temporairement les défenses du système afin de se connecter et de résoudre le problème.

Récupération en cas de problème

Si vous perdez les droits utilisateur élevés ou que vous ne pouvez pas utiliser la commande sudo en raison de problèmes liés aux fichiers sudoers, utilisez le compte super-utilisateur pour la récupération.

Dans les systèmes d'exploitation de type Unix, le super-utilisateur est un compte utilisateur spécial dont l'ID est égal à 0 et qui est généralement appelé root. Le super-utilisateur dispose d'un accès complet aux ressources système et peut effectuer n'importe quelle tâche d'administration sans restriction. Bien que les interactions avec l'OS pour le compte du super-utilisateur soient généralement considérées comme non sécurisées, cela peut être la seule option pour certaines tâches, telles que la récupération des fichiers sudoers.

La connexion directe en tant que super-utilisateur expose le système d'exploitation à des risques. Pour éviter ces risques, Google vous recommande d'utiliser une fonctionnalité de script de démarrage, car ce script est exécuté pour le compte du super-utilisateur.

En savoir plus sur les scripts de démarrage Compute Engine.

Pour récupérer les fichiers sudoers avec un script de démarrage, procédez comme suit :

  1. Créez une copie de sauvegarde du script de démarrage actuel s'il est déjà utilisé. L'approche de sauvegarde dépend de la configuration du script de démarrage.

    startup-script

    Si le contenu du script est défini directement dans la valeur de métadonnées, vous pouvez le copier vers le bucket Cloud Storage, un fichier local ou tout autre espace de stockage privé temporaire.

    startup-script-url

    Si le contenu du script se trouve déjà dans l'espace de stockage distant et que son adresse URL est utilisée, il vous suffit de supprimer temporairement la clé de métadonnées startup-script-url pour désactiver le script de démarrage actuel.

  2. Mettez à jour le script de démarrage avec la séquence de commandes suivante :

    mv /etc/sudoers /etc/sudoers.backup.$(date +"%s") && echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers && chown 0:0 /etc/sudoers && chmod 0440 /etc/sudoers
    

    En savoir plus sur l'action de cette commande

    mv /etc/sudoers /etc/sudoers.backup.$(date +"%s")

    Cette commande crée une copie du fichier /etc/sudoers avec un nom différent et supprime le fichier d'origine. Le nom du nouveau fichier est suffixé par un code temporel pour assurer l'unicité (par exemple, sudoers.backup.1672527600).

    echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers

    Cette commande crée le fichier /etc/sudoers précédemment supprimé, contenant une seule règle qui permet aux utilisateurs Google Cloud autorisés et ayant accès à la VM d'exécuter des commandes pour le compte de n'importe quel utilisateur du système. Cette règle existe toujours par défaut dans un fichier supplémentaire /etc/sudoers.d/google_sudoers.

    chown 0:0 /etc/sudoers

    Cette commande définit le propriétaire du fichier /etc/sudoers sur un utilisateur dont l'ID est 0 et le groupe de propriétaires sur un groupe dont l'ID est 0.

    chmod 0440 /etc/sudoers

    Cette commande passe les autorisations du fichier /etc/sudoers en lecture seule et n'autorise que son propriétaire et son groupe de propriétaires à lire le fichier.

  3. Arrêtez la VM, si elle est en cours d'exécution. Redémarrez la VM pour déclencher l'exécution du script de démarrage.

  4. Connectez-vous à la VM et modifiez le fichier sudoers défectueux pour le récupérer.

    sudo visudo /etc/sudoers.backup.TIMESTAMP
    
  5. Enregistrez les modifications et remplacez le fichier /etc/sudoers actuel par le fichier que vous venez de modifier.

    sudo mv /etc/sudoers.backup.TIMESTAMP /etc/sudoers
    
  6. Assurez-vous que le problème d'origine lié à l'utilisation de la commande sudo et de droits élevés a été résolu.

  7. Supprimez le script de démarrage temporaire et restaurez le script d'origine s'il était utilisé.

Étape suivante