Permitir que um usuário apague um arquivo, mas não o leia [duplicado]

0

Existe alguma configuração de permissões que permita ao usuário excluir um arquivo, mas não ler ou gravar nele?

    
por tirengarfio 08.10.2016 / 14:19

2 respostas

2

As permissões de um arquivo determinam quem pode ler, gravar ou executar esse arquivo. As permissões do diretório pai determinam quem pode excluí-lo, porque no POSIX, a exclusão de um arquivo é assimilada à gravação no diretório pai e, na verdade, não tem nada a ver com o arquivo excluído.

Assim, um arquivo pode ser ilegível e não regravável, mas qualquer um que possa escrever em seu diretório pai poderá excluí-lo:

mkdir a
chmod 777 a
touch a/b
chmod 000 a/b

produz um arquivo, b , em um diretório a , de forma que ninguém, além de root , possa ler ou escrever b , mas qualquer pessoa pode excluir b .

(Observe que qualquer pessoa também pode substituir b .)

    
por 08.10.2016 / 14:35
2

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 ../
    
por 08.10.2016 / 14:35