Je veux savoir comment créer (si possible) un script bash qui s'exécute en tant que root sur Debian quel que soit l'utilisateur qui l'exécute, sans demander aucune sorte d'authentification.
Ce fichier exécutera toutes ses commandes comme s'il s'agissait de l'utilisateur root, mais seul l'utilisateur root réel pourra le lire ou y écrire.
J'en ai besoin parce que je veux exécuter des commandes comme swapoff
, swapon
, apt
, etc… Mais via une autre application, et je veux qu'elle ne me demande aucun mot de passe.
Les commandes seront corrigées (ces commandes racine auront leurs paramètres dans le fichier, pas en entrée), donc les implications en matière de sécurité ne sont pas exactement ma préoccupation, mais j'accepte également les explications.
Réponse acceptée :
Le moyen de bas niveau pour qu'un programme soit toujours exécuté sous un UID particulier est le bit setuid sur le fichier binaire. C'est ainsi par ex. sudo
et su
obtenir leurs autorisations root, même s'ils sont généralement démarrés par des utilisations normales.
Mais en général, les systèmes de type Unix ne prennent pas en charge les scripts setuid , voir :Autoriser setuid sur les scripts shell
Cependant, ce que vous pouvez faire, c'est configurer sudo
ou un autre outil de ce type pour permettre aux utilisateurs d'exécuter certains fichiers particuliers avec les privilèges appropriés. Par exemple, cela permettrait à viceadmin
pour exécuter /usr/local/bin/sudoswapon
avec tous les arguments et sans authentification :
viceadmin ALL = NOPASSWD:/usr/local/bin/sudoswapon
Maintenant, depuis sudo
traite de la modification des privilèges elle-même, sudoswapon
peut être un script shell.
Vous avez raison de noter que le script devrait faire attention à la façon dont il traite les arguments de la ligne de commande, et que tous les pièges du langage shell s'appliqueront. Heureusement, sudo
filtre la plupart des variables d'environnement, au moins si le env_reset
l'option est définie.