J'apprends linux suid, j'ai donc écrit un petit programme en c avec le contenu suivant pour le tester
#include<stdio.h>
int main(){
system("echo 100 >> test.txt");
return 0;
}
-rwsr-xr-x 1 root root 8004 Sep 10 16:19 test
test.txt
est un fichier qui ne peut être modifié que par root
-rw-r----- 1 root root
Si j'exécute le programme de test avec un compte utilisateur, il doit ajouter 100
au fichier vide.
Mais, il sort :
sh:test.txt:Permission denied
Pourquoi ?
Réponse acceptée :
Le problème est que vous appelez la fonction system()
, qui appelle un shell /bin/sh
. Et le shell /bin/sh
n'a pas de jeu de bits suid. C'est pourquoi imprime le Permission denied
message.
Vous devez écrire la partie en code C pur :
int main() {
FILE *fd = fopen("test.txt", "a");
fprintf(fd, "%s", "100");
fclose(fd);
return 0;
}