S'il s'agissait d'un binaire normal, vous pouvez définir setuid en exécutant
# chmod u+s /path/to/binary
Malheureusement, les scripts ne peuvent pas être configurés. (Eh bien, vous pouvez, mais c'est ignoré). La raison en est que la première ligne du script indique au système d'exploitation sous quel interpréteur exécuter le script. Par exemple, si vous aviez un script avec:
#!/bin/bash
Vous finiriez par courir
/bin/bash /path/to/script
Évidemment, vous auriez besoin que l'interpréteur soit setuid, ce qui signifierait alors que tous les scripts seraient setuid. Ce serait mauvais.
Vous pouvez le faire avec sudo en mettant ce qui suit dans votre fichier / etc / sudoers en exécutant visudo.
ALL ALL=NOPASSWD: /path/to/script
Et maintenant, tout utilisateur peut exécuter
$ sudo /path/to/script
Cela leur permet d'exécuter le script sans taper leur mot de passe.
Il existe une alternative qui ne nécessite pas sudo dans la commande, qui nécessite la création d'un petit binaire setuided qui exécute votre script, mais chaque binaire setuid supplémentaire ajoute un autre problème de sécurité potentiel.
ALL
par un nom d'utilisateur pour permettre à un sudoer d'exécuter sans saisir de mot de passe.J'avais besoin d'insérer cette ligne À LA FIN de / etc / sudoers:
ALL ALL = NOPASSWD: <filename>
Apparemment, une%admin ALL=(ALL) ALL
substitution ultérieure nécessitait un mot de passe pour les utilisateurs admin.Il n'y a aucun problème de sécurité permettant à un script d'être exécuté en tant que root tant que le script effectue une action bien déterminée, inoffensive et autorisée et, si les valeurs de certains paramètres ne peuvent pas entraîner un mauvais comportement du script.
Mais il y a un piège ...
Utilisez toujours les chemins d'accès complets dans les noms de commande et de fichier. Si vous écrivez quelque chose comme
echo Hello world!
dansmyrootscript
, quelqu'un pourrait écrire un~/bin/echo script
etmyrootscript
exécuter en tant que root tout ce qu'il contient./bin/echo "Hoping this will keep you safe"
:-)la source
Par défaut, les membres du
wheel
groupe sont autorisés àsudo
n'importe quelle commande en tant queroot
. C'est probablement ainsi que vous l'utilisezsudo
à ce jour.Pour autoriser un autre utilisateur, vous devrez créer une
sudoers
règle. Par exemple:Permettra à l'utilisateur
mickey.mouse
d'exécuter la commande/usr/local/bin/test.sh
commeroot
sans nécessiter une invite de mot de passe supplémentaire.Vous devriez lire ce document pour plus d'informations.
la source
Utilisezchmod +s <filename>
pour voir le bit suid. Cela signifie que lorsque le fichier est exécuté, il s'exécute avec les autorisations du propriétaire du fichier (il est donc préférable de le redéfinir pour le faire fonctionner comme cela).Cependant, cela peut être TRÈS dangereux avec quelque chose comme un script bash, car un utilisateur trouve un moyen de le changer, il peut facilement gagner un shell root. Assurez-vous qu'il ne peut être écrit par personne d'autre que root.Linux ne vous permet pas de définir des scripts, pour ce faire, vous devez le compiler en tant que programme. À la place, vous pouvez utiliser le fichier sudoers (/ etc / sudoers) et ajouter une ligne comme celle-ci.
<username> ALL = NOPASSWD: /path/to/script
la source
Une autre alternative: vous pouvez faire un petit wrapper setuid C autour de ce script qui
Un peu comme votre propre sous-ensemble des multiples capacités de
sudo
.la source