Gute und einfache Möglichkeit, Dateien auf einem lokalen Computer freizugeben

13

Ich hätte gerne ein Verzeichnis mit folgenden Eigenschaften:

  • Viele Benutzer können Dateien darin kopieren
  • Diese Dateien können von diesen Benutzern gelöscht / geändert werden (Benutzer A kann in dieses Verzeichnis kopierte Dateien löschen / ändern).

Es kann nicht mit normalen Dateiberechtigungen ausgeführt werden (da die Berechtigungen beim Kopieren beibehalten werden).

Folgendes habe ich im Internet gefunden:

Einige Anwendungsfälle:

  • Freigeben von Musik auf einem lokalen Computer
  • Einfache gemeinsame Nutzung von Git-Repositorys (nur ein nacktes Repository für viele Leute beschreibbar machen) --- Ich weiß, dass es Lösungen wie Gitosis gibt
  • Erlauben Sie vielen Entwicklern, die Testinstanz der PHP-App zu ändern, ohne ihnen root zu geben (ich denke, sie würden Dateien kopieren) --- Ich leite ein Team von gemeinnützigen Junior-Entwicklern, und ich muss das einfach halten!

BEARBEITEN

Das SGID-Bit der AFAIK-Einstellung reicht nicht aus, es wirkt sich nur auf neu erstellte Dateien aus - und der grundlegende Workflow für diese Anwendungsfälle verbessert das Kopieren und andere Vorgänge (die das GID der Datei unverändert auflösen).

jb.
quelle

Antworten:

9

Zugriffssteuerungslisten

Die direkte Antwort sind Zugriffssteuerungslisten (Access Control Lists, ACLs) . Ja, Sie können ein Gegenbeispiel finden, aber sie sind in der Praxis gut genug (im Gegensatz zur reinen Gruppenschreibbarkeit, bei der die Benutzer die ganze Zeit darüber nachdenken müssen). Was sie benötigen, ist, dass der Systemadministrator (root) die Gruppen definiert, wenn Dateien nur von einer benannten Gruppe gemeinsam genutzt werden sollen (root kann dies delegieren, indem er beispielsweise Gruppen von LDAP akzeptiert, aber das ist eine andere Geschichte).

Sie benötigen teilnehmende Benutzer, die eine umask von 022 haben. Wenn sie routinemäßig nicht weltweit lesbare Dateien erstellen, funktioniert dieses Schema nicht. Wenn sie jedoch eine restriktive umask haben, liegt dies vermutlich daran, dass sie ohnehin keine Dateien freigeben möchten.

Aktivieren von ACLs

Ubuntu aktiviert standardmäßig keine ACLs, daher gibt es eine einmalige Administratoranforderung. Bearbeiten Sie /etc/fstabmit Ihrem bevorzugten Editor und ändern Sie jede Zeile, die einem Dateisystem entspricht, in dem Sie Dateien freigeben möchten: Fügen Sie diese aclzu den Optionen hinzu. (Vergewissern Sie sich, dass Sie keine andere Zeile ändern und keinen Editor verwenden, der lange Zeilen umbricht.) Hier ist eine Beispielzeile mit der aclhinzugefügten Option:

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

Verwenden Sie einen Befehl wie den folgenden (für jedes Dateisystem), damit die Option zum ersten Mal wirksam wird:

sudo mount -o remount,acl /

Installieren Sie die ACL-Tools aus dem aclPaket.

Einrichten des freigegebenen Verzeichnisses

So lassen Sie Dateien von der Gruppe freigeben mygroup:

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

Wenn Benutzer Dateien erstellen und in das freigegebene Verzeichnis kopieren, sind die Dateien (aufgrund der umask) weltweit lesbar und jeder in der Gruppe kann Dateien hinzufügen und entfernen (da die Gruppe gruppenbeschreibbar ist). Die Leute können die Dateien der anderen nicht bearbeiten, aber das ist eine gute Sache, sonst stoßen Sie sofort auf Bearbeitungskonflikte.

Wenn Sie keine Unix-Gruppe haben, können Sie Benutzer einzeln hinzufügen:

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

Versionskontrolle

Wenn Sie möchten, dass Benutzer Dateien direkt bearbeiten können, müssen Sie auch Maßnahmen ergreifen, um Bearbeitungskonflikte zu vermeiden. Das ist Versionskontrolle.

Sie benötigen nichts davon, um ein Git-Repository freizugeben. Sie wissen, dass es Lösungen wie Gitosis gibt, also verwenden Sie sie.

Gilles 'SO - hör auf böse zu sein'
quelle
ACL würde perfekt funktionieren, wenn die automatische Vererbung nicht durch cp (und mv?) Unterbrochen würde, wodurch die auf Zielverzeichnisebene festgelegte Standard-ACL verworfen (ignoriert) würde.
nützlich
2

Mach einfach das:

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

Jetzt kann jeder in der teamAGruppe alles drinnen machen/src/teamA

Die Magie ist das sgid-Bit (set group id) im Verzeichnis.

Shellholic
quelle
AFAIK es wird nicht funktionieren, siehe aktualisierten Beitrag
jb.
1

Wenn Sie möchten, dass Benutzer auf Dateien in einem freigegebenen Ordner zugreifen können (z. B. wenn sich verschiedene Personen zu unterschiedlichen Zeiten auf demselben Computer anmelden und Zugriff auf dieselben Dateien benötigen), können Sie bindfsein freigegebenes Verzeichnis erstellen.

Es ermöglicht mehreren lokalen Benutzern, alle Dateien (einschließlich der neu erstellten) aus einem freigegebenen Verzeichnis und seinen Unterverzeichnissen zu lesen und zu schreiben (zu erstellen, zu löschen, umzubenennen, zu ändern ...). Jeder Benutzer sieht die Dateien und Ordner (einschließlich der neu erstellten) als zu ihnen gehörend.

Kurz, du rennst

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

um / home / shared für Benutzer1, Benutzer2 und Benutzer3 verfügbar zu machen.

Anleitung

Siehe Bindfs-SharedDirectoryLocalUsers (Ubuntu - Dokumentation) für ausführliche Anleitungen, es einschließlich der Einrichtung dauerhaft (jedes Mal , wenn Sie schalten Sie Ihren Computer auf). Ich verwende dies auf meinem eigenen Computer für eine Reihe von Verzeichnissen mit jeweils unterschiedlichen Freigabegruppen (ein Ordner ist für alle Konten verfügbar, ein anderer nur für Arbeitskonten, ein anderer nur für persönliche Konten).

Von der Post:

bindfs ist ein FUSE-Dateisystem zum Mounten eines Verzeichnisses an einem anderen Speicherort (Mountpoint) mit Berechtigungseinstellungen. Hier können Sie den Besitz und die Berechtigungen der Dateien im Mountpoint festlegen.

...

Der Hauptvorteil ist, dass die neuen Dateien, die im freigegebenen Verzeichnis erstellt werden, die Eigentumsrechte und Berechtigungen erben.

Zugriffssteuerungslisten (ACLs)

Die Dokumentation stellt fest:

Wenn Sie erweiterte Berechtigungen für verschiedene Benutzer und / oder Gruppen einrichten möchten, versuchen Sie es mit Zugriffssteuerungslisten .

Siehe Gilles Antwort für weitere Details.

david.libremone
quelle
Wenn Sie Probleme beim Hinzufügen von bindfs auf precise Sie vom Benutzer erstellte Pakete hier bekommen bugs.launchpad.net/ubuntu/+source/bindfs/+bug/851600
david.libremone
-3

Sie können die Lösung von shellholic mit einem Cron-Job kombinieren, der die GID für alle Dateien in diesem Ordner alle 15 Sekunden aktualisiert oder Ähnliches.

David Oneill
quelle