Puis-je créer un script toujours en tant que root?

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

J'ai lu sur setuid mais je ne suis pas sûr de savoir comment le faire.

J'utilise Linux, Ubuntu 12.04 LTS.

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

D'abord, regardez cette question / réponses , en particulier sur cette réponse et sur l'avertissement de sécurité .

Si vous souhaitez toujours exécuter votre script avec setuid set, vous pouvez écrire un programme C court comme wrapper et définir le bit setuid sur le 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, prévoyez l'accès à l'écriture (et peut-être à l'autre) à votre script:

      Chown root /absolute/path/to/your/script.sh
     Chmod 700 /absolute/path/to/your/script.sh
    
  2. Vérifiez que personne, sauf root, ne peut remplacer le script , par exemple en modifiant les droits d'accès du dossier parent:

     Chown root / absolute / path / to / your /
     Chmod 755 / absolute / path / to / your /
    
  3. Modifiez les droits d'accès sudo dans /etc/sudoers avec visudo :

     ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
    

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

Par la suite, 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.

Le moyen le plus simple et le plus sûr est d'utiliser les bits SETUID dans les autorisations de fichier. De cette façon, les autorisations de commande seront élevées aux autorisations de propriétaires de fichiers.

Pour empêcher un script d'édition, ne pas définir l'écriture pour tous les bits.