Droit execution fichier
jonathan411
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
Voila il y a une chose que je ne comprend pas j'ai créer pour tester le fichier main.c
qui lance un shell, cependant les droits du fichier sont root:users avec -r-Sr-x---
Donc normalement si je lance ./main je devrais me retrouver sur un shell avec l'id root
Cela ne fonctionne pas...
Une idée?
Cordialement,
Voila il y a une chose que je ne comprend pas j'ai créer pour tester le fichier main.c
qui lance un shell, cependant les droits du fichier sont root:users avec -r-Sr-x---
Donc normalement si je lance ./main je devrais me retrouver sur un shell avec l'id root
Cela ne fonctionne pas...
Une idée?
Cordialement,
jonathan@ArchLinux [test]$ cat ./main.c #include <stdio.h> #include <unistd.h> int main() { execl("/bin/sh", "sh", NULL); } jonathan@ArchLinux [test]$ ls -l total 12 -r-Sr-x--- 1 root users 4441 Apr 26 17:04 main -rw-r--r-- 1 jonathan users 85 Apr 26 17:04 main.c jonathan@ArchLinux [test]$ ./main jonathan@ArchLinux [test]$ id uid=1000(jonathan) gid=100(users) groups=100(users) jonathan@ArchLinux [test]$ whoami jonathan
A voir également:
- Droit execution fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
2 réponses
Bon déjà les bits set-UID c'est pas forcément une idée géniale sauf si tu sais ce que tu fais. En plus puisque ton main retourne un int, ce serait bien de le faire (même si ce n'est pas la cause de ton problème).
À moins de coder passwd tu n'as pas de raison de le faire, ton programme doit (s'il est sensé se lancer avec des droits root) être invoqué via un sudo (ou un équivalent comme kdesu ou gksudo) ou par root lui-même. Ça sent le truc louche.
Tu peux utiliser la commande popen qui ouvrira ton processus fils via un fork. Il est ensuite possible de lire ou d'écrire dans le pipe et donc de faire communiquer les deux processus.
Sinon pour ta commande execl elle exécuta bien un shell fils, mais je ne pense pas que les droits root soient transmis au fils de cette manière.
Bonne chance
À moins de coder passwd tu n'as pas de raison de le faire, ton programme doit (s'il est sensé se lancer avec des droits root) être invoqué via un sudo (ou un équivalent comme kdesu ou gksudo) ou par root lui-même. Ça sent le truc louche.
Tu peux utiliser la commande popen qui ouvrira ton processus fils via un fork. Il est ensuite possible de lire ou d'écrire dans le pipe et donc de faire communiquer les deux processus.
#include <stdio.h> int main(){ FILE *fp; char buffer[255]; if((fp = popen("echo coucou", "r"))){ fscanf(fp,"%s",buffer); printf(buffer); pclose(fp); } return 0; }
Sinon pour ta commande execl elle exécuta bien un shell fils, mais je ne pense pas que les droits root soient transmis au fils de cette manière.
Bonne chance