GNU/Linux >> Tutoriels Linux >  >> Linux

Comment faire en sorte qu'un script shell s'exécute toujours en tant que root ?

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.


Linux
  1. Pourquoi "sudo Su" dans un script Shell n'exécute-t-il pas le reste du script en tant que racine ?

  2. D'où est exécuté un script Shell ?

  3. Comment exécuter des scripts Python à partir du shell

  4. Comment exécutez-vous un script lors de la connexion dans * nix ?

  5. Exécuter un script shell en parallèle

Comment exécuter une commande / un script Linux Shell en arrière-plan

Comment exécuter un script Shell en tant que service SystemD sous Linux

Comment exécuter rétroactivement un script en tant que root ?

Comment exécuter un script shell en arrière-plan ?

Comment créer et exécuter un script shell dans Ubuntu 22.04

Quel est le moyen le plus rapide d'exécuter un script ?