Existe alguma maneira de impedir a exclusão de certos arquivos do diretório de propriedade do usuário?

42

Digamos que o usuário tenha o Diretório1 e ele contenha Arquivo1 Arquivo2 CantBeDeletedFile Como fazer para que o usuário nunca possa excluir o CantBeDeletedFile ?

Se eu alterar a propriedade do Directory1 e remover as permissões de gravação, os usuários não poderão excluir nenhum arquivo. Eles também não poderiam adicionar novos arquivos, etc.

Eu só quero poder definir alguns arquivos que nunca seriam excluídos.

Descrição mais específica.

Estou criando perfis de usuário. Estou criando arquivos do iniciador de aplicativos na área de trabalho . Então, eu quero definir alguns arquivos do iniciador (.desktop) e torná-los para que o usuário possa iniciá-los apenas e eles não possam renomear nem excluir, basta iniciar.

Atualmente, se o usuário possuir o diretório que contém qualquer arquivo. Ele pode excluir.

Se não houver uma maneira genérica para todos * nix, é um Linux e ext4 FS.

bakytn
fonte

Respostas:

40

(Não gosto de invadir a casa dos usuários, acho que eles devem fazer o que quiserem com suas casas ... mas de qualquer maneira ...)

Isso deve funcionar no linux (pelo menos). Estou assumindo que userjá é um membro do grupo user. A solução é alterar a propriedade de Directory1e definir o bit pegajoso no diretório:

chown root:user Directory1
chmod 1775 Directory1

Então use:

chown root Directory1/CantBeDeletedFile

Agora, usernão será possível remover este arquivo devido ao bit¹ pegajoso¹. O userainda é capaz de adicionar / remover seus próprios arquivos em Directory1. Mas observe que eles não poderão excluir Directory1porque nunca serão esvaziados.

-
1. Quando o sticky bit é ativado em um diretório, os usuários (exceto o proprietário) podem remover apenas seus próprios arquivos dentro de um diretório. Isso é usado em diretórios como /tmpcujas permissões são 1777= rwxrwxrwt.

Stéphane Gimenez
fonte
Também não gosto, mas os usuários são novatos no mundo Linux. Se eles excluir um lançador coincidentemente eles estão começando spam nosso suporte técnico :)
bakytn
Obrigado funciona! Não sei como vou proceder. Com chattr ou por este caminho. Se fizer no seu caminho. Ainda posso excluir o diretório como raiz. Com a solução superior (chattr), mesmo o root não pode excluir a pasta.
bakytn
@bakytn: isso é apenas uma precaução ou você realmente recebeu a ligação de suporte? Porque a maioria dos novatos provavelmente ficará com muito medo de mexer com arquivos que eles não conhecem.
Lie Ryan
@ Ryan Ryan 100% certo de que eles pediriam suporte. Mas sim, atualmente é apenas uma precaução.
bakytn
Mais cedo ou mais tarde, as rodas de treinamento terão que sair ... e se não aprenderem a andar de bicicleta, o acidente será algo a se ver. Concordo com a resposta, provavelmente complementado withcopious ajuda on-line e enlatada Spam "Se você 'acidentalmente' excluídos ThisDesktopFile, primeiro vá para a parede mais próxima e bater a cabeça dura contra ela 3 vezes (para sorte), e depois fazer cp /here/is/the/master/ThisDesktopFile $HOME. Assinado : BOfH "
vonbrand
63

Torne o arquivo imutável com o iatributo

chattr +i file.desktop

veja man chattrpara mais informação.

Keith
fonte
8
Eu adiciono esta nota porque não consegui deduzi-la da página de manual mencionada: chattrsó funciona em sistemas de arquivos ext2 / ext3 / ext4.
manatwork
Isso é tão legal! Funcionou! Obrigado senhor! Solução elegante, mas uma limitação. Mesmo o root não pode excluir esses arquivos sem antes torná-los mutáveis. Mas isso é tão legal, na verdade. Não tinha certeza de qual resposta aceitar. Aceito forma mais genérica, mas menos rápido
bakytn
@manatwork ele também funciona no XFS, pelo menos, eu acho que alguns outros sistemas de arquivos também suportam esses atributos.
Ruslan
Para 'desfazer' este comando, basta fazêchattr -i file.desktop
lo
1
Acabei de testar isso no zfs no linux e funcionou. Eu queria impedir a exclusão de um arquivo usado para instruir o programa de backup baculaa ignorar a pasta.
drescherjm 19/04
2

Eu não acho que exista uma maneira de impedir a exclusão de um arquivo individual com permissões de arquivo Unix, mas posso pensar em uma solução alternativa: escreva um daemon que o substitua quando for removido. inotify-toolsé perfeito para esse tipo de coisa se você estiver no Linux.

Existem algumas maneiras de substituir o item excluído: copiar um novo no local ou manter o arquivo real em um local seguro e apenas copiar um link no diretório do usuário. Para o link, você pode usar um link simbólico ou um link físico. Eu começaria com um link simbólico, mas alguns (muito poucos) programas não lidam com links simbólicos corretamente. Se você achar que o usuário encontra um programa como esse, use um link físico.

Shawn J. Goff
fonte
0

Um simples

chmod -i filename

meio que "protegerá" esse arquivo da exclusão.

rm filename
rm: remove write-protected regular file 'filename'?

Você ainda pode excluí-lo, mas pelo menos deve ter certeza o suficiente sobre o que está fazendo.

fiatjaf
fonte