Por que eu posso remover um arquivo como usuário que é de propriedade do root?

4

Como o título diz: Por que posso remover um arquivo como usuário que pertence ao root?

Aqui está um exemplo:

% sudo touch ~/test

% ls -la ~/test    
-rw-r--r-- 1 root root 0 Jun 18 20:31 /home/aboettger/test

% rm ~/test
rm: remove write-protected regular empty file ‘/home/aboettger/test’? Y

% ls -la ~/test
ls: cannot access /home/aboettger/test: No such file or directory
    
por A.B. 18.06.2015 / 20:35

2 respostas

8

Como a desvinculação de um arquivo precisa de acesso de gravação no diretório que o contém. Pode-se, de fato, obter isso indiretamente por meio de possuir o diretório, já que, se alguém é o proprietário, pode-se conceder sempre acesso de gravação. Mas, neste caso, você descobrirá que seu diretório inicial já pode ser gravado por você. A propriedade do diretório não é a necessidade. O acesso de gravação é. Isso inclui acesso de gravação por meio de "outro", por meio de associação ao grupo ou por meio de uma entrada da ACL, onde eles se aplicam.

    
por JdeBP 18.06.2015 / 20:49
1

Se você tiver permissão suficiente ( rwx ) no diretório, poderá remover qualquer arquivo dentro desse diretório.

Basicamente, a entrada de diretório contém uma tabela com os nomes de arquivo que possui e seus inodes. Portanto, quando um comando rm é fornecido, a entrada do arquivo é simplesmente removida dessa tabela de diretórios, não depende do próprio proprietário dos arquivos. Apenas permissão suficiente no diretório pai é suficiente.

Embora o arquivo permaneça válido no sistema de arquivos até que todos os processos que usam o arquivo sejam concluídos.

A chamada do sistema associada é unlinkat() . Por exemplo, ao remover o file.txt :

unlinkat(AT_FDCWD, "file.txt", 0)       = 0
    
por heemayl 18.06.2015 / 21:01