Como impedir que os usuários excluam um diretório?

9

Eu tentei "chattr + i DIRNAME", é ótimo, mas não consigo criar arquivos no DIR após o chattr. O que mais há para impedir que os usuários excluam um diretório?

root@HOST ~] mkdir test
[root@HOST ~] chattr +i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
touch: cannot touch `sth': Permission denied
[root@HOST ~/test] cd ..
[root@HOST ~] chattr -i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
[root@HOST ~/test] 

UPDATE: somente a exclusão do diretório é importante, por isso ainda preciso que os arquivos sejam excluídos

gasko peter
fonte
Dê uma olhada /tmpe /var/tmp. Enquanto todo usuário pode criar arquivos lá, ele / ela pode excluir apenas seus próprios arquivos / diretórios, mas não o diretório itselv.
Nils

Respostas:

3

Então, o que há de errado com um simples chown / chmod ?:

cd /tmp
mkdir question
sudo chown root:root question
[sudo] password for user: 
chmod 777 ./question
touch sth
rm sth
cd ..
rm question -rf
rm: cannot remove `question': Operation not permitted

OK, deixe-me dizer o que há de errado com isso: todo usuário tem acesso a todos os arquivos no questiondiretório devido às 777permissões. É melhor

  • crie um novo grupo groupadd question
  • mkdir question
  • chown root:question ./question
  • chmod 770 ./question
  • adicione os usuários que devem ter acesso aos arquivos ao novo grupo: usermod -G group user

O truque importante aqui é que o diretório tem um proprietário diferente do que qualquer um dos usuários que tentarão excluí-lo.

jippie
fonte
2
Depende também de onde esse diretório está localizado. Se alguém do grupo de perguntas tiver direitos rwx no diretório que contém o diretório de perguntas, poderá excluí-lo.
Laurentiu Roescu 9/11/12
Adicione um extra sudo chmod o+t ..para definir o tsinalizador no diretório pai. O tsinalizador não permitirá remover um arquivo que não pertence ao usuário. té comumente usado /tmppara fazer exatamente isso. O UsuárioA não pode excluir os arquivos pertencentes ao UsuárioB.
perfil completo de jippie
Ou, mais uma vez, basta colocar a propriedade correta e os bits de permissão no diretório.
perfil completo de jippie
Não funciona em contêineres de encaixe. :(
Kirby
13

Crie um arquivo ".protected" e faça como root

chattr +i .protected

Você pode excluir todos os arquivos, exceto .protecteddentro deste diretório, portanto, o diretório não pode ser excluído por nenhum outro usuário.

Magnus
fonte
Simples e eficaz. Ótima resposta.
Wug
Não funciona em contêineres de encaixe. :(
Kirby
1
Para excluí-lo, use "chattr -i [nome do arquivo]" para remover o atributo imutável.
Emeraldhieu 16/09/19
3
chattr +a

deve fazer o trabalho. Você pode criar arquivos dentro, mas não poderá excluí-los.

Laurentiu Roescu
fonte
eu atualizei a questão
Gasko peter