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.
quelle
/var/www
ohne es auch dieser Gruppe hinzuzufügen?/var/www
so dass ich Gruppe Zugriff auf Gedanken zu machenwww-data
und damit sich jeder ein Mitglied dieser Gruppe wäre eine gute Lösung sein. Ich sehe jetzt das Problem, dass Apache in der Lage ist, jede Datei dort zu überschreiben . Angesichts der Tatsache, dass nur 2 Entwickler (darunter ich) Zugriff auf den Code haben, ist er kurzfristig relativ sicher.Mir ist aufgefallen, dass du es nicht benutzt hast
chown
.Um den Besitz der Dateien / Ordner richtig festzulegen, können Sie das gesamte Verzeichnis folgendermaßen festlegen:
chown -R www-data:www-data
Dies setzt den Besitz auf Gruppe
www-data
und Benutzerwww-data
Sie können dies auch als vorübergehende Problemumgehung tun:
chmod 777 /var/data/<filename>
oderchmod 777 /var/data/<foldername>
Bearbeiten Sie die Datei (en) dann nach Bedarf
chmod 644 /var/data/<filename>
oderchmod 755 /var/data/<foldername>
Achten Sie darauf, den Schalter "-R" zu verwenden, da dadurch auch die Berechtigungen aller Unterdateien und Ordner geändert werden.
664 sind die Apache-Standarddateiberechtigungen und 755 die Standardordnerberechtigungen.
Hoffe das hilft :)
Star
quelle
/var/data
? In welchem Verzeichnis schlägt er den Befehl vorchown -R www-data:www-data
? Hoffentlich nicht/var/www
.