web-dev-qa-db-fra.com

Comment faire en sorte qu'un fichier ne puisse être exécuté que par root, mais pas en tant que root?

Je ne souhaite pas que les utilisateurs puissent ouvrir certaines applications sans avoir les privilèges root, mais je ne souhaite pas leur attribuer les privilèges root. Alors, comment puis-je faire en sorte que seul le root puisse exécuter certaines applications, mais que les applications ne soient pas réellement exécutées en tant que root (je ne veux pas qu'elles le soient pour des raisons de sécurité)? J'utilise Ubuntu GNOME 15.04, avec GNOME Shell et GNOME 3.16.

7
user364819

Essayez d’utiliser setuid à partir du paquet super. Faites Sudo apt-get install super, puis créez un script Shell qui ne peut être exécuté qu’en tant que root. Demandez à ce script Shell d'exécuter une seule commande:

#!/bin/sh
setuid $ORIG_USER applicationcommand
exit 0

Ensuite, définissez un alias pour chacun des utilisateurs afin que applicationcommand pointe vers le script Shell que vous avez créé en ajoutant à chacun de leurs fichiers .bashrc:

alias applicationcommand="sh /path/to/Shell/script"

Vous pouvez également modifier le fichier .desktop de l'application que vous souhaitez exécuter, en plus de créer une variable alias, en supposant que votre application comporte un fichier .desktop (s'il ne s'agit pas d'une application s’exécute dans l’interface graphique, mais plutôt dans la CLI, il est probable qu’il ne contienne pas de fichier .desktop), de sorte que la ligne Exec= est suivie de sh /path/to/Shell/script, ou du nom de l’alias si vous le souhaitez. décidé de créer cela. Vous trouverez les fichiers .desktop dans /usr/share/applications et ~/.local/share/applications.

7
user323419

Cette réponse est complémentaire de celle de Heather (qui fonctionnera).

Tout d’abord , tenez compte du fait qu’en Unix (et Linux), s’il est possible de prendre des privilèges root, on peut tout faire. Dans le cas de la réponse de Heather, rien n'empêchera votre utilisateur de simplement Sudo /usr/bin/applicationcommand (avec un peu de recherche du chemin réel ou autre). Mais je suppose que ça vous va.

Dans ce cas, pourquoi ne pas simplement (1) :

Sudo chgrp Sudo /usr/bin/applicationcommand
Sudo chmod 750 /usr/bin/applicationcommand

? Si les utilisateurs peuvent utiliser Sudo, cela signifie (2)  ils sont dans le groupe Sudo; Les commandes ci-dessus rendent la applicationcommand lisible/exécutable uniquement par les membres du groupe Sudo. Cependant, quand ils l'exécutent, ils l'exécutent en tant qu'utilisateur réel, comme pour toute autre commande.

Cependant, la solution Unix "classique" est:

  1. créer un groupe, appelez-le privileged.
  2. Sudo chgrp privileged /usr/bin/myapp puis Sudo chmod 750 /usr/bin/myapp.
  3. ajoutez le (s) utilisateur (s) (sans privilèges!) pour pouvoir exécuter l'application sur le groupe privileged

et maintenant, l'utilisateur utilisera myapp en tant qu'utilisateur, sans avoir besoin des privilèges Sudo.

Notez que si vous souhaitez que l'application s'exécute en tant qu'utilisateur différent, vous pouvez utiliser le mécanisme set-uid combiné avec les techniques ci-dessus.


Notes de bas de page:

(1) : Notez que vous ne pouvez pas le faire si l'application possède un indicateur set-gid (cela se produit avec certains expéditeurs, par exemple). Vérifiez-le avant de changer le groupe du binaire.

(2) : dans la plupart des configurations. Sudo peut être ajusté (voir man sudoers) plusieurs fois, de sorte que l'efficacité de ce simple piratage varie en fonction de votre personnalisation.

8
Rmano