Comment puis-je créer une vue en écriture seule d'un dossier?

12

Je veux avoir une place sur le système de fichiers qui présente une "vue" en écriture seule d'un autre dossier auquel j'ai accès en lecture-écriture.

J'imagine quelque chose qui a un comportement similaire à une boîte de dépôt FTP, où les fichiers peuvent être copiés dedans mais pas lus, par exemple:

$ ls read-write-view/ write-only-view/
read-write-view/:
a  b  c

write-only-view/:

$ cp d write-only-view/
$ ls read-write-view/ write-only-view/
read-write-view/:
a  b  c  d

write-only-view/:

Il est important que cela fonctionne comme dans l'exemple - le contenu est toujours visible lorsque vous y accédez read-write-view/, et les deux "vues" sont fonctionnelles pour un seul utilisateur.

Comment puis-je configurer quelque chose comme ça? Un arrangement intelligent de liens symboliques, peut-être? Ou une configuration inhabituelle d'une monture de liaison?

ændrük
la source

Réponses:

2

J'ai posé cette même question pour les boîtes de dépôt des étudiants sur la liste de diffusion de samba il y a quelques années (http://lists.samba.org/archive/samba/2008-September/143610.html) et la réponse a fonctionné pour nous. Vous avez besoin d'attributs acl étendus sur votre système de fichiers (à partir du package acl), voici la réponse de Jeremy Allison ...

Ok, le problème est que les étudiants doivent être capables de lire le répertoire contenant afin de pouvoir y glisser-déposer de nouveaux fichiers. La raison en est que Samba doit pouvoir analyser le répertoire en leur nom afin d'effectuer des recherches insensibles à la casse.

Mais tant que cela ne vous dérange pas de permettre aux étudiants de voir les noms des autres fichiers, vous pouvez configurer une DropBox afin que les étudiants puissent y écrire (et leurs propres fichiers) mais pas modifier ou voir d'autres fichiers.

Tout d'abord, vous voulez vous assurer que les fichiers créés dans le répertoire DropBox ne sont pas détenus par le groupe principal de l'étudiant, mais par le propriétaire du groupe de la direcotry DropBox. Donc :

enseignants chgrp DropBox

pour le faire appartenir au groupe des enseignants. Réglez ensuite le bit setgid sur le répertoire DropBox pour vous assurer que les fichiers créés à l'intérieur il y avoir un groupe possédant des enseignants.

chmod g + s DropBox

Assurez-vous ensuite qu'un fichier dans DropBox peut être renommé ou supprimé uniquement par le propriétaire du fichier, ou par le propriétaire du répertoire, ou par root (les mêmes autorisations que / tmp possède).

chmod + t DropBox

Ensuite, autorisez les élèves à écrire dans le répertoire en ajoutant une ACL

setfacl -mg: étudiants: rwx DropBox

Tant que la valeur par défaut acl est définie de manière à ce que "les autres" n'aient pas d'autorisations, les fichiers écrits par un étudiant dans ce répertoire appartiendront à eux-mêmes mais auront un groupe propriétaire d '"enseignants", et les étudiants ne pourront pas lire chacun d'eux d'autres fichiers.

Si vous devez faire en sorte que les fichiers appartiennent au propriétaire du répertoire, et non aux étudiants qui les ont créés, vous devez configurer un partage séparé comme décrit ci-dessus, mais ajoutez ensuite le paramètre de niveau de partage:

hériter du propriétaire = oui

ce qui fait que les fichiers créés dans les répertoires de ce partage appartiennent au répertoire contenant, et non au propriétaire créateur.

user55604
la source
1

Vous pouvez y parvenir en définissant les autorisations sur le dossier de sorte que les utilisateurs cibles aient un accès en écriture au dossier mais pas un accès en lecture.

Par exemple, pour permettre à quiconque d'écrire dans un dossier sans en répertorier le contenu, vous pouvez procéder comme suit:

chmod o=wx folder

Ou pour n'accorder cet accès qu'à un groupe particulier d'utilisateurs:

chgrp groupname folder
chmod o=,g=wx folder

Désormais, ces utilisateurs ne pourront pas répertorier le contenu du dossier mais pourront placer des fichiers dans le dossier:

$ ls folder
ls: cannot open directory folder: Permission denied
$ touch folder/filename

Cela ne fait pas tout ce que vous voulez, car si les utilisateurs peuvent toujours accéder aux fichiers du dossier s'ils peuvent deviner le nom. Vous pouvez minimiser ce risque grâce à une tâche cron qui déplace régulièrement les fichiers du dossier de la liste déroulante vers un emplacement auquel les autres utilisateurs n'ont pas accès.

James Henstridge
la source
1

Vous pouvez créer un dossier de dépôt «écriture seule» avec accès rw et utiliser la notification cronjob ou inode pour déplacer le contenu vers l'autre «lecture-écriture-vue».

jet
la source
1

Je crois que vous pouvez simplement utiliser bind monter la ruse, en /etc/fstab:

/path/to/read-write-view /path/to/write-only-view none bind 0 0

Donc, vous pourriez probablement alors:

chmod a=wx /path/to/write-only-view
chmod a=rwx /path/to/read-write-view
Glen
la source
1

Utilisez bindfs , qui est conçu pour «monter un répertoire à un autre emplacement et modifier les bits d'autorisation».

Commencez avec un dossier normal disposant d'un accès en lecture et en écriture:

$ mkdir read-write-view && touch read-write-view/{a,b,c}
$ ls read-write-view
a  b  c

Utilisez bindfs pour monter le dossier sans accès en lecture:

$ mkdir write-only-view
$ sudo bindfs --perms=a-r read-write-view write-only-view

Vérifiez que seul le contenu du dossier d'origine peut être répertorié:

$ ls read-write-view write-only-view
read-write-view:
a  b  c
ls: cannot open directory write-only-view: Permission denied

Vérifiez que le dossier d'origine peut être écrit via le montage:

$ echo 'Can you read this?' > write-only-view/d
$ cat read-write-view/d
Can you read this?

Vérifiez que les fichiers ne peuvent pas être lus via le montage:

$ cat write-only-view/d
cat: write-only-view/d: Permission denied
ændrük
la source
0

Tout d'abord, il est plus facile de penser à cela à l'envers. Vous avez un dossier qui est rw pour ceux qui ont besoin d'un accès en écriture et une "vue" en lecture seule de ce dossier pour ceux qui ont besoin d'un accès en lecture seule.

Je n'ai jamais réussi à faire fonctionner correctement l'option mount --bind -o ro. La façon la plus fiable de le faire est d'utiliser nfs. Ajoutez ce qui suit à / etc / exports

/path-to-folder/folder 127.0.0.1(secure,ro,no_root_squash)

puis monter en lecture seule « vue » avec

mount -o ro 127.0.0.1:/path-to-folder/folder /read-only-folder

Vous devriez maintenant avoir une vue en lecture seule de votre dossier d'origine.

Je suppose que vous pourriez faire la même chose avec samba / cifs, mais cela n'aurait de sens que pour l'accès au réseau.

Cette solution a été inspirée ( volée ) de ce Howto . J'espère que ça aide.

Chris
la source
Je ne demande pas une vue en lecture seule, juste en lecture-écriture et en écriture seule.
ændrük
0

Je ne pense pas que cela soit possible, car il faut lire un disque "écriture seule" pour afficher le contenu.

Si je vendais un tel appareil, comment pourrait-on vérifier qu'il fonctionne? C'est peut-être pour kickstarter.


la source
0

Ce n'est pas une réponse, mais plutôt une pensée et peut-être une autre question. Pour moi, cela semble pouvoir être implémenté via une sorte de crochet ou de déclencheur.

Certains programmes en arrière-plan peuvent regarder le dossier en écriture seule (pas par interrogation, il peut être notifié avec FAM ou quelque chose comme ça), puis en déplacer chaque fichier dans le dossier en lecture seule dès qu'il apparaît.

MPi
la source