Sto imparando Linux suid, quindi ho scritto un piccolo programma c con il seguente contenuto per testarlo
#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
è un file che può essere modificato solo da root
-rw-r----- 1 root root
Se eseguo il programma di test con un account utente, dovrebbe aggiungere 100
al file vuoto.
Ma viene fuori:
sh:test.txt:Permission denied
Perché?
Risposta accettata:
Il problema è che chiami la funzione system()
, che chiama una shell /bin/sh
. E la shell /bin/sh
non ha un bit suid impostato. Ecco perché stampa il Permission denied
messaggio.
Devi scrivere la parte in puro codice c:
int main() {
FILE *fd = fopen("test.txt", "a");
fprintf(fd, "%s", "100");
fclose(fd);
return 0;
}