Linux / Commande sudo : droits d’exécution et règles sudoers
sudo est un outil qui permet à un utilisateur autorisé par les politiques de sécurité d'exécuter une commande avec les privilèges d'un autre utilisateur. Si l'utilisateur cible n'est pas spécifié, il s'exécute généralement en tant que root, le compte superutilisateur, mais les privilèges réels et les méthodes d'authentification sont déterminés selon la politique sudo du système.
Il est utile pour effectuer des tâches nécessitant des privilèges administratifs, telles que l'installation de paquets ou la gestion des services, mais si une commande est saisie incorrectement, elle peut affecter l'ensemble du système. Avant d'exécuter, il est essentiel de vérifier les fichiers cibles et les options et d'accorder uniquement les privilèges minimaux nécessaires pour les commandes requises.
Les options ci-dessous décrivent principalement l’implémentation classique du projet Sudo. Des distributions utilisent sudo-rs, une implémentation en Rust : vérifiez sudo --version et sudo --help sur votre système pour connaître les fonctions disponibles.
Qu'est-ce que la commande sudo ?
sudo permet aux utilisateurs autorisés d'exécuter des commandes en tant que superutilisateur ou un autre utilisateur. Ce n'est pas simplement un outil pour donner à tous les utilisateurs des privilèges administratifs, mais une structure qui contrôle par politique qui peut exécuter quelle commande avec quels privilèges utilisateurs sur quel hôte.
Le plugin de politique par défaut est sudoers, et il utilise généralement les paramètres de /etc/sudoers et /etc/sudoers.d/. Le système compare la demande d'exécution avec la politique et, si nécessaire, authentifie l'utilisateur avant d'exécuter uniquement les commandes autorisées.
Vous pouvez consulter la méthode d'exécution détaillée sur la page officielle du manuel sudo, et la syntaxe de la politique sur la page officielle du manuel sudoers.
Syntaxe de base et première exécution
La syntaxe générale est la suivante.
sudo [options] command [arguments...]
Un exemple de mise à jour de la liste des paquets sur les systèmes Debian ou Ubuntu est le suivant.
sudo apt update
Si l'authentification est requise, elle demande généralement le mot de passe de l'utilisateur actuellement connecté. Certaines implémentations et configurations masquent la saisie du mot de passe, tandis que le sudo-rs par défaut sur Ubuntu 26.04 affiche un retour sous forme d'astérisques. Le comportement d'affichage dépend du fournisseur et de la politique pwfeedback ; il ne distingue pas en soi un fonctionnement normal d'une erreur. Selon la politique du système, il peut nécessiter le mot de passe de l'utilisateur cible ou une autre méthode d'authentification. Les notes d’Ubuntu 26.04 sur sudo-rs décrivent ce changement d’affichage.
Si la politique l’autorise et que l’authentification réussit, apt update et les processus qu’il lance disposent des droits de l’utilisateur cible. Votre shell actuel conserve ses propres droits : il ne devient pas automatiquement un shell administrateur.
Options sudo fréquemment utilisées
| Option | Fonction | Exemples d'utilisation et précautions |
|---|---|---|
-u user |
Exécuter la commande en tant qu'utilisateur spécifié | sudo -u postgres psql |
-g group |
Exécuter la commande en tant que groupe spécifié | Seuls les groupes autorisés par la politique peuvent être utilisés |
-l |
Vérifier les commandes autorisées de l'utilisateur actuel | Utile pour vérifier les autorisations avant l'exécution |
-v |
Vérifier ou renouveler les informations d'authentification | Mettre à jour le horodatage sans exécuter la commande |
-k |
Invalider le horodatage d'authentification actuel | Redemande une authentification dans la session si la règle l’exige |
-K |
Supprime tous les enregistrements d’authentification en cache de l’utilisateur | Portée plus large que -k dans le sudo classique |
-i |
Exécuter le shell de connexion de l'utilisateur cible | Utilisé pour diverses tâches administratives mais avec un champ d'application plus large |
-s |
Exécuter le shell | Vérifier l'objectif car il peut être affecté par l'environnement appelant |
-n |
Exécution non interactive | Échoue si une saisie de mot de passe est nécessaire |
-H |
Demande de définir HOME sur le répertoire personnel de l'utilisateur cible | Fonctionne selon la politique et n'est pas toujours nécessaire |
-E |
Demande de conserver les variables d'environnement de l'utilisateur | Doit être autorisé par la politique et utilisé avec prudence pour la sécurité |
-e, sudoedit |
Modifier les fichiers qui nécessitent des autorisations via un flux d'édition sécurisé | sudoedit /etc/example.conf |
Exécution en tant qu'utilisateur différent
Spécifiez l'utilisateur cible avec -u
Si l'utilisateur cible est omis, root est généralement utilisé. En spécifiant -u, vous pouvez exécuter en tant qu'autre utilisateur autorisé par la politique.
sudo -u postgres psql
Ceci est utile lorsque vous devez exécuter des commandes dans le contexte des permissions de fichiers ou de l'environnement d'un compte de service. Cependant, certains comptes de service ont des shells de connexion restreints, donc vérifiez d'abord l'objectif et la politique du compte.
Vérification de l'utilisateur d'exécution
Si la politique autorise id, cette commande permet de vérifier l’identité utilisée pour l’exécution. Un compte limité à d’autres commandes peut ne pas être autorisé à lancer cet exemple.
sudo id
sudo -u postgres id
La sortie réelle dépend de la configuration des utilisateurs et des groupes du système. Pour une vérification simple, inspecter les commandes individuelles est plus ciblé que d'ouvrir un shell administrateur.
Vérification des permissions autorisées et du cache d'authentification
Vérifiez les commandes qui peuvent être exécutées avec sudo -l
sudo -l affiche les paramètres par défaut et les commandes qui peuvent être exécutées pour l'utilisateur actuel. Vous pouvez vérifier d'abord avant de modifier les paramètres au hasard lorsque vous rencontrez une erreur de permission.
sudo -l
Les administrateurs peuvent vérifier les politiques des autres utilisateurs avec -U s'ils ont des privilèges, mais les utilisateurs ordinaires vérifient généralement uniquement leurs propres permissions.
Renouveler l'authentification avec sudo -v
sudo -v vérifie ou renouvelle les informations d'authentification stockées sans exécuter de commande. Il peut être utilisé pour préparer l'état d'authentification avant de lancer plusieurs commandes administratives.
sudo -v
Le temps et la portée par défaut du cache d'authentification dépendent de la politique sudoers. Ne pas être invité à entrer un mot de passe pendant une certaine période ne permet pas d'exécuter toutes les commandes, et chaque commande continue de subir des vérifications de politique.
Effacer le statut d'authentification avec sudo -k
Sans commande associée, sudo -k invalide les informations d’authentification mises en cache pour la session courante. Une nouvelle authentification sera demandée à la prochaine exécution seulement si la règle applicable l’exige ; une règle NOPASSWD reste sans saisie de mot de passe.
sudo -k
Avec l’implémentation classique, sudo -K supprime tous les enregistrements d’authentification en cache de l’utilisateur, indépendamment du terminal ou du processus parent. Consultez la version installée et sa politique pour connaître les détails applicables.
Points auxquels faire attention avec le chaînage de commandes et les pipes
sudo ne s'applique qu'à la commande immédiatement suivante
Seul le premier apt update dans la commande suivante est exécuté avec sudo. Le apt upgrade suivant s'exécute avec les autorisations de l'utilisateur actuel.
sudo apt update && apt upgrade
Si les deux commandes nécessitent des privilèges administrateur, la méthode la plus claire consiste à préfixer sudo à chaque commande.
sudo apt update && sudo apt upgrade
Pour comprendre avec précision les conditions d'exécution des opérateurs de connexion, vous pouvez également consulter les opérateurs de liaison des commandes Bash (en anglais).
Les deux côtés d'un pipe sont des processus séparés
Chaque côté du pipeline s’exécute séparément. Dans l’exemple suivant, id utilise les droits accordés par sudo, tandis que grep s’exécute avec ceux du shell courant.
sudo id | grep 'uid='
La commande de filtre en lecture seule nécessite souvent uniquement des autorisations d'utilisateur normal. Au lieu de donner des autorisations élevées à l'ensemble du pipeline, limitez-les uniquement aux étapes qui nécessitent réellement des autorisations élevées.
Exécuter un shell entier a une portée large
Vous pouvez exécuter plusieurs commandes dans un shell avec des autorisations cibles comme sudo sh -c 'command1 && command2', mais les règles de protection des arguments par guillemets deviennent complexes et la portée des autorisations est large. Pour des tâches simples, il est préférable de spécifier sudo pour chaque commande car cela bénéficie à la révision et à la journalisation.
Pourquoi « Permission refusée » se produit lors de la redirection
La redirection de sortie est gérée par le shell actuel
La commande suivante exécute uniquement echo avec des privilèges administratifs. La redirection > est traitée par le shell actuel avant que sudo ne s'exécute, il se peut donc qu'elle ne puisse pas ouvrir des fichiers protégés.
sudo echo 'value' > /etc/example.conf
Élevez les permissions uniquement pour les écritures nécessaires en utilisant tee.
Lorsque vous devez ajouter une courte ligne ou écraser, vous pouvez passer l'entrée standard à sudo tee.
printf '%s\n' 'value' | sudo tee /etc/example.conf > /dev/null
Pour ajouter à un fichier existant, utilisez tee -a. Assurez-vous de vérifier le chemin cible et si cela va écraser avant d'exécuter.
printf '%s\n' 'value' | sudo tee -a /etc/example.conf > /dev/null
Éditez les fichiers de configuration avec sudoedit
Si vous devez modifier plusieurs lignes de paramètres, sudoedit est plus approprié. Il vous permet d’éditer une copie temporaire en tant qu'utilisateur actuel selon la politique, puis reflète les modifications dans le fichier original.
sudoedit /etc/example.conf
Cela réduit le champ des privilèges par rapport à l'exécution de l'éditeur entier avec des privilèges administratifs, mais les restrictions réelles sur les liens symboliques et les répertoires accessibles en écriture dépendent de la version de sudo et de la politique.
Shell administratif : sudo -i et sudo -s
| Méthode | Comportement typique | Situations appropriées |
|---|---|---|
sudo command |
Exécuter une seule commande avec les privilèges de l'utilisateur cible | Recommandé pour la plupart des tâches administratives ponctuelles |
sudo -i |
Exécutez un shell qui simule l'environnement de connexion de l'utilisateur cible | Nécessaire lorsque des tâches administratives consécutives sont requises |
sudo -s |
Exécutez le shell spécifié par le shell ou l'environnement de l'utilisateur invoquant | Comprenez les différences environnementales et utilisez un shell si nécessaire |
Dans le shell administrateur, sudo n'est pas affiché pour chaque commande suivante, ce qui rend difficile l'évaluation de l'impact des erreurs. Pour une ou deux tâches, utilisez le format sudo command plutôt que le shell administrateur, et si vous ouvrez un shell, vérifiez continuellement l'invite ainsi que l'utilisateur actuel et le répertoire de travail.
Modifier les sudoers avec visudo
Pourquoi ne devriez-vous pas l'éditer directement ?
S'il y a une erreur de syntaxe dans /etc/sudoers, sudo lui-même peut ne pas fonctionner. visudo verrouille le fichier pour empêcher l'édition simultanée et vérifie la validité de base et la syntaxe avant de sauvegarder.
sudo visudo
Vous pouvez vérifier la procédure d'édition sûre sur la page de manuel officielle de visudo.
Utiliser des fichiers sudoers.d séparés
Pour séparer les règles par rôle, vous pouvez créer des fichiers séparés sous /etc/sudoers.d/. Tout d'abord, confirmez que le sudoers par défaut sur votre système inclut ce répertoire, et vérifiez également les règles de nommage des fichiers. Avant une modification, conservez un accès administrateur de secours et une sauvegarde de la configuration existante.
sudo visudo -f /etc/sudoers.d/service-maintenance
Certaines configurations de sudoers peuvent ignorer les éléments avec des points dans le nom du fichier ou se terminant par un tilde, il est donc plus sûr d'utiliser des noms simples avec des lettres, des chiffres et des tirets.
Vérifiez toute la syntaxe après modification
Pour vérifier la syntaxe du fichier sudoers existant et des fichiers inclus, utilisez la commande suivante.
sudo visudo -c
Une vérification réussie ne signifie pas que la conception des permissions est sûre. Il est recommandé de maintenir une session administrateur distincte, d'utiliser sudo -l comme utilisateur cible, de tester les actions autorisées/interdites, puis de terminer la session.
Structure de base des règles sudoers
Les règles sudoers combinent conceptuellement les éléments suivants.
user host=(runuser:rungroup) tag: command
| Élément | Signification | Points à vérifier lors de la conception |
|---|---|---|
| Utilisateur ou groupe | Sujets auxquels la règle s'applique | Les groupes sont généralement représentés comme %groupname |
| Hôte | Système où les règles sont valides | Ne pas élargir excessivement la portée des hôtes dans la politique centrale |
| Utilisateur/groupe exécutant | Comptes sur lesquels la commande sera exécutée | Spécifiez uniquement les comptes nécessaires plutôt que ALL |
| Tag | Ajuster le comportement d'authentification, d'exécution et de journalisation | Utiliser NOPASSWD et les fonctionnalités similaires de manière restrictive après évaluation des risques |
| Commandes et arguments | Exécutables et arguments optionnels autorisés | Restreindre la portée avec des chemins absolus et des arguments fixes |
Ce qui suit est un exemple qui limite l'utilisateur deploy à effectuer uniquement le redémarrage et les vérifications de l'état des services spécifiés en tant que root. Avant l'application réelle, vous devriez vérifier si la commande permet indirectement l'exécution d'autres commandes ou la modification de fichiers.
deploy ALL=(root) /usr/bin/systemctl restart webapp.service, /usr/bin/systemctl is-active webapp.service
Puisque le chemin réel des exécutables peut varier selon le système, vérifiez avec des commandes comme command -v systemctl. Si des exécutables dans des scripts que l'utilisateur peut modifier ou dans des répertoires accessibles en écriture par l'utilisateur sont autorisés dans sudoers, l'utilisateur peut en changer le contenu pour exécuter des commandes arbitraires avec des privilèges élevés.
Concevez sudoers selon le principe du moindre privilège
Évitez d'utiliser systématiquement ALL et NOPASSWD
Des règles comme ALL=(ALL) NOPASSWD: ALL accordent effectivement de larges privilèges d'administration sans surveillance. Même si l'automatisation est nécessaire, vous devez la concevoir avec des comptes dédiés, des fichiers exécutables et des arguments fixes, des journaux, une protection des secrets et des chemins d'invocation.
Soyez prudent avec les programmes qui peuvent accéder à un shell.
Les programmes qui peuvent appeler des éditeurs, des visionneuses, des shells, écrire des fichiers arbitraires ou charger des plugins peuvent sembler être des commandes restreintes mais peuvent conduire à un shell administratif. Ne jugez pas la sécurité uniquement sur le nom de la commande ; examinez les fonctionnalités complètes du programme, les variables d'environnement et les fichiers de configuration.
Restreignez spécifiquement les chemins et les arguments des commandes
Spécifiez les commandes avec des chemins absolus et, si possible, fixez les arguments autorisés. Les caractères génériques et les règles de négation peuvent correspondre à des chemins inattendus ou être contournés, vous devez donc bien comprendre les règles de correspondance des commandes de sudoers avant de les utiliser.
Enregistrez les changements de permissions et examinez-les régulièrement
Pour les changements de politique sudo, il est recommandé d'enregistrer le demandeur, le réviseur, le but et les conditions d'expiration. Supprimez les comptes et règles inutilisés et vérifiez régulièrement les privilèges excessifs sur la base des journaux réels et des résultats de sudo -l.
Raisons pour lesquelles les variables d'environnement et les chemins changent
sudo peut ne pas copier l'environnement tel quel
Les paramètres par défaut de sudoers peuvent supprimer les variables d'environnement dangereuses ou configurer un environnement restreint. PATH, HOME, les variables proxy ou les paramètres de langue peuvent différer de votre shell habituel, ce qui peut modifier le comportement des commandes.
sudo env
Pour résoudre les problèmes, vous pouvez les comparer avec la sortie env d'un utilisateur régulier, mais vérifiez le contenu avant de le partager, car il peut contenir des jetons ou des informations sensibles.
Utilisez sudo -E avec prudence
-E demande la conservation de l'environnement de l'utilisateur appelant selon la politique. La politique peut la refuser, et des valeurs d'environnement telles que les chemins de bibliothèque, les proxys et les chemins d'exécution peuvent modifier le comportement des programmes exécutés avec des privilèges élevés. Il est généralement plus sûr de n'autoriser explicitement que les variables nécessaires dans sudoers.
Utilisation de sudo dans l'automatisation
Utilisez -n pour éviter d'attendre un mot de passe
Dans une tâche automatisée, une demande interactive de mot de passe peut bloquer le traitement. L’option -n fait échouer la commande lorsqu’une saisie d’authentification serait nécessaire ; elle n’accorde aucun droit supplémentaire.
sudo -n /usr/bin/systemctl restart webapp.service
Que cela réussisse ou échoue doit être vérifié par le statut de sortie et les journaux. Ne mettez pas de mots de passe dans les scripts ou sur la ligne de commande, car ils peuvent être exposés dans les listes de processus, l'historique du shell ou les journaux.
Autorisez uniquement les commandes nécessaires à être non interactives
Si l'exécution sans surveillance est nécessaire, autorisez uniquement les commandes et arguments désignés sur un compte de service dédié, et assurez-vous que le compte ne peut pas modifier l'exécutable et les paramètres associés. Au lieu de privilèges larges NOPASSWD, vous pouvez également envisager des API spécifiques à la tâche, des services systemd ou des programmes auxiliaires avec des permissions restreintes.
Erreurs et solutions courantes
| Messages ou symptômes | Cause possible | Comment vérifier |
|---|---|---|
user is not in the sudoers file |
Aucune règle autorisée pour l'utilisateur | Communiquez les commandes nécessaires et leurs objectifs à l'administrateur |
not allowed to execute |
La combinaison commande/argument est en conflit avec la politique | Vérifiez la plage autorisée avec sudo -l |
command not found |
Le PATH pour sudo est différent de celui du shell de l'utilisateur | Vérifiez le chemin absolu et secure_path |
| Mot de passe demandé à nouveau | Cache d'authentification expiré ou différences de terminal/politique | Vérifiez la politique et les paramètres du cache d’authentification |
| Permission refusée lors de la redirection | Le shell actuel tente d'ouvrir un fichier protégé en premier | Utilisez sudoedit ou tee restreint |
| Erreur de syntaxe dans sudoers | Édition directe ou règles incorrectes | Vérifiez avec visudo -c en session de récupération |
Principes de sécurité lors de l'utilisation de sudo
- Avant d'exécuter des commandes copiées depuis Internet ou des documents, vérifiez directement les options et les chemins cibles.
- Pour des commandes comme
sudo rmou celles liées aux disques, partitions, pare-feu et comptes, vérifiez d'abord les méthodes de récupération et les impacts potentiels. - Ne laissez pas un shell administrateur ouvert longtemps pour une commande ponctuelle.
- Ne mettez pas imprudemment de mots de passe, jetons ou clés privées dans la ligne de commande, les scripts ou les variables d'environnement.
- Ne donnez pas de privilèges élevés aux scripts ou exécutables que les utilisateurs peuvent modifier.
- Vérifiez l'emplacement des journaux sudo et les politiques de conservation, et dans les environnements critiques, examinez la journalisation centrale ainsi que l'audit des entrées/sorties.
Même si sudo enregistre les commandes, cela ne signifie pas que chaque commande individuelle exécutée après sudo sh ou une échappée shell est conservée dans le journal de commandes traditionnel. Confirmez si la journalisation des entrées/sorties est configurée séparément.
Questions fréquemment posées
Est-ce que sudo fonctionne toujours avec des privilèges root ?
Si vous omettez l'utilisateur cible, la valeur par défaut est généralement root, mais vous pouvez spécifier un autre utilisateur avec -u, et si cela est réellement autorisé est déterminé par la politique. Le point clé de sudo n'est pas d'exécuter uniquement en tant que root, mais d'exécuter des commandes avec les permissions d'un autre utilisateur autorisé.
Pourquoi sudo ne demande-t-il pas de mot de passe ?
Une authentification récente peut encore être valable, ou la règle NOPASSWD peut s’appliquer à la commande. Vérifiez vos droits avec sudo -l. sudo -k invalide le cache de la session, mais ne transforme pas une règle NOPASSWD en règle exigeant un mot de passe.
Pourquoi sudo cd ne change-t-il pas le répertoire courant ?
cd est une commande intégrée du shell qui change le répertoire de travail du shell actuel. Changer le répertoire dans un processus séparé n'affecte pas le shell parent. Pour exécuter une commande dans un répertoire spécifique, vérifiez si cette commande prend en charge une option de répertoire de travail ou si sudo prend en charge -D. La disponibilité de -D et le droit de choisir ce répertoire dépendent de l’implémentation et de la politique ; vérifiez l’aide locale.
Le fichier sudoers peut-il être édité avec un éditeur classique ?
Il n'est pas recommandé. Vous devez utiliser visudo car une erreur de syntaxe pourrait rendre sudo inutilisable. Vous pouvez également éditer des fichiers séparés avec sudo visudo -f /etc/sudoers.d/filename et vérifier la configuration entière avec sudo visudo -c.
Résumé
Pour une commande nécessitant des privilèges d'administrateur, utilisez sudo command. Pour exécuter en tant qu'utilisateur différent, utilisez sudo -u user command. Vous pouvez vérifier la portée autorisée avec sudo -l. L'état d'authentification peut être mis à jour avec -v et invalidé après le travail avec -k.
Utilisez visudo et sudoedit pour les fichiers de configuration, et concevez les règles sudoers basées sur des chemins absolus, des arguments fixes et des privilèges minimums.




