Festlegen mehrerer Gruppen als Verzeichnisbesitzer

31

Auf meinem Server habe ich Verzeichnis /srv/svn.

Ist es möglich, dieses Verzeichnis so einzustellen, dass es beispielsweise mehrere Gruppeneigentümer hat devFirmA, devFirmBund devFirmC?

Der Punkt ist, ich möchte die subversionVersionskontrolle verwalten mehrere Benutzer mehrere Repositories accross und ich weiß nicht , wie zu verschmelzen /srv/svn , das Stammverzeichnis von Endlagern, Berechtigungen. Ich habe zum Beispiel drei Firmen, FirmA, FirmBund FirmC. Nun innerhalb /srv/svnich drei Verzeichnisse erstellt haben, FirmA, FirmB, FirmCund in ihnen Ich habe für jedes Projekt erstellt Repository und jetzt weiß ich nicht , wie die Erlaubnis Schema zu etablieren , da alle innerhalb elementes /srv/svnvon Besitz sind root:root, was nicht in Ordnung ist, oder ich bin falsch?

KernelPanic
quelle
1
Greifen die Firmengruppen gegenseitig auf Dateien zu? Oder sind sie völlig unabhängig von der Freigabe eines übergeordneten Verzeichnisses?
JM Becker
@ TechZilla firm group MUSS nicht auf die anderen Dateien zugreifen, sondern MUSS getrennt sein. Nur ich muss Zugriff auf alle Verzeichnisse haben.
KernelPanic
OK, ich habe die richtige Antwort gepostet. Sie sollten hierfür keine ACLs verwenden. Sie sind ein letzter Ausweg, dieses Problem ist immer noch sehr verbreitet.
JM Becker

Antworten:

16

Dies ist ein äußerst häufiges Problem, wenn ich es richtig verstehe und es ständig erlebe. Wenn ich ACLs für jedes triviale Gruppierungsproblem verwenden würde, hätte ich Tonnen von nicht verwaltbaren Systemen. Sie verwenden die bewährte Methode, wenn Sie es nicht anders können, nicht für diese Situation. Dies ist die Methode, die ich sehr empfehlen kann.

Zuerst müssen Sie Ihre umask auf 002 setzen, damit eine Gruppe mit sich selbst teilen kann. Normalerweise erstelle ich eine Datei wie /etc/profile.d/firm.shund füge dann einen Testbefehl mit der umask hinzu.

[ $UID -gt 10000 ] && umask 002

Als nächstes müssen Sie die Verzeichnisse auf ihre jeweiligen Gruppen einstellen,

chgrp -R FirmA /srv/svn/FirmA 
chgrp -R FirmB /srv/svn/FirmB
chgrp -R FirmC /srv/svn/FirmC

Schließlich müssen Sie das SGID-Bit richtig einstellen, damit die Gruppe immer auf der von Ihnen eingestellten bleibt. Dies verhindert, dass eine geschriebene Datei auf die GID des Schreibers gesetzt wird.

find /srv/svn/FirmA -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmB -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmC -type d -print0 | xargs -0 chmod 2775

find /srv/svn/FirmA -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmB -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmC -type f -print0 | xargs -0 chmod 664

Nun zum Schluss, wenn Sie verhindern möchten, dass andere Benutzer auf die Verzeichnisse zugreifen.

chmod 2770 /srv/svn/FirmA
chmod 2770 /srv/svn/FirmB
chmod 2770 /srv/svn/FirmC
JM Becker
quelle
2
Warnung: Dies sollte funktionieren, entfernt jedoch das Ausführungsberechtigungsbit für alle Dateien. Dies ist in Ordnung, wenn Ihr Verzeichnisbaum nur Dokumente enthält. Wenn es ausführbare Dateien enthält, wird die Ausführung verhindert, was Ihr Setup ruinieren kann.
Stéphane Gourichon
1
Dies mag auch eine nette Idee sein, beantwortet aber die Frage überhaupt nicht.
13.
Dies partitioniert, wie beschrieben, nur die drei Ordner, so dass nur Mitglieder jeder Firma nur ihre jeweiligen Dateien ändern können - es gibt 'svn' nicht den Zugriff, den es benötigt.
Rich p
Dies ist jedoch sehr nahe. Was fehlt, ist, Ihnen Zugang zu allen Gruppen zu gewähren . Fügen Sie diesen Schritt hinzu, vorausgesetzt Ihre Anmeldung lautet svnadmin: sudo usermod -a -G FirmA,FirmB,FirmC svnadmin Dies fügt svnadminall diesen Gruppen hinzu. Da für die Dateien in all diesen Gruppen "Gruppenschreiben" aktiviert ist ( chmod 664haben dies getan), sind Sie und firmX die einzigen Schreiber von Dateien, die firmX gehören.
Rich p
1
Besser - die Berechtigungen ändern , hinzufügen / subtrahieren , was Sie hinzufügen möchten / subtrahieren - zB tunfind /srv/svn/FirmA -type f -print0 | xargs -0 chmod ug+rw,o+r,o-wx
reich p
25

Sie können nur eine Gruppe als Eigentümer haben .

Mithilfe von Zugriffssteuerungslisten können Sie jedoch Berechtigungen für andere Gruppen definieren.

Überprüfen Sie, ob Sie die ACL installiert haben, die den Befehl ausgibt getfacl. Wenn auf Ihrem System keine ACL installiert ist, installieren Sie die Befehlszeilentools, die im aclPaket enthalten sind, mit:sudo apt-get install acl

Mit getfaclkönnen Sie die ACL-Informationen eines Verzeichnisses oder einer anderen Datei lesen und mit setfacleiner Datei Gruppen hinzufügen.

Beispielsweise:

setfacl -m g:devFirmB:rwx /srv/svn/  

Fügt die Gruppe devFirmBmit r ead, w rite, e x ecute Berechtigungen Verzeichnis /srv/svn.

Wenn Dateien, die in diesem Verzeichnis erstellt wurden, auch mehreren Gruppen gehören sollen, legen Sie die ACL als Standard-ACL fest. Der XEintrag in der Standardgruppe bedeutet "Ausführung zulassen, wenn sie vom Eigentümer (oder einer anderen Person) ausgeführt werden kann".

setfacl -m g:devFirmB:rwx /srv/svn/  
setfacl -d -m g:devFirmB:rwX /srv/svn/  
jcbermu
quelle
6

Es ist nicht möglich, dass eine Datei mehreren Linux-Gruppen mit herkömmlichen Unix-Berechtigungen gehört. (Dies ist jedoch mit ACL möglich .)

Aber Sie könnten die folgende Abhilfe verwenden und eine neue Gruppe erstellen (zB genannt devFirms) , die alle Benutzer der Gruppen umfassen wird devFirmA, devFirmBund devFirmC.
Sie erstellen neue Benutzergruppen mit:

sudo addgroup NEWGROUPNAME

Möglicherweise müssen Sie zuerst installieren id-utils, um den lidBefehl -command zu erhalten:

sudo apt-get install id-utils

Anschließend können Sie die folgende Codezeile ausführen, um alle Benutzer von SOURCEGROUPauf einfache Weise zu kopieren TARGETGROUP. Natürlich müssen Sie den Befehl für jede Gruppe, die Sie kopieren möchten, einmal ausführen. Vergessen Sie nicht, die großgeschriebenen Platzhalter durch die tatsächlichen Gruppennamen zu ersetzen.

for u in $(lid -g -n SOURCEGROUP); do sudo usermod -a -G TARGETGROUP $u; done

In Ihrem Fall müssten Sie also den Befehl ausführen (alle Zeilen auf einmal):

sudo addgroup devFirms &&
for u in $(lid -g -n devFirmA); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmB); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmC); do sudo usermod -a -G devFirms $u; done

Beachten Sie, dass diese Befehle nur alle Benutzer kopieren, die derzeit Mitglieder der Quellgruppen sind. Jeder Benutzer, der später hinzugefügt wird, muss mit dem adduserBefehl auch manuell zu Ihrer allgemeinen Gruppe hinzugefügt werden . Ersetzen Sie einfach noch einmal die großgeschriebenen Platzhalter durch den tatsächlichen Benutzer- und Gruppennamen ( devFirms):

sudo adduser NEWUSER TARGETGROUP

Vielen Dank an Justin Ethier für seine Antwort bei Unix & Linux.SE: Alle Benutzer einer Gruppe zu einer anderen Gruppe hinzufügen?

Byte Commander
quelle
@ Gilles meinst du, dein Schema würde für mehrere Subversion-Server-Repositorys mit mehreren Benutzern funktionieren, wie in meinem Update der Frage?
KernelPanic
2

Nein das ist nicht möglich.

Jede Datei (und damit auch Verzeichnisse) kann nur einen Benutzer und eine Gruppe haben.

Uwe Plonus
quelle
6
Es wäre schön, einen alternativen Ansatz zu finden, um das gleiche oder ein ähnliches Ergebnis zu erzielen.
Byte Commander
2

Um mehreren Gruppen oder Benutzern unterschiedliche Rechte zu erteilen, verwenden Sie die folgenden Befehle (Getestet auf RHEL 6 und 7):

So legen Sie einen neuen Eigentümer für die Gruppe fest:

setfacl -m g:<group_name>:<rights you want to give eg.rwx> -R <directory_name>

So überprüfen Sie die aktuellen ACL-Einstellungen:

getfacl <directory_name>
Mr.H
quelle
Getestet, läuft auch auf Ubuntu 16.04.3
Dmitry