AKTUALISIERT FÜR WEITERE KLARHEIT:
Laut http://expressionengine.com/user_guide/installation/installation.html heißt es:
Für die meisten Unix-Hosts ist Folgendes typisch. Sie können jedoch bei Ihrem Host nachfragen, ob restriktivere Berechtigungen verwendet werden können, damit PHP in Dateien (666) und Ordner (777) schreiben kann . Auf Windows-Servern gilt Folgendes nicht, Sie müssen jedoch sicherstellen, dass die Dateien und Ordner von ExpressionEngine beschreibbar sind. Möglicherweise müssen Sie sich hierzu an Ihren Gastgeber wenden.
Ich bin mir nicht sicher, was das bedeutet. Ich kann die spezifischen Dateien und Ordner in 666 bzw. 777 ändern, wo ich der Chown'er bin, aber das Obige klingt so, als müsste ich PHP dies auch erlauben?
URSPRÜNGLICHE FRAGE:
Ich muss sicherstellen, dass PHP in bestimmte Dateien (666) und Ordner (777) schreiben kann.
Wie mache ich das?
quelle
Antworten:
Ich werde die Antworten von Rahmu und MV mit einer technischen Lösung vervollständigen. Alles, was folgt, gilt nur für UNIX-ähnliche Systeme.
Scrollen Sie über den Abschnitt chmod / chown, um ein Beispiel mit ACLs zu erhalten - ein leistungsfähigeres Tool als die UNIX-Dateimodi.
Suchen des Benutzernamens Ihres Webservers
Zunächst müssen Sie den Benutzernamen kennen, unter dem Ihr Webserver ausgeführt wird. Wenn Sie Apache verwenden, kann es sein ,
apache
oderhttpd
,www-data
usw. Auf den meisten Debian-ähnlichen Systemen, Apache istwww-data
. Für Nginx ist dies im Allgemeinen auch der Fallwww-data
.Versuchen Sie Folgendes:
Stellen Sie sicher, dass der Benutzername, den dieser Befehl zurückgibt, kohärent ist (z. B. verwende ich 99% der Zeit nginx, aber dieser Befehl gibt
tomcat7
einen Java-Webserver zurück, den ich einmal installiert habe) .Erteilen von Berechtigungen an den Webserver: Verwenden von
chmod
undchown
Das Ausführen
chmod
von 666 oder 777 (die Lösung für diese Art von Problemen in schlechten Dokumentationen / Tutorials) kann auf magische Weise zum Funktionieren führen, ist jedoch unsicher. Wenn Sie 666 oder 777 Berechtigungen erteilen, erhalten Sie Zugriff auf "andere". Also nicht nur Apache, sondern auchgrandmother
undnsa
(vorausgesetzt, diese Benutzerkonten sind auf Ihrem Computer vorhanden - aber nein, bitte vermeiden Sie dies, es sei denn, es dient nur zum Testen / zur Fehlerbehebung).Es ist besser, genauer zu sein und nur Ihnen und Apache Berechtigungen zu erteilen. Ändern Sie die Gruppe Ihrer Dateien, um dem Webserver die vollständige Kontrolle über Ihre Dateien zu geben. Ändern Sie dazu den Eigentümer rekursiv:
Höchstwahrscheinlich möchten Sie jedoch den vollständigen Zugriff auf Ihre Dateien behalten, indem Sie nur die Gruppe ändern:
Führen Sie dann die entsprechenden Schritte aus
chmod
, um der Gruppewww-data
dieselben Berechtigungen wie Ihnen zu erteilen . Wenn der aktuelle Modus beispielsweise 640 ist (6 für Sie, 4 für www-Daten, 0 für andere, übersetzt in -rw-r -----) , setzen Sie ihn auf 660 (6 für Sie, 6 für www- Daten, 0 für andere, übersetzt in -rw-rw ----) . In der Antwort von rahmu erfahren Sie mehr über Dateimodi. Es handelt sich um einen alten, jedoch eleganten Mechanismus.Um zu vermeiden, dass arkane Zahlen mit manipuliert werden
chmod
, können Sie auch die folgende Syntax verwenden:Es bedeutet "zu der Gruppe (
g
),+
Lese- und Schreibberechtigung (rw
) für Ordner hinzufügenyour/folder/
, rekursiv (-R
)".In 90% der Fälle sollte dies ausreichen.
Meine bevorzugte Methode: Verwenden von ACLs (Access Control List)
Manchmal reicht die erste Lösung nicht aus. Ich nehme das Beispiel von Symfony Framework , das viele Daten protokolliert und zwischenspeichert. Es benötigt also Schreibzugriff auf den entsprechenden Ordner.
Und die
chmod
/chown
-Methode ist möglicherweise nicht ausreichend, wenn Sie die Symfony-Konsole in der CLI (unter meinem Benutzerkonto) und im Web (Webserver-Benutzer) parallel verwenden. Dies verursacht viele Probleme, da Symfony die Berechtigungen ständig ändert.In diesem Fall verwenden wir die ACL (Access Control List), eine erweiterte Methode zum Verwalten von Berechtigungen auf vielen UNIX-Systemen.
Hier die Befehle der offiziellen Symfony-Dokumentation ( bitte ändern
app/cache
undapp/logs
an Ihre Bedürfnisse anpassen ):Auf einem System, das unterstützt
chmod +a
(dh nicht Debian / Ubuntu)Auf einem System, das nicht unterstützt
chmod +a
(am häufigsten)Sie benötigen das
setfacl
Werkzeug; Möglicherweise ist es standardmäßig auf Ihrem System installiert. Versuchen Sie daher, festzustellensetfacl -v
, ob der Befehl verfügbar ist.Wenn der Befehl nicht verfügbar ist und Sie Ubuntu 14.04+ verwenden, müssen Sie nur das Tool installieren:
Befolgen Sie andernfalls die Dokumentation Ihres Betriebssystems, da Sie möglicherweise ändern müssen, wie Ihre Partition bereitgestellt wird ( Ubuntu-Dokumentation hier ).
Und da sind wir:
Ich hatte nie Probleme mit dieser Methode, zufrieden oder Ihr Geld zurück.
quelle
Unabhängig davon, wer der Eigentümer der Dateien ist, reichen 666 Berechtigungen und 777 aus: Die letzte Ziffer stellt sicher, dass jeder Benutzer im System Zugriff hat. Dies ist zwar der einfachste Weg, aber aus genau diesem Grund definitiv nicht der sicherste.
Ein besserer Weg, es zu tun
Das erste, was Sie verstehen müssen, ist, wie Unix-Berechtigungen funktionieren . Um die Antwort zu verstehen, die ich unter diesem Link gegeben habe, beachten Sie bitte, dass Berechtigungen in Zahlen übersetzt werden können:
---
--x
-w-
-wx
r--
r-x
rw-
rwx
A
chmod 666
entspricht dann dem Ändern von Berechtigungen inrw-rw-rw
.Als nächstes müssen Sie herausfinden, welcher Benutzer das PHP-Skript ausführt. Normalerweise ist dies der Benutzer, der Ihren Webserver ausführt. Hier ist ein Beispiel dafür (Sie können Apache durch den Namen Ihres Webservers ersetzen).
Sobald Sie wissen, welcher Benutzer die Skripte ausführt und welcher der Eigentümer der von Ihnen genannten Dateien ist, müssen Sie die entsprechenden Berechtigungen festlegen. Beachten Sie, dass es potenziell katastrophal sein kann , jedem Benutzer auf Ihrem System Schreibzugriff (sogar Lesezugriff) zu gewähren .
quelle
Expression Engine ist genau wie viele andere PHP-Webanwendungen, die Lese- und Schreibzugriff auf einige Dateien und Verzeichnisse benötigen. Beispielsweise benötigt EE Schreibzugriff auf seine Dateien config.php und database.php sowie Schreibzugriff auf seine Datei-Upload-Verzeichnisse.
In der Dokumentation heißt es, dass auf den meisten Servern PHP als mod_php ausgeführt wird (und daher mit den Berechtigungen des Webservers ausgeführt wird) und Sie Ihre Dateien wahrscheinlich mit FTP (oder ähnlichem) unter Verwendung Ihres eigenen Benutzers, dieser Dateien und Verzeichnisse müssen die Berechtigungen 666 (jeder kann lesen und schreiben) und 777 (jeder kann lesen, schreiben und durchsuchen) erhalten.
Dies ist nicht der sicherste, aber sicherlich der einfachste Weg, insbesondere wenn Sie einen Hosting-Service nutzen.
Fragen Sie jedoch, wie in den EE-Anweisungen angegeben, Ihren Hosting-Anbieter, da einige nicht mod_php verwenden, sondern ein fastcgi, suphp oder eine andere Version. Auf diesen Servern wird PHP als Ihr eigener Benutzer ausgeführt, sodass alle von Ihnen hochgeladenen Dateien bereits von PHP und allen von den EE-Skripten erstellten Dateien gelesen und beschrieben werden können. In diesem Fall müssten Dateien und Verzeichnisse, auf die PHP zugreift, 600 und 700 Zugriff erhalten. Andere Dateien, auf die direkt vom Webserver zugegriffen werden soll (nicht die PHP-Laufzeit), benötigen weiterhin 666- und 777-Zugriff.
quelle