Ich hoste mein eigenes Git-Repository auf einem VPS. Angenommen, mein Benutzer ist John.
Ich verwende das SSH-Protokoll, um auf mein Git-Repository zuzugreifen. Meine URL ist also ungefähr so ssh://[email protected]/path/to/git/myrepo/
.
Root ist der Besitzer von allem, was darunter ist /path/to/git
Ich versuche, John Lese- / Schreibzugriff auf alles zu gewähren, was darunter steht /path/to/git/myrepo
Ich habe beide versucht chmod
und setfacl
den Zugriff zu steuern, aber beide schlagen auf die gleiche Weise fehl: Sie wenden Rechte rekursiv (mit den richtigen Optionen) auf alle derzeit vorhandenen Unterverzeichnisse von an /path/to/git/myrepo
, aber sobald ein neues Verzeichnis erstellt wird, kann mein Benutzer nicht schreiben im neuen Verzeichnis.
Ich weiß, dass es Hooks in Git gibt, die es mir ermöglichen würden, die Rechte nach jedem Commit erneut anzuwenden, aber ich fange an zu denken, dass ich den falschen Weg gehe, weil dies für einen sehr grundlegenden Zweck zu kompliziert erscheint.
F : Wie sollte ich mein Recht einrichten, John Zugang zu John zu gewähren /path/to/git/myrepo
und es widerstandsfähig gegen Änderungen der Baumstruktur zu machen?
F2 : Wenn ich einen Schritt zurücktreten sollte, um den allgemeinen Ansatz zu ändern, sagen Sie es mir bitte.
Bearbeiten : Die Frage wurde so wie sie ist beantwortet, aber das war die falsche Frage. Die richtige Frage wäre gewesen: "Wie konfiguriere ich ein Bare-Git-Repository auf dem Server für die Verwendung mit SSH-Zugriff?". Siehe meine eigene Antwort.
quelle
g+s
. Natürlich müssen Sie zuerst auch die Grundlagen von verstehenchmod
.{}
- ist ein Platzhalter für die Ersetzung von Dateinamen.;
ist der Terminator des Befehls, der von ausgeführt wird-exec
. Da es;
eine besondere Bedeutungbash
hat, muss es mit \ maskiert werden. sieheman find
für DetailsEigentlich war das der falsche Ansatz. Nach zusätzlichen Nachforschungen stellte ich fest, dass ich in meinem Fall die integrierten Funktionen von git verwenden muss, um das Dateisystem direkt im Repository zu verwalten.
Dies geschieht grundsätzlich mit der
shared
Optiongit init
, die (unter anderem) folgende Werte haben kann:group
: Initialisieren Sie das Repository so, dass Dateien und Verzeichnisse Benutzer- und Gruppenschreibzugriff haben und alle anderen Lesezugriff haben0660
: gleich, aber ohne Lesezugriff für die anderen.Die neu erstellten Verzeichnisse und Dateien verfügen automatisch über die richtigen Berechtigungen. Sie können
git init
ein vorhandenes Repository auch verwenden, um es neu zu konfigurieren, ohne den Inhalt zu verlieren.Also am Ende was ich tun musste:
mygitrepo
root:mygitrepo
Und jetzt kann jeder Benutzer der Gruppe ziehen / pushen, und niemand anderes kann, und das ohne die Rechte des Dateisystems zu beeinträchtigen.
Weitere Informationen finden Sie unter http://www.kernel.org/pub/software/scm/git/docs/git-init.html .
quelle
Wenn ACLs unterstützt werden, können Sie dies mit Standard-ACLs tun. Beachten Sie, dass es leicht ist, diese zu vergessen, da sie nicht auftauchen, wenn Sie eine machen
ls -l
.Aber ich vermute, Sie möchten vielleicht etwas besser organisiert sein. Der Einsatz von Gitolite bietet möglicherweise eine bessere Lösung.
quelle
ls
(und ich denke auch bei Squeeze) erhalten Sie+
am Ende der Berechtigung eine Berechtigung zu sagen, dass es eine ACL gibt:drwxr-xr-x+ 2 anthony anthony 4096 Sep 28 11:16 i-have-an-acl
find ... -exec cmd {} +
Syntax,{}
bei der so viele gefundene Dateinamen wie möglich ersetzt werden (im Gegensatz dazu,{} \;
bei der jeweils{}
nur eine gefundene Datei ersetzt wird)