Não consigo excluir um arquivo para o qual tenho permissão de gravação como membro do grupo


12
$ touch testfile
$ chmod g+w testfile
$ sudo adduser user2 user1
$ stat -c'%a %A' testfile
664 -rw-rw-r--
$ su user2
Password: 
$ groups
user2 user1
$ rm testfile 
rm: cannot remove `testfile': Permission denied

O que está faltando?

Respostas:


21

Excluir um arquivo significa que você está fazendo alterações no diretório em que reside, não no arquivo em si. Seu grupo precisa de rw no diretório para poder remover um arquivo. As permissões em um arquivo são apenas para fazer alterações no próprio arquivo.

Isso pode parecer confuso no começo até você pensar em como o sistema de arquivos funciona. Um arquivo é apenas um inode, e o diretório se refere ao inode. Ao removê-lo, você está apenas removendo uma referência ao inode desse arquivo no diretório Então você está mudando o diretório, não o arquivo. Você pode ter um link físico para esse arquivo em outro diretório e ainda poderá removê-lo do primeiro diretório sem alterar o próprio arquivo, ele ainda existiria no outro diretório.


Eu pego 775 drwxrwxr-xo diretório.
tshepang 15/02

1
Qual é a propriedade do grupo no diretório? Lembre-se, o segundo 7 que você mencionou é a permissão que o grupo do diretório tem, não o grupo do usuário.
jsbillings

1
ls -ld /path/to/directoryou simplesmente ls -ld .se você já tiver acessado o CD nesse diretório.
jsbillings

1
por qualquer motivo, o stat não pode procurar o ID do grupo 1002. o stat procura o ID do grupo em / etc / group, NIS, LDAP, etc, e está recebendo um erro, é por isso que você está vendo DESCONHECIDO. Eu tentaria correr getent group 1002para ver se isso lhe dá um erro mais detalhado.
Jsbillings

1
Na verdade, não acho esse comportamento confuso. É idêntico ao modo como um diretório "real" funciona, e é por isso que é chamado de "diretório", e não, por exemplo, "pasta", que se comportaria de maneira bem diferente. Se eu quiser excluir alguém da minha lista telefônica, não vou à casa dela e a mato, simplesmente pego uma caneta e escrevo o número dela. IOW: preciso de acesso de gravação ao diretório e nenhum acesso a ela. O Windows possui pastas, o Unix possui diretórios e ambos se comportam como seus equivalentes da vida real. A confusão só acontece se você as misturar.
Jörg W Mittag

0

Somente o sistema pode excluir um arquivo e somente se ele não tiver referências. Um mero usuário só pode desvincular um arquivo, ou seja, removê-lo de um diretório. Você precisa de acesso de gravação a um diretório para desvincular um arquivo dele. Desvincular um arquivo não modifica o arquivo, portanto, o acesso de gravação ao arquivo é irrelevante.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.