lógica por trás da exclusão de arquivos em que o usuário não tem direito de escrever [duplicado]

8

Quando eu crio um arquivo sem permissões de gravação no meu diretório pessoal:

$ umask 777; touch testfile
$ ls -ln testfile
---------- 1 1000 1000 0 2014-03-21 16:52 testfile
$

.. então ainda posso facilmente remover esse arquivo:

$ rm -fv testfile
removed 'testfile'
$ 

Quando eu crio um arquivo sem permissões de gravação para um diretório no qual não tenho permissões de gravação, não consigo remover esse arquivo:

$ ls -lnd /var/
drwxr-xr-x 14 0 0 4096 2014-03-21 17:04 /var/
$ ls -ln /var/testfile
---------- 1 1000 1000 0 2014-03-21 17:04 /var/testfile
$ rm -vf /var/testfile 
rm: cannot remove '/var/testfile': Permission denied
$ 

Estou correto que as permissões de gravação são herdadas do diretório pai? É verdade também para permissões de leitura e execução?

    
por Martin 21.03.2014 / 16:19

5 respostas

13

Não, as permissões não são herdadas dessa maneira. O motivo é um pouco diferente: remover um arquivo não conta como escrever o arquivo - ele conta como escrever o diretório! É por isso que você pode apagar um arquivo mesmo quando não tem direitos sobre o seu conteúdo .

Excluir um arquivo inteiro é considerado fundamentalmente diferente de editá-lo. A maioria das coisas que você pode fazer em um arquivo onde você não tem permissão de gravação no diretório é esvaziar seu conteúdo, mas você não pode se livrar da entrada de diretório,

    
por 21.03.2014 / 16:30
6

A capacidade de excluir um arquivo não tem nada a ver com as permissões reais no arquivo. São as permissões do diretório que contém o arquivo que governa isso.

Exemplo

$ whoami
saml

$ ll -d adir/
drwxrwxr-x. 2 samtest samtest 60 Mar 21 14:35 adir/

$ rm adir/afile 
rm: remove write-protected regular empty file ‘adir/afile’? y
rm: cannot remove ‘adir/afile’: Permission denied

No entanto, se eu alterar as permissões de modo que o usuário saml tenha acesso de gravação para adir .

$ sudo chmod o+w adir/

E agora, se esse usuário tentar excluir o afile :

$ rm adir/afile 
rm: remove write-protected regular empty file ‘adir/afile’? y

$ ll adir/
total 0

Portanto, lembre-se de que a capacidade de ler / gravar / executar um arquivo pertence ao próprio arquivo por meio de seus atributos. No entanto, a capacidade de excluir um arquivo de um diretório é controlada pelas permissões do diretório que contém o arquivo.

    
por 21.03.2014 / 19:43
2

As permissões não são herdadas. Depois de entrar no diretório, os arquivos podem ter qualquer permissão ou propriedade. Por exemplo, você pode ter permissões completas sobre arquivos de duas pastas profundas, mas você pode não ter permissão para entrar no diretório. A permissão de escrita em um diretório significa que você pode modificar a lista de arquivos (mover / excluir / criar arquivo), mas a modificação do conteúdo do arquivo é algo diferente. A permissão de leitura em um diretório permite que você leia a lista de arquivos (executando ls ). A permissão de execução de um diretório significa que você pode cd .

Por exemplo, se suas permissões em um diretório forem 'wx', você poderá criar ou remover arquivos, inserir diretórios nele, mas não poderá listar seu conteúdo (o que significa que a conclusão da guia no bash não funcionará). No entanto, um conteúdo de subpasta pode ser listado se sua permissão diz.

Um pouco de exceção é o bit pegajoso, que, quando definido, restringe o que você pode fazer com arquivos em um diretório com esse bit definido. Se estiver definido (chmod 1 ??? onde ??? é a permissão convencional, como 755), os arquivos não poderão ser excluídos por uma pessoa que não seja o proprietário do arquivo ou o que contenha diretório, mesmo se ele tiver uma permissão de gravação. Isso é útil para alguns usos (por exemplo, o diretório /tmp/ é normalmente marcado dessa forma - todos podem escrever nele, mas não podem tocar em coisas que não são dele).

    
por 21.03.2014 / 16:44
0

As permissões de arquivo no Unix não são herdadas do diretório pai (com exceção do bit adesivo). Há distinção entre as permissões do próprio diretório e as permissões dos arquivos dentro do diretório. O que você descreveu é a capacidade de fazer alterações no diretório (permissão de gravação no diretório), não no arquivo. Se você tiver permissão de gravação Unix em um diretório, seja por meio do grupo write ou do proprietário write bit, isso lhe dará a capacidade de adicionar e remover conteúdo desse diretório: você pode adicionar ou remover subdiretórios ou arquivos, independentemente de quais permissões no arquivo são.

    
por 21.03.2014 / 22:17
0

Existe uma razão pela qual os diretórios são chamados de "diretórios": porque eles funcionam exatamente como diretórios na vida real. Se você quiser remover uma pessoa da lista telefônica, você só precisará acessar o diretório do telefone, não a pessoa. (Isto é diferente de uma "pasta", se você quiser remover um documento de uma pasta, você precisa acessar tanto a pasta quanto o documento).

    
por 22.03.2014 / 04:08