web-dev-qa-db-fra.com

Puis-je faire un script toujours exécuter en tant que root?

Comment faire en sorte qu'un script s'exécute en tant que root, peu importe qui l'exécute?

J'ai lu sur setuid mais je ne sais pas comment faire.

J'utilise Linux, Ubuntu 12.04 LTS.

27
HappyDeveloper

Soyez vraiment prudent: les scripts combinés avec setuid sont dangereux!

Tout d’abord, veuillez regarder cette question/réponses , en particulier sur cette réponse et cet avertissement de sécurité .

Si vous souhaitez toujours exécuter votre script avec setuid set, vous pouvez alors écrire un court programme C comme wrapper et définir le bit setuid sur le fichier binaire compilé.

Exemple d'emballage:

int main(void) {        
    setuid(0);
    clearenv();
    system("/absolute/path/to/your/script.sh");
}

Une autre solution utilisant Sudo (mentionné ici ):

  1. En tant que root, empêchez l'accès en écriture (et peut-être d'autres) à votre script:

    racine chown /absolute/path/to/votre/script.sh
    chmod 700 /absolute/path/to/votre/script.sh
    
  2. Vérifiez que personne d'autre que la racine ne peut remplacer le script , par exemple. en modifiant les droits d'accès du dossier parent:

     racine chown /absolute/path/to/votre/
    chmod 755 /absolute/path/to/votre/
    
  3. Modifiez les droits d'accès Sudo dans /etc/sudoers avec visudo:

     ALL ALL = (racine) NOPASSWD: /absolute/path/to/votre/script.sh
    

    Vous trouverez plus de détails sur les paramètres (par exemple, restreindre l'accès à des utilisateurs ou à des groupes spécifiques) dans la page de manuel sudoers.

Ensuite, tous les utilisateurs peuvent exécuter le script en tant que root sans mot de passe:

Sudo /absolute/path/to/your/script.sh

Ceci est similaire à l'utilisation de la solution wrapper/setuid ci-dessus.

29
speakr

Le moyen le plus simple et le plus sûr consiste à utiliser les bits SETUID dans les autorisations de fichier. De cette façon, les autorisations de commande seront élevées aux autorisations de propriétaire de fichier.

pour empêcher l’édition du script, ne définissez pas d’écriture pour tous.

4
Tadas

Je ne sais pas si cela peut être utile mais, pour que le script ne s'exécute qu'en tant que root, vous pouvez utiliser ce Shebang sur la première ligne du script:

#!/bin/su root
0
alexandre1985