GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Pourquoi Setuid ne fonctionne-t-il pas ??

Cette question a déjà des réponses ici :Autoriser setuid sur les scripts shell

(10 réponses)
Fermé il y a 6 ans.

Je veux m'assurer que mon programme ne peut être exécuté que par l'utilisateur xyz en utilisant le privilège root. Pour ce faire, j'ai défini le bit setuid avec :

chmod u+s program1.sh
ls -l program1.sh
rwsr-x--- 1 root house 1299 May 15 23:54 program1.sh

De plus, j'ai ajouté l'utilisateur xyz à la house groupe de sorte que seulement xyz et root peut exécuter program1.sh.

Dans program1.sh il y a

id -u

afin qu'il puisse me montrer l'ID effectif.

Exécution de program1.sh en tant que root, il affiche root . Mais courir avec le xyz compte, il affiche xyz . Il semble qu'il n'a pas fonctionné avec le privilège root. Je ne sais pas ce qui ne va pas ici.

Réponse acceptée :

Lors de l'exécution de scripts shell qui ont le bit setuid (par exemple, perms de rwsr-xr-x), les scripts s'exécutent en tant qu'utilisateur qui les exécute, et non en tant qu'utilisateur qui les possède. Ceci est contraire à la façon dont setuid est géré pour les binaires (par exemple, /usr/bin/passwd), qui s'exécutent en tant qu'utilisateur qui les possède, quel que soit l'utilisateur qui les exécute.

Consultez cette page :https://access.redhat.com/site/solutions/124693

Il s'agit d'une mesure de sécurité prise par le système d'exploitation. Vous devez utiliser votre script avec sudo à la place.

Si vous avez vraiment besoin d'utiliser setuid dans votre script, vous pouvez créer un binaire qui fera le travail. Créez un nouveau fichier "program.c" et copiez le code suivant :

   #include <stdio.h>
   #include <stdlib.h>
   #include <sys/types.h>
   #include <unistd.h>
     
   int main()
   {
     setuid(0);
     system("./program.sh"); #This line is dangerous: It allows an attacker to execute arbitrary code on your machine (even by accident).
     return 0;
   }

Compilez et exécutez le code à l'aide des commandes suivantes :

$ gcc program.c -o program
$ sudo chown root.root program
$ sudo chmod 4755 program
$ ./program

De cette façon, cela fonctionnera. Le setuid fonctionne pour le fichier compilé, et ce fichier peut exécuter d'autres fichiers en tant que root.


Linux
  1. Linux - Pourquoi utilisons-nous Su - Et pas seulement Su ?

  2. Linux Setuid ne fonctionne pas ?

  3. Linux - Pourquoi Rsync sur Linux ne conserve pas tous les horodatages (heure de création) ?

  4. Pourquoi find -exec mv {} ./target/ + ne fonctionne-t-il pas ?

  5. Pourquoi la modification de javascript dans les outils de développement Chrome ne fonctionne-t-elle pas ?

Linux – Arch Linux :Pacman ne fonctionne pas lors du chroot ?

Linux – Pourquoi la locale Es_mx fonctionne-t-elle mais pas Es ?

Pourquoi `exit &` ne fonctionne pas ?

Comment fonctionne la mémoire d'échange sous Linux ?

Pourquoi Tomcat fonctionne-t-il avec le port 8080 mais pas 80 ?

Pourquoi Windows ne reconnaît-il pas les fichiers à l'intérieur des partitions Linux ?