
Então, eu estava fazendo alguma manutenção em meu servidor hoje cedo e percebi que consegui excluir um arquivo de propriedade do root em meu diretório inicial.
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?
Responder1
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 ACLs Posix).
Ao excluir 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 irá recuperar o espaço. Você só precisa de permissão de gravação na pasta, independentemente de quais permissões estão definidas no arquivo (com exceção da permissão ext imutável). O mesmo para uma pasta vazia.
Ao excluir uma pasta que não está vazia, você precisa de permissão de gravação na pasta que está excluindo e em seu pai.
Responder2
Quando você possui o diretório, você pode fazer qualquer coisa com ele e com o conteúdo dele com base nas permissões do diretório. Portanto, apesar de não ser o proprietário do arquivo, você ainda conseguiu excluí-lo porque tinha permissão de leitura/gravação no diretório em que o arquivo residia.