web-dev-qa-db-fra.com

Pourquoi Setuid ne fonctionne-t-il pas?

Je veux m'assurer que mon programme ne peut être exécuté que par l'utilisateur xyz utilisant le privilège root. Pour ce faire, je fixe 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

En outre, j'ai ajouté l'utilisateur xyz au groupe house afin que seul xyz et root puisse exécuter programme1.sh.

Dans le programme1.sh il y a

id -u

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

Fonctionnement program1.sh comme root, il montre root. Mais courant avec le compte xyz, il montre xyz. Il semble que cela ne fonctionnait pas avec un privilège root. Je ne sais pas ce qui ne va pas ici.

15
Marcus Thornton

Lors de l'exécution de scripts shell qui ont le bit SETUID (par exemple, perms de RWSR-XR-X), les scripts fonctionnent comme l'utilisateur qui les exécute, non pas comme l'utilisateur qui les possède. Ceci est contraire à la manière dont SETUID est traitée pour les fichiers binaires (par exemple,/usr/bin/passwd), qui fonctionnent comme l'utilisateur qui les possède, quel que soit lequel l'utilisateur les exécute.

Vérifiez cette page: https://access.redhat.com/site/solutions/12469

Ceci est une mesure de sécurité prise par le système d'exploitation. Vous devriez utiliser votre script avec Sudo au lieu.

Si vous avez vraiment besoin d'utiliser SETUID O votre script, vous pouvez créer un binaire qui fera le travail. Créez un nouveau fichier "programme.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");
   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. Les œuvres SETUID pour le fichier compilé et ce fichier peut exécuter d'autres fichiers en tant que root.

40
cioby23