Linux, Sudo · 5 min read · Nov 14, 2025

Comment permettre aux utilisateurs d'éditer des fichiers en toute sécurité en utilisant sudoedit sur Linux

Supposons que vous soyez un administrateur système dans une entreprise où les équipes travaillent principalement sur Linux avec des privilèges limités. Maintenant, imaginez une situation où des membres d’une des équipes - dans le cadre d’un nouveau travail - doivent fréquemment éditer un fichier qui nécessite des privilèges de superutilisateur. Que feriez-vous ?

Une option est de leur donner l’accès ‘sudo’, mais cela reviendrait à donner à un étranger l’accès à votre maison entière alors qu’il n’a besoin d’être que dans une seule de vos pièces - ce que je veux dire, c’est que l’accès ‘sudo’ par défaut leur permettra de faire tout ce qui nécessite des privilèges root, alors que tout ce qui est requis est la capacité d’éditer un certain fichier système.

Étant donné le type de flexibilité que ‘sudo’ offre, l’autre option que vous avez est de modifier la politique ‘sudo’ de manière à ce que seul le privilège d’éditer le fichier en question soit accordé. Par exemple, quelque chose comme ceci :

%newsudo ALL = vim /path/to/file

Bien que ce soit sans aucun doute une bien meilleure solution que de fournir l’accès complet à sudo, il reste une faille que quelqu’un pourrait exploiter.

Pour comprendre de quoi je parle, considérez un scénario où l’accès limité mentionné ci-dessus est accordé au groupe, et quelqu’un ouvre le fichier en question pour l’éditer en utilisant la commande ‘sudo’.

Maintenant, un esprit astucieux avec une bonne connaissance de vim saurait qu’il peut lancer un nouveau shell depuis l’éditeur - tout ce qu’il a à faire est d’exécuter la commande vim suivante :

:shell

Cela vous placera instantanément dans un shell interactif. Si vous essayez ces étapes sur votre machine, exécutez simplement la commande ‘whoami’ et vous comprendrez quelle faille je mentionnais - Oui, vous êtes dans le shell en tant que root.

Voici un exemple de capture d’écran :

Inutile de dire que l’objectif de fournir un accès d’édition à un seul fichier a été contourné, et l’utilisateur peut faire TOUT maintenant.

Voyons s’il existe une autre option que nous avons. Il existe une balise NOEXEC que vous pouvez utiliser dans votre entrée sudoers :

%newsudo ALL = NOEXEC: vim /path/to/file

NOEXEC permet essentiellement d’empêcher un programme exécuté par sudo d’exécuter d’autres programmes. Alors, est-ce la solution ultime ? Malheureusement non. En ce qui concerne les raisons, voici comment le manuel sudoers explique cette balise :

noexec  

De nombreux systèmes qui prennent en charge les bibliothèques partagées ont la capacité de remplacer les fonctions de bibliothèque par défaut en pointant une variable d'environnement (généralement LD_PRELOAD) vers une bibliothèque partagée alternative. Sur de tels systèmes, la fonctionnalité noexec de sudo peut être utilisée pour empêcher un programme exécuté par sudo d'exécuter d'autres programmes. Notez cependant que cela ne s'applique qu'aux exécutables natifs liés dynamiquement. Les exécutables liés statiquement et les exécutables étrangers exécutés sous émulation binaire ne sont pas affectés.  

La fonctionnalité noexec est connue pour fonctionner sur SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x et AIX 5.3 et supérieur.  
...
...
...
Pour activer noexec pour une commande, utilisez la balise NOEXEC comme documenté dans la section Spécification de l'utilisateur ci-dessus. Voici cet exemple à nouveau :  

aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi  

Cela permet à l'utilisateur aaron d'exécuter /usr/bin/more et /usr/bin/vi avec noexec activé. Cela empêchera ces deux commandes d'exécuter d'autres commandes (comme un shell). Si vous n'êtes pas sûr que votre système soit capable de prendre en charge noexec, vous pouvez toujours l'essayer et vérifier si les échappements de shell fonctionnent lorsque noexec est activé.  

Notez que restreindre les échappements de shell n'est pas une panacée. Les programmes exécutés en tant que root sont toujours capables de nombreuses opérations potentiellement dangereuses (comme changer ou écraser des fichiers) qui pourraient entraîner une élévation de privilèges non intentionnelle.  
...
...
...

Si vous lisez attentivement le texte en gras, vous saurez que NOEXEC a son propre ensemble de limitations.

Alors, quelle est la solution la plus fiable ? Eh bien, c’est sudoedit. Même le manuel sudoers recommande cet outil :

Dans le cas spécifique d'un éditeur, une approche plus sûre est de donner à l'utilisateur la permission d'exécuter sudoedit.

Sudoedit est une commande intégrée qui permet aux utilisateurs d’éditer des fichiers en toute sécurité. Selon la page de manuel de sudo, ‘sudoedit’ est équivalent à l’exécution de ‘sudo’ avec l’option de ligne de commande ‘-e’.

Pourquoi est-ce mieux

Avec ‘sudoedit’, les utilisateurs ont le choix d’utiliser leur éditeur préféré - ce qui est différent de la solution que nous avons discutée au début de ce tutoriel où les utilisateurs sont contraints d’utiliser l’éditeur Vim - leur permettant de profiter de leurs propres personnalisations. Et la plus grande raison de toutes, avec ‘sudoedit’, l’utilisateur éditera le fichier en tant que lui-même, et non en tant que ‘root’.

Comment fonctionne Sudoedit

Pour utiliser sudoedit, l’entrée dans les sudoers devrait être, par exemple, quelque chose comme ceci :

%newsudo ALL = sudoedit /path/to/file

Et les utilisateurs qui font partie du groupe ‘newsudo’ pourront éditer le fichier en exécutant la commande suivante :

sudoedit /path/to/file

Donc, ce que cette commande fera, c’est qu’elle créera d’abord une copie temporaire du fichier que vous souhaitez éditer. Ensuite, la commande recherchera les variables d’environnement SUDO_EDITOR, VISUAL et EDITOR (dans cet ordre) pour déterminer quel éditeur doit être invoqué pour ouvrir la copie temporaire qui vient d’être créée. Après que l’utilisateur a terminé son travail de modification, les changements sont copiés dans le fichier original.

Voici l’explication détaillée de la page de manuel de la commande ‘sudo’ :

-e, --edit  
Éditez un ou plusieurs fichiers au lieu d'exécuter une commande. En lieu et place d'un nom de chemin, la chaîne "sudoedit" est utilisée lors de la consultation de la politique de sécurité. Si l'utilisateur est autorisé par la politique, les étapes suivantes sont effectuées :  

 1. Des copies temporaires sont faites des fichiers à éditer avec  
 le propriétaire défini sur l'utilisateur invoquant.  
  
 2. L'éditeur spécifié par la politique est exécuté pour éditer les  
 fichiers temporaires. La politique sudoers utilise les  
 variables d'environnement SUDO_EDITOR, VISUAL et EDITOR  
 (dans cet ordre). Si aucune des variables SUDO_EDITOR, VISUAL ou EDITOR  
 n'est définie, le premier programme répertorié dans l'option éditeur  
 sudoers(5) est utilisé.  
  
 3. S'ils ont été modifiés, les fichiers temporaires sont  
 copiés à leur emplacement d'origine et les versions temporaires sont  
 supprimées.  

Si le fichier spécifié n'existe pas, il sera créé. Notez qu'à la différence de la plupart des commandes exécutées par sudo, l'éditeur est exécuté avec l'environnement de l'utilisateur invoquant non modifié**. Si, pour une raison quelconque, sudo ne parvient pas à mettre à jour un fichier avec sa version éditée, l'utilisateur recevra un avertissement et la copie éditée restera dans un fichier temporaire.

Désormais, vous devriez avoir une idée de base sur ‘sudoedit’, y compris quand l’utiliser et pourquoi il est meilleur que d’utiliser ‘sudo’ lorsque tout ce que vous voulez est d’éditer un fichier, ou quelques fichiers. Bien sûr, comme tout autre outil lié à la sécurité, ‘sudoedit’ a eu son lot d’exploits, mais c’est toujours une solution recommandée dans de nombreux cas d’utilisation.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.