Ich weiß, dass es eine sehr alte Frage ist, aber ich wollte die gute Lösung mit einigen ausführlichen Erklärungen hinzufügen. Sie müssen zwei Anweisungen auf Ubuntu-ähnlichen Systemen ausführen, und dann funktioniert es wie ein Zauber.
Berechtigungen unter Linux können dreistellig dargestellt werden. Die erste Ziffer definiert die Erlaubnis des Eigentümers der Dateien. Die zweite Ziffer gibt die Berechtigungen einer bestimmten Benutzergruppe an. Die dritte Ziffer definiert die Berechtigungen für alle Benutzer, die weder Eigentümer noch Mitglied der Gruppe sind.
Der Webserver soll mit einer ID ausgeführt werden, die Mitglied der Gruppe ist. Der Webserver sollte niemals mit derselben ID wie der Eigentümer der Dateien und Verzeichnisse ausgeführt werden. In Ubuntu läuft Apache unter der ID www-data. Diese ID sollte Mitglied der Gruppe sein, für die die Berechtigungen angegeben sind.
Führen Sie die folgende Anweisung aus, um dem Verzeichnis, in dem Sie den Inhalt von Dateien ändern möchten, die richtigen Rechte zu geben:
find %DIR% -type d -exec chmod 770 {} \;
Dies würde in der Frage des OP bedeuten, dass die Berechtigungen für das Verzeichnis% ROOT% / database entsprechend geändert werden sollten. Es ist daher wichtig, keine Dateien in diesem Verzeichnis zu haben, die niemals geändert oder entfernt werden sollten. Es wird daher empfohlen, ein separates Verzeichnis für Dateien zu erstellen, deren Inhalt geändert werden muss.
Leseberechtigungen (4) für ein Verzeichnis bedeuten, dass alle Dateien und Verzeichnisse mit ihren Metadaten in einem Verzeichnis erfasst werden können. Schreibberechtigungen (2) geben die Berechtigung zum Ändern des Inhalts des Verzeichnisses. Das Hinzufügen und Entfernen von Dateien, das Ändern von Berechtigungen usw. Die Ausführungsberechtigung (1) bedeutet, dass Sie das Recht haben, in dieses Verzeichnis zu wechseln. Ohne Letzteres ist es unmöglich, tiefer in das Verzeichnis einzudringen. Der Webserver benötigt Lese-, Schreib- und Ausführungsberechtigungen, wenn der Inhalt einer Datei geändert werden soll. Dafür braucht die Gruppe die Ziffer 7.
Die zweite Aussage betrifft die Frage des OP:
find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \;
Das Lesen und Schreiben eines Dokuments ist erforderlich, die Ausführung der Datei ist jedoch nicht erforderlich. Die 7 wird dem Eigentümer der Dateien gegeben, die 6 der Gruppe. Der Webserver muss nicht über die Berechtigung verfügen, die Datei auszuführen, um ihren Inhalt zu ändern. Diese Schreibberechtigungen sollten nur für Dateien in diesem Verzeichnis erteilt werden.
Alle anderen Benutzer sollten keine Erlaubnis erhalten.
Für Verzeichnisse, deren Dateien nicht geändert werden müssen, sind Gruppenberechtigungen von 5 ausreichend. Dokumentation zu Berechtigungen und einige Beispiele:
https://wiki.debian.org/Permissions
https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions
http://www.linux.org/threads/file-permissions-chmod.4094/
php.ini
Datei nach etwas durchsucht, das den Dateizugriff verweigern könnte?