Estoy aprendiendo linux suid, así que he escrito un pequeño programa c con el siguiente contenido para probarlo
#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
es un archivo que solo puede ser modificado por root
-rw-r----- 1 root root
Si ejecuto el programa de prueba con una cuenta de usuario, debería agregar 100
al archivo vacío.
Pero, sale:
sh:test.txt:Permission denied
¿Por qué?
Respuesta aceptada:
El problema es que llamas a la función system()
, que llama a un shell /bin/sh
. Y el caparazón /bin/sh
no tiene conjunto de bits suid. Por eso se imprime el Permission denied
mensaje.
Tienes que escribir la parte en código c puro:
int main() {
FILE *fd = fopen("test.txt", "a");
fprintf(fd, "%s", "100");
fclose(fd);
return 0;
}