Adicionei um disco extra a um servidor Linux.
Adicionei a seguinte linha ao fstab:
UUID=e277f402-bbac-4830-bc1d-5a849ffe7f9c /disk1 ext4 defaults 0 0
Em seguida, criei um ponto de montagem /disk1 e montei-o
sudo mkdir /disk1
sudo mount /disk1
Criei então 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 eu faço login como outro usuário e excluo o arquivo test1.txt, ele realmente me pergunta e depois me nega, em vez de dizer "Permissão negada". Por que? e como posso fazer com que ele se comporte 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
Responder1
As permissões Unix são um pouco estranhas quando se trata da operação de remoção.
Para começar, excluir um arquivo envolve realmente remover o 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 a 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 de sistema real usada para "remover" um arquivo é chamada unlink
. No entanto, o utilitário de comando shell que realiza a desvinculação é chamado rm
, que é um mnemônico para "remover".
Como a operação de desvinculação modifica odiretório(removendo a entrada do diretório) e não o arquivo, a permissão necessária para a operação é a permissão de gravaçãono diretório. As permissões no próprio arquivo são irrelevantes.
No entanto, acontece que é um erro comum tentar excluir um arquivo que na verdade 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, é comum tentar excluir o arquivo erroneamente.)
Para ajudar a proteger os administradores de sistemas de atirar nos próprios dedos, o rm
utilitário primeiro verifica se a pessoa que o invoca tem permissão de gravação noarquivo, mesmo que 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 rm
utilitário faznãoverifique se é permitido desvincular o arquivo, pois "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. Nesse caso, o SO reportará EACCES porque o usuário não tem acesso de gravação no diretório.
A consequência infeliz é que, se você tentar excluir um arquivo para o qual não possui permissão de gravação, de um diretório no qual não possui permissão de gravação, rm
será inutilmente perguntado se deseja prosseguir e, em seguida, relatará a falha.