Sim, isso é possível. A única ação de gravação necessária para excluir algo é remover o inode correspondente que requer permissão para gravar no diretório pai (ele é definido assim por POSIX ).
Você não precisa realmente alterar nada sobre o arquivo. Um arquivo conta como sendo excluído quando seu contador de referência está em 0. O contador de referência é igual ao número de inodes apontando para ele mais o número de manipuladores de arquivos abertos desse arquivo. Este último será 0 se o arquivo não estiver em uso. Então, uma vez que você remover aquele 1 inode que o arquivo possui (se nenhum outro link físico existir), ele será deletado.
Um exemplo:
Crie um novo diretório e faça o cd nele:
mkdir /tmp/test
cd /tmp/test
Em seguida, torne-se root
:
sudo su
Observe que escrever sudo
na frente do próximo comando não funcionará porque é a ação de gravação que precisa ser feita por root
. O usuário que está executando echo
não importa realmente.
Em seguida, crie um novo arquivo, altere sua permissão e saia do shell raiz novamente.
echo some content > someFile
chmod 600 someFile
exit
Permitem que você mostre o conteúdo do diretório:
ll
A saída será assim, somente com seu nome de usuário em vez de christoph
:
total 12
drwxrwxr-x 2 christoph christoph 4096 Oct 8 14:27 ./
drwxrwxrwt 13 root root 4096 Oct 8 14:25 ../
-rw------- 1 root root 13 Oct 8 14:27 someFile
O 1
é a última linha significa que há apenas 1 inode apontando para o arquivo. Portanto, após excluir essa entrada, o arquivo será removido se não for aberto por nenhum programa (e, se for, ele será removido depois que esses programas forem fechados ou terminados). Este é normalmente o caso, mas nem sempre. Consulte o link para obter mais informações.
Como você pode ver, você não tem permissão de leitura nem gravação nesse arquivo, mas tem permissão de gravação no diretório (o diretório atual é anotado como um período ( .
)). Isso significa que você pode remover o arquivo via
rm someFile
Mas será avisado que esse arquivo está protegido contra gravação:
rm: remove write-protected regular file 'someFile'?
Basta digitar y
para "sim" e pressionar Enter.
Em seguida, o arquivo desapareceu:
$ ll
total 8
drwxrwxr-x 2 christoph christoph 4096 Oct 8 14:27 ./
drwxrwxrwt 13 root root 4096 Oct 8 14:27 ../