GNU/Linux >> Tutoriels Linux >  >> Linux

Comment permettre aux utilisateurs de modifier des fichiers en toute sécurité à l'aide de sudoedit sous Linux

Supposons que vous soyez administrateur système dans une entreprise où les équipes travaillent principalement sur Linux avec des privilèges limités. Imaginez maintenant une situation où les membres de l'une des équipes - dans le cadre d'un nouveau travail - doivent modifier fréquemment un fichier nécessitant des privilèges de superutilisateur. Que feriez-vous ?

Une option consiste à leur donner l'accès "sudo", mais cela reviendrait à donner à un étranger l'accès à l'intégralité de votre maison alors qu'il lui suffit d'être dans une seule de vos pièces. Ce que je veux dire, c'est que l'accès "sudo" par défaut sera laissez-les faire tout ce qui nécessite des privilèges root, alors que tout ce qui est requis est la possibilité de modifier un certain fichier système.

Compte tenu du type de flexibilité qu'offre 'sudo', l'autre option que vous avez est de modifier la politique 'sudo' de manière à ce que seul le privilège de modifier 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 sudo complet, il existe toujours une faille que quelqu'un pourrait exploiter.

Pour comprendre de quoi je parle, imaginez un scénario dans lequel l'accès limité susmentionné est fourni au groupe, et quelqu'un ouvre le fichier en question pour le modifier à l'aide de la commande "sudo".

Maintenant, un esprit intelligent 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 de quelle faille je parlais - 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 en édition à un seul fichier a été vaincu et que l'utilisateur peut désormais TOUT faire.

Voyons s'il y a 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 vous 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

Many systems that support shared libraries have the ability to override default library functions by pointing an environment variable (usually LD_PRELOAD) to an alternate shared library. On such systems, sudo's noexec functionality can be used to prevent a program run by sudo from executing any other programs. Note, however, that this applies only to native dynamically-linked executables. Statically-linked executables and foreign executables running under binary emulation are not affected.

The noexec feature is known to work on SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x and AIX 5.3 and above.
...
...
...
To enable noexec for a command, use the NOEXEC tag as documented in the User Specification section above. Here is that example again:

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

This allows user aaron to run /usr/bin/more and /usr/bin/vi with noexec enabled. This will prevent those two commands from executing other commands (such as a shell). If you are unsure whether or not your system is capable of supporting noexec you can always just try it out and check whether shell escapes work when noexec is enabled.

Note that restricting shell escapes is not a panacea. Programs running as root are still capable ofmany potentially hazardous operations (such as changing or overwriting files) that could lead to unintended privilege escalation.
...
...
...

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

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

In the specific case of an editor, a safer approach is to give the user permission to run sudoedit.

Sudoedit est une commande intégrée qui permet aux utilisateurs de modifier des fichiers en toute sécurité. Selon la page de manuel sudo, 'sudoedit' équivaut à exécuter '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é - contrairement à la solution dont nous avons parlé au début de ce didacticiel où les utilisateurs sont obligés d'utiliser l'éditeur Vim - ce qui leur permet de profiter de leurs propres personnalisations. Et la principale raison de toutes, avec 'sudoedit', l'utilisateur éditera le fichier lui-même, et non 'root'.

Comment fonctionne Sudoedit

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

%newsudo ALL = sudoedit /path/to/file

Et les utilisateurs faisant partie du groupe 'newsudo' pourront modifier 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 modifier. Ensuite, la commande recherchera les variables d'environnement SUDO_EDITOR, VISUAL et EDITOR (dans cet ordre) pour déterminer quel éditeur doit être appelé pour ouvrir la copie temporaire qui vient d'être créée. Une fois que l'utilisateur a terminé le travail de modification, les modifications sont copiées dans le fichier d'origine.

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

-e, --edit 
Edit one or more files instead of running a command. In lieu of a path name, the string "sudoedit" is used when consulting the security policy. If the user is authorized by the policy, the followingsteps are taken:

1. Temporary copies are made of the files to be edited with
the owner set to the invoking user.

2. The editor specified by the policy is run to edit the
temporary files. The sudoers policy uses the
SUDO_EDITOR, VISUAL and EDITOR environment variables (in
that order). If none of SUDO_EDITOR, VISUAL or EDITOR
are set, the first program listed in the editor
sudoers(5) option is used.

3. If they have been modified, the temporary files are
copied back to their original location and the temporary
versions are removed.

If the specified file does not exist, it will be created. Note that unlike most commands run by sudo, the editor is run with the invoking user's environment unmodified. If, for some reason, sudo is unable to update a file with its edited version, the user will receive a warning and the edited copy will remain in a temporary file.

À présent, vous devriez avoir une idée de base sur "sudoedit", y compris quand l'utiliser et pourquoi il est préférable d'utiliser "sudo" lorsque tout ce que vous voulez, c'est modifier un fichier ou quelques fichiers. Bien sûr, comme tout autre outil lié à la sécurité, "sudoedit" a eu sa part d'exploits, mais c'est toujours une solution recommandée dans de nombreux cas d'utilisation.


Linux
  1. Comment effectuer une comparaison ligne par ligne de fichiers sous Linux à l'aide de la commande diff

  2. Comment écrire des fichiers journaux dans la RAM à l'aide de Log2ram sous Linux

  3. Comment transférer des fichiers en toute sécurité à l'aide de SCP

  4. Comment renommer plusieurs fichiers ensemble sous Linux en utilisant 3 méthodes

  5. Comment trier des fichiers sous Linux à l'aide de la commande Sort

Comment éditer plusieurs fichiers à l'aide de l'éditeur Vim

Comment sauvegarder des fichiers et des répertoires à l'aide de Rsync sous Linux

Comment bloquer un port à l'aide d'un pare-feu sous Linux

Comment synchroniser des fichiers dans les deux sens à l'aide du script Osync sous Linux

Comment supprimer des fichiers et des répertoires à l'aide de la ligne de commande Linux

Comment supprimer des fichiers en toute sécurité à l'aide de la commande Shred dans Debian 11