Est-il possible d'empêcher la suppression de certains fichiers du répertoire appartenant à l'utilisateur?


42

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

Si je change la propriété de Directory1 et 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 être capable de définir des fichiers qui ne seraient jamais supprimés.

Description plus spécifique.

Je crée des profils d'utilisateurs. Je crée des fichiers de lancement d’applications sur leur bureau . Donc, je veux définir des fichiers de lancement (.desktop) et les faire en sorte que l'utilisateur ne puisse les lancer que sans pouvoir les renommer ni les 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 tout * nix, c'est un Linux et un ext4 FS.

Réponses:


40

(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 userc'est déjà un membre du groupe user. Une solution consiste à changer de propriétaire Directory1et à définir le sticky bit sur le répertoire:

chown root:user Directory1
chmod 1775 Directory1

Alors utilisez:

chown root Directory1/CantBeDeletedFile

Maintenant, userne sera pas en mesure de supprimer ce fichier en raison du bit persistant¹. Le userest toujours en mesure d'ajouter / supprimer leurs propres fichiers dans Directory1. Mais remarquez qu'ils ne pourront pas supprimer Directory1car il ne sera jamais vidé.

-
1. Lorsque le pense-bête est activé sur un répertoire, les utilisateurs (autres que le propriétaire) peuvent uniquement supprimer leurs propres fichiers dans un répertoire. Ceci est utilisé sur des répertoires comme ceux /tmpdont les permissions sont 1777= rwxrwxrwt.


Je n'aime pas trop, mais les utilisateurs sont des novices dans le monde Linux. S'ils suppriment un lanceur comme par hasard, ils commencent à spammer notre support technique :)
mardi

Merci ça marche! Je ne sais pas comment je vais procéder. Avec chattr ou par cette voie. Si vous êtes sur votre chemin. Je peux toujours supprimer le répertoire en tant que racine. Avec la solution supérieure (chattr), même root ne peut pas supprimer le dossier.
Bakytn

@bakytn: S'agit-il simplement d'une précaution ou avez-vous reçu l'appel du support? Parce que la plupart des débutants auront probablement trop peur pour s'occuper de fichiers qu'ils ne connaissent pas.
Lie Ryan

@Lie Ryan 100% sur qu'ils appelleraient pour obtenir de l'aide. Mais oui, actuellement c'est juste une précaution.
bakytn

Tôt ou tard, les roues d’entraînement doivent céder ... et s’ils n’ont pas appris à faire de la moto, l’accident sera quelque chose à voir. Je suis d' accord avec la réponse, probablement complétée withcopious l' aide en ligne et le spam en boîte « Si vous « accidentellement » supprimé ThisDesktopFile, allez d' abord au mur le plus proche et bang votre tête dure contre 3 fois (pour la chance), puis faire cp /here/is/the/master/ThisDesktopFile $HOME. Signé : BOfH "
vonbrand

63

Rendre le fichier immuable avec l' iattribut.

chattr +i file.desktop

voir man chattrpour plus d'informations.


8
J'ajoute cette note car je ne pouvais pas la déduire de la page de manuel mentionnée: chattrne fonctionne que sur les systèmes de fichiers ext2 / ext3 / ext4.
Manatwork

C'est trop cool! Ça a marché! Merci Monsieur! Solution élégante, mais une limitation. Même root ne peut pas supprimer ces fichiers sans d'abord le rendre mutable. Mais c'est tellement cool en fait. Je ne savais pas quelle réponse accepter. Accepté de manière plus générique mais moins rapide
bakytn

@ manatwork cela fonctionne aussi sur XFS au moins, je suppose que d'autres systèmes de fichiers supportent également ces attributs.
Ruslan

Pour annuler cette commande, il suffit de fairechattr -i file.desktop
GreenRaccoon23

1
Je viens de tester cela sur zfs sur linux et cela a fonctionné. Je voulais empêcher la suppression d'un fichier utilisé pour demander au programme de sauvegarde baculad'ignorer le dossier.
drescherjm

2

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-toolsest parfait pour ce genre de chose si vous êtes sur Linux.

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


0

Un simple

chmod -i filename

va un peu "protéger" ce fichier de 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.

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.