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


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.


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.