Então, eu estava fazendo alguma manutenção no meu servidor hoje cedo e percebi que era capaz de excluir um arquivo pertencente à raiz no 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 pertencente ao root e com permissões -rw-r--r--
enquanto eu não sou root?
linux
security
permissions
Carl Bennett
fonte
fonte
Respostas:
As permissões, o 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 nas ACLs Posix).
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ê precisa apenas 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á sendo excluída e em seu pai.
fonte
sudo touch test_file;sudo chattr +i test_file;rm -f test_file
Veja:man chattr
Quando você é o proprietário do diretório, você tem permissão para fazer qualquer coisa com ele e seu conteúdo com base nas permissões do diretório. Portanto, apesar de não possuir o arquivo, você ainda pôde excluí-lo porque tinha permissão de leitura / gravação no diretório em que o arquivo residia.
fonte
vi
salva o arquivo primeiro na cópia temporária, exclui o arquivo original e renomeia a cópia para o original (ou algo parecido).