Então, eu estava fazendo alguma manutenção em meu servidor hoje cedo e notei que consegui excluir um arquivo de propriedade do root em meu diretório pessoal.
Consegui reproduzir uma amostra:
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x. 2 cbennett cbennett 4096 Oct 5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct 5 20:58 ..
-rw-rw-r--. 1 cbennett cbennett 0 Oct 5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x. 2 cbennett cbennett 4096 Oct 5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct 5 20:58 ..
-rw-r--r--. 1 root root 0 Oct 5 21:00 file-owned-by-root
-rw-rw-r--. 1 cbennett cbennett 0 Oct 5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x. 2 cbennett cbennett 4096 Oct 5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct 5 20:58 ..
-rw-rw-r--. 1 cbennett cbennett 0 Oct 5 20:58 my-own-file
[cbennett@nova ~/temp]$
Minha pergunta é como consegui excluir um arquivo que pertence ao root e tem permissões -rw-r--r--
, enquanto não sou root?
As permissões, conteúdo e todos os atributos fazem parte do inode. O nome está na entrada do diretório. As permissões não são herdadas recursivamente (exceto quando você usa o padrão em Posix ACLs).
Quando você exclui um arquivo, internamente você apenas remove um link físico da entrada do diretório para o inode. Quando todos os hardlinks forem removidos e o inode não estiver em uso, o sistema de arquivos recuperará o espaço. Você só precisa de permissão de gravação na pasta, independentemente das permissões definidas no arquivo (com exceção da permissão ext imutável). O mesmo para uma pasta vazia.
Quando você exclui uma pasta que não está vazia, precisa de permissão de gravação na pasta que está excluindo e em seu pai.
Quando você possui o diretório, você pode fazer qualquer coisa com ele e com o conteúdo dentro dele com base nas permissões do diretório. Portanto, apesar de não possuir o arquivo, você ainda pode excluí-lo porque tinha permissão de leitura/gravação para o diretório no qual o arquivo residia.