Ich habe einen ziemlich normalen Server eingerichtet, auf dem Apache und PHP laufen. Eine von mir ausgeführte App erstellt Dateien, die dem Apache-Benutzer gehören www-data
. Dateien, die ich über SFTP hochlade, gehören meinem eigenen Benutzer charlesr
. Alle Dateien sind Teil der www-data
Gruppe. Mein Problem ist, dass ich keine der Dateien über SFTP ändern oder überschreiben kann, die Eigentum von sind www-data
, obwohl sie charlesr
Teil der www-data
Gruppe sind. Ich kann die Dateien problemlos über eine SSH-Sitzung ändern.
Ich bin mir also nicht sicher, was ich tun soll. Wie erteile ich meiner SFTP-Sitzung die Berechtigung, www-data
eigene Dateien zu ändern ?
Für ein bisschen Hintergrundinformationen sind dies die Notizen, die ich beim Einrichten des Servers für mich selbst geschrieben habe:
Now set up permissions on `/var/www` where your files are served from by
default:
$ sudo adduser $USER www-data
$ sudo chgrp -R www-data /var/www
$ sudo chmod -R g+rw /var/www
$ sudo chmod -R g+s /var/www
Now log out and log in again to make the changes take hold.
The previous set of commands does the following:
1. adds the current user ($USER) to the `www-data` group;
2. changes `/var/www` to belong to the `www-data` group;
3. adds read/write permissions to the group that `/var/www` belongs to;
4. sets the SGID bit on `/var/www`; this final point bears some explaining.
Und dann erkläre ich mir selbst, was das Setzen des SGID-Bits bedeutet (dh alle Dateien, die in erstellt wurden, /var/www
werden www-data
automatisch Teil der Gruppe).
AKTUALISIEREN
Es scheint, dass das Problem durch die App selbst oder genauer durch das Anwendungsframework ( Kohana ) verursacht wurde, das bestimmte Dateien, die es schreibt, auf 0644 (rw-r - r-- ) einstellt. dh nicht gruppenbeschreibbar. Dies, zusammen mit der Tatsache, dass die Dateien auch Eigentum von sind, www-data
bedeutete, dass ich die Dateien nicht über SFTP bearbeiten konnte, wenn ich mich als eingeloggt hatte charlesr
. Ich bin nicht sicher, warum ich die Dateien über SSH bearbeiten konnte. Ich vermute, dass ich sudo verwendet haben muss.
Hier ist die Berechtigungsstrategie, die ich jetzt dank der unermüdlichen Hilfe von Marty Fried verwende , der auf die Fehler meiner vorherigen Strategie hinwies und mir half, in der Welt der Linux-Berechtigungen zu marinieren, bis ich mich endlich daran machte. Vielen Dank, Marty!
Überblick
- Dateien und Verzeichnisse in
/var/www
sollten Eigentum von seinroot:webmasters
- Alle Entwickler sollten Mitglieder der
webmasters
Gruppe sein - Alle Verzeichnisse in
/var/www
sollten auf:2775
oderu=rwx,g=rwxs,o=rx
(rwxrwx-rx) gesetzt sein - Alle Dateien in
/var/www
sollten auf:0664
oderug=rw,o=r
(rw-rw-r--) gesetzt sein
Folgendes sollte im Besitz von sein www-data:webmasters
(dh dies sind die Verzeichnisse, in die Apache schreiben kann):
- Anwendung / Cache
- Anwendung / Protokolle
- hochladen
- client_helpers / upload
WIE MAN
So richten Sie Berechtigungen ein, von /var/www
denen aus Ihre Dateien standardmäßig bereitgestellt werden:
sudo addgroup webmasters
sudo adduser $USER webmasters
sudo chown -R root:webmasters /var/www
sudo find /var/www -type f -exec chmod 664 {} \;
sudo find /var/www -type d -exec chmod 775 {} \;
sudo find /var/www -type d -exec chmod g+s {} \;
sudo chown -R www-data:webmasters application/cache/
[etc...]
Melden Sie sich jetzt ab und wieder an, damit die Änderungen übernommen werden.
Der vorherige Befehlssatz bewirkt Folgendes:
- Erstellen Sie eine neue Gruppe mit dem Namen
webmasters
; Alle Benutzer, die Schreibzugriff auf die App-Dateien benötigen, werden dieser Gruppe hinzugefügt. - Fügt den aktuellen Benutzer (
$USER
) derwebmasters
Gruppe hinzu. - ändert den Besitzer von
/var/www
zuroot
und die Gruppe zuwebmasters
Gruppe. - fügt 664 Berechtigungen (rw-rw-r--) auf alle Dateien in
/var/www
. - Fügt allen Verzeichnissen in 775 Berechtigungen (drwxrwxr-x) hinzu
/var/www
. - setzt das SGID-Bit
/var/www
und alle darin enthaltenen Verzeichnisse; Dieser letzte Punkt muss erklärt werden. Beachten Sie auch, dass Sie auch eine 2 vor Ihr chmod-Oktal setzen können (z. B. 2644), um dasselbe zu tun. - Setzt den Eigentümer auf
www-data
(Apaches Benutzer) und die Gruppe des angegebenen Verzeichnisses aufwebmaster
. Dadurch wird sichergestellt, dass das Verzeichnis von Apache und allen Mitgliedern derwebmasters
Gruppe beschreibbar ist. Machen Sie dasselbe für alle anderen Verzeichnisse, die beschreibbar sein müssen.
/var/www
ohne es auch dieser Gruppe hinzuzufügen?