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 commandesudo
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 fichierssudoers
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 :
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.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 est0
et le groupe de propriétaires sur un groupe dont l'ID est0
. -
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.
-
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.
Connectez-vous à la VM et modifiez le fichier
sudoers
défectueux pour le récupérer.sudo visudo /etc/sudoers.backup.TIMESTAMP
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
Assurez-vous que le problème d'origine lié à l'utilisation de la commande
sudo
et de droits élevés a été résolu.Supprimez le script de démarrage temporaire et restaurez le script d'origine s'il était utilisé.
Étape suivante
- Découvrez comment récupérer une VM inaccessible ou corrompue.
- Découvrez comment ajouter un disque existant à une autre VM.