Se eu criar um arquivo e depois alterar suas permissões para 444
(somente leitura), como rm
removê-lo?
Se eu fizer isso:
echo test > test.txt
chmod 444 test.txt
rm test.txt
... rm
perguntará se eu quero remover o arquivo protegido contra gravação test.txt
. Eu esperava que rm
não fosse possível remover esse arquivo e que eu teria que fazer o chmod +w test.txt
primeiro. Se o fizer rm -f test.txt
, rm
removerá o arquivo sem perguntar, mesmo que seja somente leitura.
Alguém pode esclarecer? Estou usando o Ubuntu 12.04 / bash.
permissions
files
rm
readonly
Magnus
fonte
fonte
Respostas:
Todas as
rm
necessidades são permissão de gravação + execução no diretório pai. As permissões do próprio arquivo são irrelevantes.Aqui está uma referência que explica o modelo de permissões mais claramente do que eu jamais poderia:
fonte
+t
para que as pessoas não possam mais modificar ou remover arquivos desse diretório que não são de sua propriedade, mesmo que tenham acesso de gravação ao diretório?chattr
adicionar para adicionar o sinalizador imutável aos arquivos. Caso contrário, ire_and_curses está correto.Ok, de acordo com seu comentário para ire_and_curses, o que você realmente deseja fazer é tornar alguns arquivos imutáveis. Você pode fazer isso com o
chattr
comando Por exemplo:por exemplo
Você não pode fazer nada em um arquivo imutável - não pode excluí-lo, editá-lo, substituí-lo, renomeá-lo, chmod ou chown, ou qualquer outra coisa. A única coisa que você pode fazer com isso é lê-lo (se as permissões unix permitirem) e (como root)
chattr -i
remover o bit imutável.Nem todos os sistemas de arquivos suportam todos os atributos. AFAIK, imutável é suportado por todos os sistemas de arquivos linux comuns (incluindo ext2 / 3/4 e xfs. Zfsonlinux não suporta atributos no momento)
fonte
lsattr
para listar atributos.rm
isso que isso nunca me ocorreu ...Uma resposta a esta pergunta afirma que você pode excluir um arquivo do diretório apenas se ele tiver
write
permissão apenas totalmente errada! apenas tente! Permita a um diretório apenaswrite
permissão e tente excluir, você não pode!Para excluir um arquivo dentro de um diretório, você precisa de ambos
write
e deexecute
permissão no diretórioAgora, de volta à pergunta: para excluir um arquivo usando,
rm
você está apenas removendo suas informações de inode do diretório, ou seja, você nãoshredding
é do disco. Se as informações do inode do arquivo não estiverem no diretório, você não poderá acessar (também porque não poderá vê-las, pois não está listada pelo diretório pai), ou seja, será excluída para você.Assim, para excluir um arquivo de um diretório, tudo o que você tem permissão no diretório; permissões nesse arquivo são irrelevantes
fonte