
Wie erstelle ich einen wirklich freigegebenen Ordner auf einem Linux-Server? Ich möchte, dass die Mitglieder eines Projektteams jede Datei lesen und schreiben können, als wäre es ihre eigene, unabhängig davon, ob sie die Datei in den Ordner kopiert oder verschoben haben, sie selbst im Ordner erstellt haben oder ob die Datei von anderen erstellt wurde.
Bisher bin ich auf die folgenden Probleme gestoßen:
- umask funktioniert nur auf systemweiter Ebene und ignoriert vorhandene Dateien
- ACLs ignorieren Dateien, die vom Benutzer in den Ordner verschoben wurden
- inotify scheint ein Hack zu sein, da es die Berechtigungen nachträglich repariert, was bei einigen Office-Dokumenten zu Problemen führen kann
- verursacht regelmäßig
chgrp -R projectteam /folder/
Leistungsprobleme, Verzögerungen und Backups.
Meine aktuelle Lösung ist eine SAMBA-Freigabe, die auf demselben Server installiert force user
und force group
aktiviert ist. Dies ist jedoch für mehrere Projektgruppen umständlich zu verwalten und ich glaube, dass dies zu Leistungseinbußen führt.
Für jede Hilfe oder Idee wäre ich sehr dankbar. Ich verwende Debian 10.
Mit freundlichen Grüßen aus Hamburg
Michael
Antwort1
Wenn allen Projektbenutzern eine gemeinsame Projektgruppe zugewiesen ist, können Sie das Setgid-Bit für Ihr Projektverzeichnis (und dessen Unterverzeichnisse) setzen:
find /path/to/teamfolder -type d -exec chmod g+s '{}' \;
Legen Sie außerdem ACL-Berechtigungen für das Projektverzeichnis fest, etwa wie:
setfacl -d -m u::rwx,g::rwx,o::r-x /path/to/teamfolder
Wenn das Setgid-Bit für ein Verzeichnis gesetzt ist, erben alle in diesem Verzeichnis erstellten Dateien den Gruppenbesitz dieses Verzeichnisses. ACL-Berechtigungen ermöglichen, dass erstellte Dateien im Projektverzeichnis Schreibberechtigungen für die Gruppe haben.
Ein neuer Benutzer kann wie folgt hinzugefügt werden:
sudo usermod -a -G projgrp newuser
Hoffe das hilft.
Antwort2
Sie müssen mehrere Konfigurationsebenen einrichten und die Verwaltung kann dadurch erheblich vereinfacht werden.
Wie Abhishek vorgeschlagen hat, ist das Setzen des Setgid-Bits für ein Verzeichnis sehr hilfreich, da dadurch der Gruppenbesitz des Verzeichnisses für neu erstellte Dateien und Verzeichnisse standardmäßig vererbbar wird.
Kopierte Dateien behalten jedoch, wie Sie festgestellt haben, ihren Besitz. Zum Zurücksetzen des Gruppenbesitzes ist der incrontab-Ansatz gut geeignet. Ein modernerer Ansatz würde eine systemd-.path-Datei verwenden, um auf Änderungen zu überwachen, und eine entsprechende .service-Datei, um chgrp auszuführen.
Um Ihre Frage zur Konfiguration für die Unterstützung vieler Projektgruppen zu beantworten, beachten Sie Folgendes:
Bedenken Sie zunächst, dass Samba nur eine Authentifizierung bereitstellt und von den Berechtigungen des Dateisystems sowie den Benutzerkonten des Hosts abhängig ist.
Setzen Sie umask auf 0002, wodurch Gruppenschreibberechtigungen standardmäßig gewährt werden.
Erstellen Sie für jeden Benutzer ein Host-Konto:
sudo useradd andreas
sudo useradd beatrix
sudo useradd ciela
Erstellen Sie für Verwaltungszwecke einen eigenen „Superuser“ getrennt vom Root-Benutzer:
sudo useradd oberst
Erstellen Sie für jedes Projekt eine Gruppe:
sudo groupadd hund
sudo groupadd katz
Erstellen Sie für jedes Projekt ein Datenverzeichnis, legen Sie die Berechtigungen (einschließlich des Setguid-Bits) und den Eigentümer fest. Im Folgenden wird das Setgid-Bit (2) gesetzt, dem Superuser oberst und der angegebenen Gruppe volle Berechtigungen (7) erteilt und anderen Benutzern keine Berechtigungen (0), sodass Nicht-Gruppenmitglieder weder lesen noch schreiben oder ausführen können:
sudo mkdir /srv/hund
sudo chown oberst:hund /srv/hund
sudo chmod 2770 /srv/hund
sudo mkdir /srv/katz
sudo chown oberst:katz /srv/katz
sudo chmod 2770 /srv/katz
Benutzer zu Gruppen hinzufügen:
sudo usermod -a -G hund andreas
sudo usermod -a -G hund beatrix
sudo usermod -a -G katz beatrix
sudo usermod -a -G katz ciela
Benutzer zu Samba hinzufügen:
sudo smbpasswd -a andreas
sudo smbpasswd -e andreas
sudo smbpasswd -a beatrix
sudo smbpasswd -e beatrix
sudo smbpasswd -a ciela
sudo smbpasswd -e ciela
Bearbeiten Sie smb.conf, um Freigaben zu erstellen. Read-only=no ermöglicht Schreibzugriff und browsable=no verhindert, dass andere (d. h. Nicht-Gruppenmitglieder) die Freigabe durchsuchen. Beachten Sie das Präfix „@“ in der Direktive „valid users“, die den Zugriff durch Verweis auf Hostgruppen definiert:
[hund]
path=/srv/hund
read only=no
browsable=no
force group=hund
valid users=@hund
[katz]
path=/srv/katz
read only=no
browsable=no
force group=katz
valid users=@katz
Jetzt (möglicherweise nach einem Neustart) ist der Zugriff (Lesen/Schreiben) auf /srv/hund für Andreas und Beatrix möglich, aber nicht für Ciela, und der Zugriff (Lesen/Schreiben) auf /srv/katz ist für Beatrix und Ciela möglich, aber nicht für Andreas.
Um den Zugriff eines Benutzers zu ändern, müssen Sie lediglich die Gruppenmitgliedschaft mit usermod ändern.
Natürlich sollten Sie auch Passwörter für Hostkonten und Samba-Konten konfigurieren.
Hoffe, das ist hilfreich.