Usuário não sudo solicitado com a mensagem “rm: remove o arquivo vazio regular protegido por gravação” em vez de permissão negada

0

Eu adicionei um disco extra a um servidor linux.

Eu adicionei a seguinte linha ao fstab:

UUID=e277f402-bbac-4830-bc1d-5a849ffe7f9c /disk1          ext4    defaults 0 0

Eu então criei um ponto de montagem / disk1 e o montei

 sudo mkdir /disk1
 sudo mount /disk1

Eu então criei um arquivo vazio touch1.txt como usuário "hari" e suas permissões eram as seguintes

sudo touch test1.txt

-rw-rw-r-- 1 hari hari     0 Sep 12 18:23 test1.txt

Agora, quando faço login como outro usuário, excluo o arquivo test1.txt que ele realmente me pergunta e depois me nega, em vez de dizer "Permissão negada". Por que? e como posso fazê-lo se comportar como "normal"

hari2@UBUNTU01:/disk1$ rm test2.txt
rm: remove write-protected regular empty file ‘test2.txt’? y
rm: cannot remove ‘test2.txt’: Operation not permitted
    
por harijay 13.09.2015 / 00:30

1 resposta

4

As permissões do Unix são um pouco estranhas quando se trata da operação de remoção.

Para começar, excluir um arquivo realmente envolve a remoção do link para o arquivo de um diretório. Como a maioria dos sistemas de arquivos Unix permite links físicos, é possível que o arquivo seja vinculado de mais de um diretório, portanto, existe mais de um link. E quando você remove um link, o arquivo não é excluído, a menos que não existam outros links para ele.

Por esse motivo, a chamada real do sistema usada para "remover" um arquivo é chamada unlink . No entanto, o utilitário de comando shell que realiza o unlink é chamado de rm , que é um mnemônico para "remover".

Como a operação de desconexão modifica o diretório (removendo a entrada de diretório) e não o arquivo, a permissão necessária para a operação é a permissão de gravação no diretório . As permissões no próprio arquivo são irrelevantes.

No entanto, como se constata, é um erro comum tentar excluir um arquivo que não pertence a você de um diretório no qual você tem permissão de gravação. (Mais precisamente, a situação não é comum, mas nos casos em que existe, é um pouco comum erroneamente tentar excluir o arquivo.)

Para ajudar a proteger os administradores contra o disparo de seus próprios dedos, o utilitário rm primeiro verifica se a pessoa que o invocou tem permissão de gravação no arquivo , embora essa permissão não seja necessária para desvincular o arquivo . Por razões óbvias, ele faz essa verificação antes de tentar excluir o arquivo.

O utilitário rm não verifica se o uso tem permissão para desvincular o arquivo, porque "verificar antes da ação" é geralmente considerado um estilo ruim. Em vez disso, ele executa a ação desejada e relata falha se o sistema operacional retornar um erro. Neste caso, o SO reportará o EACCES porque o usuário não tem acesso de gravação ao diretório.

A conseqüência lamentável é que, se você tentar excluir um arquivo para o qual você não tem permissão de gravação de um diretório no qual você não tem permissão de gravação, rm preferirá perguntar se deve prosseguir e relatar falha .

    
por 13.09.2015 / 20:58