Comment faire fonctionner un programme avec des privilèges root sans utiliser su ou sudo

8

J'ai un bashscript qui doit s'exécuter avec les privilèges root , mais doit être invoqué par l'utilisateur normal.

La partie difficile est que le script ne doit pas demander de mot de passe, et je ne veux pas utiliser le fichier sudoers . Je voudrais éviter d'utiliser sudo ou su .

Est-ce possible?

Stefan
la source
double possible de Autoriser setuid sur les scripts shell
Stefan

Réponses:

9

S'il ne s'agissait pas d'un script bash mais d'une application standard, vous en donneriez la propriété à root et définiriez le bit setuid sur l'application. Ensuite, lors de l'exécution, l'utilisateur effectif sous lequel l'application s'exécute est root. Pour des raisons de sécurité, cependant, cela est interdit dans de nombreux systèmes pour les scripts shell. Cette question ici sur unix.stackexchange.com gère les moyens de surmonter cela.

fschmitt
la source
Bien, je viens de poster un lien vers ça. La réponse de Hemant est une bonne solution
Michael Mrozek
Ruby compterait-il comme un script shell?
Stefan
1
@Stefan Oui, tout ce qui est exécuté via un interpréteur le fait, car ce n'est pas le script lui-même qui est exécuté, c'est l'interpréteur ruby, qui n'est pas setuid. Vous avez besoin d'un binaire réel pour utiliser setuid
Michael Mrozek
2
J'aimerais pouvoir voter contre, mais malheureusement, je manque de 25 points de réputation. Laisser les utilisateurs normaux exécuter un script bash en tant que root est une très mauvaise idée, sauf si vous savez exactement ce que vous faites (et si vous devez vous demander comment le faire, vous ne le faites pas). Si l'OP a publié son script ici, je trouverais probablement au moins 3 façons de l'exploiter. Il y a une raison pour laquelle presque toutes les distributions rendent cela difficile.
Kim
L'un des grands principes d'Unix est: "Donnez à l'utilisateur la possibilité de se tirer une balle dans le pied" :-)
fschmitt
1

Utilisez sudo. Si vous ne voulez pas avoir à appeler sudo /path/to/myscript, écrivez un wrapper d'une ligne exec sudo /path/to/myscript "$@". Voir Autoriser setuid sur les scripts shell , en particulier la réponse de Maciej Piechotka sur l'utilisation de sudo et ma discussion plus générale sur les programmes setuid .

Gilles 'SO- arrête d'être méchant'
la source
L'idée est de ne pas avoir à utiliser sudo.
Alexej Magura
@AlexejMagura Sudo est la solution la plus simple. C'est difficile à faire sans sudo (à moins que vous ne vouliez vous contenter d'une solution non sécurisée, auquel cas vous pourriez aussi bien donner à tout le monde le mot de passe root).
Gilles 'SO- arrête d'être méchant'