Jedes Mal, wenn ich git pull
oder ausführe git reset
, git
werden die von mir vorgenommenen Änderungen an Berechtigungen und Eigentumsrechten zurückgesetzt. Sehen Sie selbst:
#!/usr/bin/env bash
rm -rf 1 2
mkdir 1
cd 1
git init
echo 1 > 1 && git add 1 && git ci -m 1
git clone . ../2
cd $_
chmod 0640 1
chgrp http 1
cd ../1
echo 12 > 1 && git ci -am 2
cd ../2
stat 1
git pull
stat 1
Die Ausgabe:
$ ./1.sh 2>/dev/null | grep -F 'Access: ('
Access: (0640/-rw-r-----) Uid: ( 1000/ yuri) Gid: ( 33/ http)
Access: (0664/-rw-rw-r--) Uid: ( 1000/ yuri) Gid: ( 1000/ yuri)
Gibt es eine Möglichkeit, das Problem zu umgehen?
Ich möchte einige Dateien/Verzeichnisse für den Webserver zum Schreiben zugänglich machen.
Antwort1
Das klingt, als ob der von Ihnen verwendete Benutzer die Standardgruppe auf eingestellt hat yuri
. Sie können dies folgendermaßen bestätigen:
$ id -a
uid=1000(saml) gid=1000(saml) groups=1000(saml),10(wheel),989(wireshark)
Die UID Ihres Kontos lautet: uid=1000(saml)
Die Standardgruppe lautet git=1000(saml)
und alle sekundären Gruppen folgen danach.
NOTIZ:Wenn Sie möchten, dass der Git-Klon bestimmte Eigentümer hat, haben Sie mindestens zwei Optionen.
Option 1
Richten Sie ein übergeordnetes Verzeichnis mit den gewünschten Berechtigungen ein:
$ mkdir topdir
$ chgrp http topdir
$ chmod g+s topdir
$ cd topdir
$ git clone ....
Dadurch wird das Verzeichnis gezwungen , die Anwendung topdir
der Gruppe auf alle darunterliegenden Unterverzeichnisse zu erzwingen http
. Dies funktioniert im Großen und Ganzen, kann aber zu Problemen führen, da die Gruppierung dieser Dateien nicht durch die oben vorgenommenen Änderungen erzwungen wird, wenn Sie Dateien in diesen Git-Clone-Arbeitsbereich verschieben.
Option 2
Bevor Sie mit der Arbeit beginnen, ändern Sie Ihre Standardgruppe wie http
folgt:
$ newgrp http
$ git clone ...
Diese Methode erzwingt, dass für alle neu erstellten Dateien die Gruppe auf http
statt auf Ihre normale Standardgruppe von eingestellt wird yuri
. Dies funktioniert jedoch nur, solange Sie daran denken, newgrp
vor der Arbeit in diesem Arbeitsbereich ein auszuführen.
Andere Optionen
Wenn keine dieser Möglichkeiten akzeptabel erscheint, können Sie stattdessen versuchen, ACLs im Git-Arbeitsbereichsverzeichnis zu verwenden. Diese werden in mehreren Fragen und Antworten auf dieser Site besprochen, beispielsweise in dieser Frage und Antwort mit dem Titel:Neue Dateien erben Gruppenberechtigungen unter Linux.
Antwort2
Die Lösung, die ich verwende, istFühren Sie den Befehl als Benutzer ausdas über die Berechtigungen verfügt, die Sie behalten möchten:
sudo -u user command
Dadurch wird verhindert, dass sich die Berechtigungen ändern. Ich verwende es, wenn ich Git-Repositorys auf meinem VPS aktualisiere und dabei die Dateiberechtigungen auf den Webserver-Benutzer eingestellt lasse.
Siehe auch die gleiche FrageHier.