Un moyen simple et efficace de partager des fichiers sur une machine locale

13

Je voudrais avoir un répertoire qui a les propriétés suivantes:

  • De nombreux utilisateurs peuvent y copier des fichiers
  • Ces fichiers peuvent être supprimés / modifiés par ces utilisateurs (l'utilisateur A peut supprimer / modifier le fichier qui a été copié dans ce répertoire)

cela ne peut pas être fait en utilisant les autorisations de fichier normales (car les autorisations sont conservées sur la copie).

Voici ce que j'ai trouvé sur le net:

Quelques cas d'utilisation:

  • Partage de musique sur une machine locale
  • Partage de référentiel git simple (il suffit de rendre un référentiel nu accessible en écriture à de nombreuses personnes) --- je sais qu'il existe des solutions comme la gitose
  • Permettre à de nombreux développeurs de modifier l'instance de test de l'application php sans leur donner la racine (je suppose qu'ils copieraient des fichiers) --- Je dirige une équipe de développeurs juniors à but non lucratif et je dois garder cela simple!

ÉDITER

Le réglage AFAIK du bit SGID n'est pas suffisant, il affecte uniquement les fichiers nouvellement créés --- et le flux de travail de base pour ces cas d'utilisation copie ivnolves et autres opérations (qui clivent le gid du fichier inchangé)

jb.
la source

Réponses:

9

Listes de contrôle d'accès

La réponse directe est les listes de contrôle d'accès (ACL) . Oui, vous pouvez trouver un contre-exemple, mais ils sont assez bons dans la pratique (contrairement à la simple écriture en groupe qui nécessite que les utilisateurs y réfléchissent tout le temps). Ce dont ils ont besoin, c'est que l'administrateur système (root) définisse les groupes, si vous souhaitez que les fichiers soient partagés uniquement par un groupe nommé (root peut choisir de déléguer, par exemple en acceptant des groupes de LDAP, mais c'est une autre histoire).

Vous avez besoin que les utilisateurs participants aient un umask de 022. S'ils créent régulièrement des fichiers non lisibles par le monde, ce schéma ne fonctionnera pas. Mais s'ils ont un umask restrictif, c'est probablement parce qu'ils ne veulent pas partager de fichiers de toute façon.

Activation des ACL

Ubuntu n'active pas les ACL par défaut, il y a donc une exigence d'administration unique. Modifiez à l' /etc/fstabaide de votre éditeur préféré et changez chaque ligne correspondant à un système de fichiers où vous souhaitez partager des fichiers: ajoutez aclaux options. (Assurez-vous de ne modifier aucune autre ligne et de ne pas utiliser un éditeur qui encapsule de longues lignes.) Voici un exemple de ligne avec l' acloption ajoutée:

UUID=5e1ec7ed-face-dead-beef-c011ec7ab1e5  /  ext4  errors=remount-ro,acl  0 1

Pour que l'option prenne effet la première fois, utilisez une commande comme celle-ci (pour chaque système de fichiers):

sudo mount -o remount,acl /

Installez les outils ACL à partir du aclpackage.

Configuration du répertoire partagé

Pour partager des fichiers avec le groupe mygroup:

setfacl -m group:mygroup:rwx /path/to/shared/root
setfacl -d -m group:mygroup:rwx /path/to/shared/root

Si des personnes créent des fichiers et les copient dans le répertoire partagé, les fichiers seront lisibles par tous (à cause de l'umask) et n'importe qui dans le groupe pourra ajouter et supprimer des fichiers (car le groupe est accessible en écriture de groupe). Les gens ne peuvent pas modifier les fichiers les uns des autres, mais c'est une bonne chose ou vous pourriez rencontrer des conflits de modification immédiatement.

Si vous n'avez pas de groupe Unix, vous pouvez ajouter des utilisateurs un par un:

setfacl -m user:bob:rwx /path/to/shared/root
setfacl -d -m user:bob:rwx /path/to/shared/root

Contrôle de version

Si vous souhaitez que les utilisateurs puissent modifier les fichiers sur place, vous avez également besoin de quelque chose pour éviter les conflits de modification. C'est le contrôle de version.

Vous n'avez besoin de rien de tout cela pour partager un référentiel git. Vous savez qu'il existe des solutions comme la gitose, alors utilisez-les.

Gilles 'SO- arrête d'être méchant'
la source
ACL fonctionnerait parfaitement si l'héritage automatique n'était pas rompu par cp (et mv?) Qui rejette (ignore) le jeu d'accl par défaut au niveau du répertoire cible.
utile
2

Faites simplement ceci:

mkdir /src/teamA
addgroup teamA
chgrp teamA /src/teamA
chmod g+rws /src/teamA

Maintenant, tout le monde dans le teamAgroupe peut tout faire à l'intérieur/src/teamA

La magie est le bit sgid (set group id) sur le répertoire.

shellholic
la source
AFAIK ça ne marchera pas, voir la mise à jour post
jb.
1

Si vous souhaitez que les utilisateurs puissent accéder aux fichiers dans un dossier partagé (par exemple, différentes personnes se connectent à la même machine à différents moments et ont besoin d'accéder aux mêmes fichiers), vous pouvez utiliser bindfspour créer un répertoire partagé.

Il permet à plusieurs utilisateurs locaux de lire et d'écrire (créer, supprimer, renommer, modifier ...) tous les fichiers (y compris ceux nouvellement créés) à partir d'un répertoire partagé et de ses sous-répertoires. Chaque utilisateur verra les fichiers et dossiers (y compris ceux nouvellement créés) comme leur appartenant.

En bref, vous exécutez

sudo bindfs -o perms=0700,mirror-only=user1:user2:user3 /home/shared /home/shared

pour rendre / home / shared accessible à user1, user2 et user3.

Instructions

Voir Bindfs-SharedDirectoryLocalUsers (documentation Ubuntu) pour des instructions complètes, y compris sa configuration permanente (chaque fois que vous allumez votre ordinateur). Je l'utilise sur ma propre machine pour un certain nombre de répertoires, chacun avec des groupes de partage différents (un dossier est disponible pour tous les comptes, un autre uniquement pour les comptes professionnels, un autre uniquement pour les comptes personnels).

De la poste:

bindfs est un système de fichiers FUSE pour monter un répertoire à un autre emplacement (point de montage), avec des paramètres d'autorisation. Il vous permet de spécifier la propriété et les autorisations des fichiers depuis l'intérieur du point de montage.

...

Le principal avantage est que les nouveaux fichiers créés dans le répertoire partagé hériteront de la propriété et des autorisations.

Listes de contrôle d'accès (ACL)

La documentation note:

Si vous souhaitez configurer des autorisations plus avancées pour différents utilisateurs et / ou groupes, essayez les listes de contrôle d'accès .

Voir la réponse de Gilles pour plus de détails.

david.libremone
la source
si vous rencontrez des problèmes pour ajouter des bindfs sur oneiric, vous pouvez obtenir des packages créés par les utilisateurs ici bugs.launchpad.net/ubuntu/+source/bindfs/+bug/851600
david.libremone
-3

Vous pouvez combiner la solution de shellholic avec un travail cron qui met à jour le gid pour tous les fichiers de ce dossier toutes les 15 secondes ou quelque chose de similaire.

David Oneill
la source