Erlaube dem Benutzer den Zugriff per SSH auf /var/www/

Erlaube dem Benutzer den Zugriff per SSH auf /var/www/

Kontext: Ich erstelle einen Gitolite3-Hook für ein bestimmtes Repo, das einige Logik- und CSS-Foo meiner Website enthält.

Was also im Wesentlichen passiert, ist

Der Inhalt darunter /var/www/nginx/sieht folgendermaßen aus:

drwxrwxr-x. nginx   git   system_u:object_r:httpd_sys_content_t:s0 foo

.gitist besonders:

drwxrwxr-x. git     git   system_u:object_r:httpd_sys_content_t:s0 .git

Um sicherzustellen, dass alle Unterverzeichnisse über die richtigen Zugriffsrechte verfügen, habe ich Folgendes verwendet:

chown nginx:git -Rf ./webfoo
chmod g+rw -Rf ./webfoo
chown git:git -Rf ./webfoo/.git

[Dies ist nur ein Bonus, Sie können dies überspringen.]

Der Gitolite3-Hook

#!/bin/bash
cd /var/www/nginx/webfoo || exit
unset GIT_DIR
echo "where: $(pwd)"
git pull -f origin deploy-me-branch

remote: where: /var/www/nginx/webfoo
remote: From /home/gitolite/repositories/webfoo
remote:    c092ee2..07274a6  master     -> origin/master
remote: error: unable to unlink old '.gitignore' (Permission denied)
remote: error: unable to unlink old 'templates/fancypost.html' (Permission denied)
remote: error: unable to unlink old 'templates/layout.html' (Permission denied)

/var/log/audit/audit.logenthält keine Zugriffsverweigerungen.


Aktualisieren:Auch die lokale Anmeldung gitfunktioniert nicht. Das ist also wahrscheinlichnicht im Zusammenhang mit SELinux/Dateisicherheitskontext.


Warum funktioniert das nicht wie erwartet?

Antwort1

Einige Gründe, warum es nicht funktioniert hat:

  • Benutzer gitsollte Mitglied sein vonGruppe git
  • nicht als anderer Benutzer ziehen/rebase, der .git/*Besitzer könnte sich ändern, dies gilt insbesondere, wenn Sie angemeldet sind alsroot

Eine elegantere Lösung besteht darin monit, das Repository unter (als Benutzer git) zu überwachen ~/repositories, sodass ich auch neu starten kann nginx, uwsgiwenn sich eine ausführbare Webanwendung/Datei geändert hat.

verwandte Informationen