Apagar arquivos

1. Apagar arquivos

Thiago Fonseca Born
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.







  


2. Re: Apagar arquivos

Fernando
phoemur

(usa Debian)

Enviado em 16/08/2015 - 20:45h

Setuid significa que o programa vai executar com a ID do dono do arquivo e não com a do usuário que está logado.
O comando passwd por exemplo usa isso. Quem quer que execute passwd ele está sendo executado como root e não como usuário, pois o root é o dono do arquivo.

Pode isso Arnaldo ?

Depende, só dá pra responder se você postar aqui o dono:grupo e as permissões do seu programa e do /etc/hosts e hosts.bkp
Se o seu programa for do dono root e estiver com setuid isso que você descreveu é perfeitamente normal. ou então se seu hosts.bkp for do usuário comum também.

Sugiro estudar aqui: http://www.vivaolinux.com.br/artigo/Linux-Permissoes-de-acesso-especiais


3. Re: Apagar arquivos

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/08/2015 - 22:38h

Como citado, programas com setuid são executados com permissões do dono do arquivo. Creio que você compilou como root ou mudou o dono do arquivo, mas executou como usuário comum..

Exemplo:

remove.c
int main(int argc, char **argv)
{
remove(argv[1]);
return 0;
}



# cp /etc/passwd /etc/passwd.bkp
# gcc remove.c -o remove
# chmod 4755 remove
$ ./remove /etc/passwd.bkp


Isso irá remover o arquivo passwd.bkp.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts