web-dev-qa-db-fra.com

Existe-t-il un moyen d'empêcher la suppression de certains fichiers du répertoire appartenant à l'utilisateur?

Disons que l'utilisateur a Directory1 et qu'il contient File1 File2 CantBeDeletedFile Comment faire pour que l'utilisateur ne jamais être autorisé à supprimer le CantBeDeletedFile ?

Si je change la propriété de Directory1 et que je supprime les autorisations d'écriture, les utilisateurs ne pourront supprimer aucun fichier. Ils ne pourraient pas non plus ajouter de nouveaux fichiers, etc.

Je veux juste pouvoir définir des fichiers qui ne seront jamais supprimés.

Description plus précise.

Je crée des profils d'utilisateurs. Je crée des fichiers de lancement d'application dans leur Desktop. Je veux donc définir des fichiers de lancement (.desktop) et les faire en sorte que l'utilisateur ne puisse que les lancer et qu'ils ne puissent pas renommer ni supprimer, il suffit de les lancer.

Actuellement, si l'utilisateur possède le répertoire qui contient n'importe quel fichier. Il peut supprimer.

S'il n'y a pas de moyen générique pour all * nix, c'est un FS Linux et ext4.

44
bakytn

(Je n'aime pas envahir la maison des utilisateurs, je pense qu'ils devraient être autorisés à faire ce qu'ils veulent faire avec leur maison… mais de toute façon…)

Cela devrait fonctionner sur Linux (au moins). Je suppose que user est déjà membre du groupe user. Une solution consiste à changer la propriété de Directory1 et définissez le bit collant sur le répertoire:

chown root:user Directory1
chmod 1775 Directory1

Utilisez ensuite:

chown root Directory1/CantBeDeletedFile

Maintenant, user ne pourra pas supprimer ce fichier en raison du bit collant¹. user peut toujours ajouter/supprimer ses propres fichiers dans Directory1. Mais notez qu'ils ne pourront pas supprimer Directory1 car il ne sera jamais vidé.

-
1. Lorsque le bit collant est activé sur un répertoire, les utilisateurs (autres que le propriétaire) ne peuvent supprimer que leurs propres fichiers dans un répertoire. Ceci est utilisé sur des répertoires comme /tmp dont les autorisations sont 1777 = rwxrwxrwt.

42
Stéphane Gimenez

Rendez le fichier immuable avec l'attribut i.

chattr +i file.desktop

voir man chattr pour plus d'informations.

64
Keith

Je ne pense pas qu'il existe un moyen d'empêcher la suppression d'un fichier individuel avec des autorisations de fichier Unix, mais je peux penser à une solution de contournement: écrivez un démon qui le remplace lorsqu'il est supprimé. inotify-tools est parfait pour ce genre de chose si vous êtes sous Linux.

Il existe plusieurs façons de remplacer l'élément supprimé: copiez-en un nouveau ou conservez le fichier réel dans un endroit sûr et copiez simplement un lien dans le répertoire de l'utilisateur. Pour le lien, vous pouvez utiliser un lien symbolique ou un lien dur. Je commencerais par un lien symbolique, mais certains (très peu) de programmes ne gèrent pas correctement les liens symboliques. Si vous constatez que l'utilisateur rencontre un programme comme celui-ci, utilisez plutôt un lien dur.

2
Shawn J. Goff

Un simple

chmod -i filename

va "protéger" ce fichier contre la suppression.

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

Vous pouvez toujours le supprimer, mais au moins vous devez être suffisamment sûr de ce que vous faites.

0
fiatjaf