Ich habe ein bestimmtes Verzeichnis, in dem sich ein Projekt befindet, das von mehreren Benutzern geteilt wird. Diese Benutzer verwenden SSH, um Zugriff auf dieses Verzeichnis zu erhalten und Dateien zu ändern / zu erstellen.
Dieses Projekt sollte nur für eine bestimmte Benutzergruppe schreibbar sein: Nennen wir es "Meine Gruppe". Während einer SSH-Sitzung sollten alle vom aktuellen Benutzer erstellten Dateien / Verzeichnisse standardmäßig der Gruppe "mygroup" gehören und über gruppenschreibbare Berechtigungen verfügen.
Ich kann das Berechtigungsproblem lösen mit umask
:
$ cd project
$ umask 002
$ touch test.txt
Die Datei "test.txt" kann jetzt in Gruppen geschrieben werden, gehört jedoch weiterhin zu meiner Standardgruppe ("mislav", genau wie mein Benutzername) und nicht zu "mygroup". Ich kann chgrp
die gewünschte Gruppe rekursiv festlegen, aber ich wollte wissen, ob es eine Möglichkeit gibt, eine Gruppe implizit festzulegen, so wie umask die Standardberechtigungen während einer Sitzung ändert.
Dieses spezifische Verzeichnis ist ein freigegebenes Git-Repo mit einer Arbeitskopie, und ich möchte git checkout
und git reset
Operationen, um die richtige Maske und Gruppe für neue Dateien in der Arbeitskopie zu setzen. Das Betriebssystem ist Ubuntu Linux.
Update: Ein Kollege schlägt vor, dass ich mich mit getfacl / setfacl von POSIX ACL befassen soll, aber die Lösung unten in Kombination mit umask 002
in der aktuellen Sitzung ist gut genug für mich und viel einfacher.
Wenn Sie dies mit einem vorhandenen Ordner tun möchten, müssen Sie sicherstellen, dass das Bit setgid auch für alle Unterordner aktiviert ist. Sie benötigen es jedoch nicht für Dateien, und Sie möchten es wahrscheinlich auch nicht für Dateien. So legen Sie es rekursiv für alle Unterordner fest.
quelle
Ich kann die Quelle nicht zurückfinden, aber
setgid
ich gehe davon aus, dass die Verwendung dieses Problems für Bare-Git-Repositorys, von denen ich annehme, dass es Ihr Fall ist, veraltet ist und in einigen Fällen Probleme verursachen kann.Git kann das alles über die
core.sharedRepository
Flagge erledigen. Ich hatte das gleiche Problem und löste es wie folgt:Angenommen,
repogroup
Ihre Gruppe ist und Sie müssencd
das Repo-Verzeichnis:Ändern Sie zuerst das gemeinsame Flag in
group
:Hinweis: Hier müssen Sie das Schlüsselwort
group
und nicht den Gruppennamen verwenden. Dies entspricht dem Erstellen des nackten Repositorys mit der Option--shared=group
.Ändern Sie dann die Gruppe für das gesamte Repository:
Um sicherzustellen, dass vorhandene Verzeichnisse für Gruppen beschreibbar sind (
g+w
) und vorhandene ausführbare Dateien auch zu ausführbaren Dateien für Gruppen werden (g+X
), müssen Sie außerdem Folgendes tun:Sobald Sie dies getan haben, erkennt git die
shared=group
Markierung und kümmert sich im Folgenden um die Gruppenberechtigungen, sowohl für vorhandene als auch für neue Dateien, sodass Sie nie wiederumask
oder benötigenchgrp
.Ich werde die Quelle in einen Kommentar einfügen, wenn ich sie wiederfinde.
quelle
Ich bin kein großer Experte, wenn es um die * nix-Seite geht, aber ich denke, was Sie suchen, heißt setgid.
Sehen Sie hier .
quelle
Es ist schwierig, unter Linux / UNIX übergeordnete Verzeichnisberechtigungen zu erben, ohne ACLs zu verwenden. Es gibt jedoch eine Möglichkeit, Standarddateiberechtigungen zuzuweisen. Überprüfen Sie den folgenden Link
Können Sie übergeordnete Verzeichnisberechtigungen erben?
quelle