GNU/Linux >> Tutoriels Linux >  >> Linux

Autoriser le propriétaire à créer et à lire des fichiers, mais pas à les modifier ni à les supprimer

Vous pouvez utiliser bindfs comme :

$ ls -ld dir
drwxr-xr-t 2 stephane stephane 4096 Aug 12 12:28 dir/

Ce répertoire appartient à stephane, avec le groupe stephane (stephane étant son seul membre). Notez également le t qui empêche les utilisateurs de renommer ou de supprimer des entrées dont ils ne sont pas propriétaires.

$ sudo bindfs -u root -p u=rwD,g=r,dg=rwx,o=rD dir dir

Nous bindfs dir sur lui-même avec une propriété et des autorisations fixes pour les fichiers et les répertoires. Tous les fichiers semblent appartenir à root (bien qu'en dessous dans le vrai répertoire, ils appartiennent toujours à stephane).

Les répertoires obtiennent drwxrwxr-x root stephane autorisations tandis que d'autres types de fichiers obtiennent -rw-r--r-- root stephane ceux.

$ ls -ld dir
drwxrwxr-t   2 root     stephane   4096 Aug 12 12:28 dir

Maintenant, la création d'un fichier fonctionne car le répertoire est accessible en écriture :

$ echo test > dir/file
$ ls -ld dir/file
-rw-r--r-- 1 root stephane 5 Aug 12 12:29 dir/file

Cependant, il n'est pas possible de faire une seconde écriture open() sur ce fichier car nous n'avons pas la permission dessus :

$ echo test > dir/file
zsh: permission denied: dir/file

(notez que l'ajout n'est pas autorisé ici (car ne faisant pas partie de vos exigences initiales)).

Une limitation :alors que vous ne pouvez pas supprimer ou renommer des entrées dans dir à cause du t bit, les nouveaux répertoires que vous y créez n'auront pas ce t bit, vous pourrez donc y renommer ou supprimer des entrées.


Le chattr +a l'option autorisera l'ajout uniquement. Les fichiers peuvent être modifiés de cette façon, mais uniquement en leur ajoutant (c'est-à-dire en ajoutant des lignes). Vous ne pouvez pas supprimer des fichiers existants, mais en créer de nouveaux. Cela pourrait répondre à vos besoins :

sudo chattr -R +a /dir/to/apply/to

à partir de man chattr

Un fichier avec l'attribut `a' défini ne peut être ouvert qu'en mode ajout pour l'écriture. Seul le superutilisateur ou un processus possédant la capacité CAP_LINUX_IMMUTABLE peut définir ou effacer cet attribut.

(notez que cela s'applique également aux répertoires)

Votre liste ressemblerait donc à :

echo hello > test # succeeds, because test doesn't exist, and creation is allowed
echo hello2 > test # fails, because test already exists, and overwriting is not allowed
echo hello3 >> test # succeeds, because appending is allowed
cat test # succeeds, because reads are allowed
rm test # fails, because delete is not allowed

Linux
  1. Supprimer les fichiers qui n'ont pas été consultés pendant un certain temps sous Linux

  2. Supprimer tous les fichiers d'un répertoire dont le nom ne correspond pas à une ligne dans une liste de fichiers ?

  3. Un script peut-il être exécutable mais pas lisible ?

  4. UNIX ar Exemples :Comment créer, afficher, extraire, modifier des fichiers d'archive C (*.a)

  5. Script bash pour supprimer tous les fichiers sauf N lorsqu'ils sont triés par ordre alphabétique

Comparer les répertoires mais pas le contenu des fichiers ?

Comment créer un utilisateur presque équivalent à la racine mais pas un utilisateur identique à la racine sous Linux

Qt ne crée pas de fichiers de sortie dans les dossiers de débogage/version sous Linux

Supprimer le référentiel Git, mais conserver tous les fichiers

Gestion automatique des versions lors du changement de fichier (modifier/créer/supprimer)

Supprimer tous les fichiers aléatoires sauf 1000 dans un répertoire