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-dataGruppe. Mein Problem ist, dass ich keine der Dateien über SFTP ändern oder überschreiben kann, die Eigentum von sind www-data, obwohl sie charlesrTeil der www-dataGruppe 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-dataeigene 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/wwwwerden www-dataautomatisch 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-databedeutete, 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/wwwsollten Eigentum von seinroot:webmasters - Alle Entwickler sollten Mitglieder der
webmastersGruppe sein - Alle Verzeichnisse in
/var/wwwsollten auf:2775oderu=rwx,g=rwxs,o=rx(rwxrwx-rx) gesetzt sein - Alle Dateien in
/var/wwwsollten auf:0664oderug=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/wwwdenen aus Ihre Dateien standardmäßig bereitgestellt werden:
sudo addgroup webmasterssudo adduser $USER webmasterssudo chown -R root:webmasters /var/wwwsudo 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) derwebmastersGruppe hinzu. - ändert den Besitzer von
/var/wwwzurootund die Gruppe zuwebmastersGruppe. - 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/wwwund 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 derwebmastersGruppe beschreibbar ist. Machen Sie dasselbe für alle anderen Verzeichnisse, die beschreibbar sein müssen.
/var/wwwohne es auch dieser Gruppe hinzuzufügen?