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

gasko peter
la source
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.

jippie
la source
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.

Magnus
la source
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.

Laurentiu Roescu
la source
j'ai mis à jour la question
gasko peter