Comment empêcher les utilisateurs de supprimer un répertoire?


9

J'ai essayé "chattr + i DIRNAME", c'est super, mais je ne peux pas créer de fichiers dans le DIR après chattr. Quels sont les autres éléments permettant d'empêcher les utilisateurs de supprimer un annuaire?

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] 

MISE À JOUR: seule la suppression du répertoire est importante, j'ai donc encore besoin d'y supprimer les fichiers


Jetez un oeil à /tmpet /var/tmp. Bien que chaque utilisateur puisse y créer des fichiers, il / elle ne peut supprimer que ses propres fichiers / répertoires, mais pas le répertoire lui-même.
— Nils

Réponses:


3

Alors, quel est le problème avec un chown / chmod simple?:

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, laissez-moi vous dire ce qui ne va pas: chaque utilisateur a tous les accès à tous les fichiers du questionrépertoire en raison des 777autorisations. Il vaut mieux

  • créer un nouveau groupe groupadd question
  • mkdir question
  • chown root:question ./question
  • chmod 770 ./question
  • ajoutez les utilisateurs qui doivent avoir accès aux fichiers au nouveau groupe: usermod -G group user

L'astuce importante ici est que l'annuaire a un propriétaire différent de tous les utilisateurs qui essaieront de le supprimer.


2
Cela dépend également de l'emplacement de ce répertoire. Si quelqu'un du groupe de questions a des droits rwx sur le répertoire contenant le répertoire de questions, il pourra le supprimer.
— Laurentiu Roescu

Ajoutez un supplément sudo chmod o+t ..pour définir l' tindicateur sur le répertoire parent. L' tindicateur ne permettra pas de supprimer un fichier qui n'appartient pas à l'utilisateur. test couramment utilisé /tmppour faire exactement cela. UserA ne peut pas supprimer les fichiers appartenant à UserB.
— jippie

Ou encore, mettez simplement la propriété correcte et les bits d'autorisation sur le répertoire.
— jippie

Cela ne fonctionne pas dans les conteneurs Docker. :(
— Kirby

13

Créez un fichier ".protected" et faites comme root

chattr +i .protected

Vous pouvez ensuite supprimer tous les fichiers sauf .protecteddans ce répertoire, ainsi le répertoire ne peut être supprimé par aucun autre utilisateur.


Simple et efficace. Très bonne réponse.
— Wug

Cela ne fonctionne pas dans les conteneurs Docker. :(
— Kirby

1
Pour le supprimer, utilisez "chattr -i [nom de fichier]" pour supprimer l'attribut immuable.
— emeraldhieu

3
chattr +a

devrait faire le travail. Vous pouvez créer des fichiers à l'intérieur mais vous ne pourrez pas les supprimer.


j'ai mis à jour la question
— gasko peter
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.