
thiagoborn
(usa Debian)
Enviado em 16/08/2015 - 19:55h
Caros amigos eu estranhei uma coisa quando compilei um programa em "c" para testar com definição de setuid. Para não tomar tempo do pessoas fiz os seguintes passos:
1 - Escrevi o fonte e salvei com nome remoarch.c
#include<stdio.h>
main()
{
int status;
char file_name[25];
printf("Escreva o nome do aquivo que você quer apagar \n");
gets(file_name);
status = remove(file_name);
if( status == 0 )
printf("%s Arquivo apagado com sucesso!!!\n",file_name);
else
{
printf("Não foi possível apagar o arquivo\n");
perror("Error");
}
return 0;
}
2 - Compilei ele com um usuário regular
gcc -o removearquivo removearch.c
obs. ele gera warnings por causa do gets mas copila
3 - Fiz backup de um arquivo de root no /etc/
cp -p /etc/hosts /etc/hosts.bkp
4 - Executei o binário do programa com o usuário regular
./removearquivo
/etc/hosts.bkp
E ele apagou com sucesso. Agora vem a pergunta. Isso pode Arnaldo? Pode se você copiar o arquivo para sua pasta pessoal.
Não vai importar se o arquivo pertence ao usuário root, pois será possível apagar.
Eu fiquei intrigado porque não me recordava que tinha dado permissão de u+s para o arquivo binário gerado pelo usuário root.
Testei no RHEL7 e no RHEL6.4.