2010-08-14 2 views
8

Dies könnte eine Frage ohne Frage sein, kann aber nirgends eine Antwort finden.Dateiberechtigungen; Sollte mein www-Ordner Inhalt im Besitz von www-data sein?

Ich habe ein Problem, das Another file permissions problem hat mir geholfen, FAST zu lösen.

Ich habe einen Benutzer in Linux erstellt (danny), die sudo Zugriff hat. Ich habe auch eine neue Gruppe erstellt, deren Name ALSO ist danny, und den Benutzer danny zu dieser Gruppe hinzugefügt. Diese Gruppe hat sudo (root) Zugriff.

Ich habe alle Dateien und Ordner in meinem www Ordner im Besitz von Danny/Danny Gruppe.

Ich habe einen Bild-Upload-Code, der php ist. Dieser Code kann keine Bilder in einen Ordner mit dem Namen "Bilder" Ordner, der unter der Ordner www ist, hochladen, wenn ich die Bilder Ordner Berechtigungen geben.

Also, ich habe die Antwort auf die verknüpfte Frage gefolgt, und habe herausgefunden, dass der Benutzer, der das Upload-Skript ausgeführt wird als "www-Daten".

Nach der Antwort auf den Link zu der anderen Frage, die ich geschrieben, ich www-data zu einer Gruppe hinzufügen müssen ... Aber ich bin hier stecken ...

Welche Gruppe sollte ich hinzufügen zu? Was soll ich von hier aus tun?

Irgendwelche Tipps werden geschätzt.

Btw, hier einige Informationen über www-data ist und danny

id www-data: 
    uid=33(www-data) gid=33(www-data) groups=33(www-data) 
    id danny 
    uid=1000(danny) gid=33(www-data) groups=33(www-data) 

Dank und wenn Sie mehr Eingang benötigen, lassen Sie es mich wissen ...

+2

Sie haben bei weitem die schlechteste Antwort gewählt, da Sie gehackt werden, wenn Sie diesen Ratschlag verwenden. Du solltest das ändern. – rook

Antwort

-2

Eigentlich Ihr Problem ist, dass Sie brauchen der Benutzer www-data hat Schreibzugriff auf die Bilder Ordner.

Und Sie wahrscheinlich Benutzer danny haben vollen Zugriff auf den Ordner auch.

EDIT: Zusätzliches Wort der Warnung: mit Dateien, die von Ihrem Webserver beschreibbar ist immer ein Sicherheitsrisiko . Überprüfen Sie die geschriebenen Dateien, und stellen Sie sicher, dass Benutzer keinen Code hochladen oder ändern können. Inhaltsübersicht: * Lassen Sie Ihren Webserver keine Skripte ausführen, die schreibbar sind, oder in einem schreibbaren Ordner. So stellen Sie sicher, nur die Bilder/Ordner ist beschreibbar, und überprüfen Sie, dass alles, was geschrieben wird, ist eigentlich ein Bild!

Entweder:

  1. Set www-data als Besitzer des Ordners, und chmod u + rwx www.
  2. Setzen Sie www-data als Teil einer Gruppe X und ändern Sie den Besitzer des Ordners zu X, und chmod g + rwx www.
  3. Legen Sie den Ordner Welt beschreibbar auf Ihrem Server (in in einigen Fällen, eine akzeptable Lösung auch, aber weniger sicher).
+0

Endlich hat es funktioniert, ich habe die Lösung 1 gefolgt, die Sie oben vorgeschlagen haben. Eine letzte Sache, die Berechtigungen sind jetzt 765 auf dem image_folder. Das ist gut und sicher, hoffe ich? ABER, wie kann ich Personen daran hindern, meine Datei in den Browsern anzuzeigen? (was ich meine, ist beispielsweise, dass Sie www.domain.com/images eingeben, dann werden alle Ordner angezeigt) –

+1

@Camran: Um zu verhindern, dass Apache Verzeichniseinträge anzeigt, verwenden Sie .htaccess, um die Option "Indizes" zu deaktivieren. ('Options -Indexes') –

+2

-1 Eine Webanwendung sollte keinen Schreibzugriff auf ihren eigenen Web-Root haben, und unter keinen Umständen sollte der Ordner schreib- oder lesbar sein. Das ist ein schwerer Fehler und es stört mich wirklich. – rook

1

Ich würde Www-Datenbenutzer zur Gruppe danny hinzufügen.

usermod -a -G danny www-data 

Auf diese Weise könnten www-Daten in Danny's Ort eingeben, aber nicht das Gegenteil.

Um www-data Benutzer zu einer danny Gruppenordner Berechtigungsmaske zu schreiben, damit hat wie zu sein (wo Platzhalter für jeden beliebigen Wert bedeutet, ist ok):

d???rwx??? 
+0

Irgendwelche Gedanken zu dem Kommentar, den ich auf Koneraks Frage gepostet habe? –

+1

Würde das nicht bedeuten, dass alle Dateien von Danny potenziell für das Internet zugänglich wären, wenn der Webserver kompromittiert ist? Das scheint mir eine schlechte Idee zu sein. – paradroid

16

Im Allgemeinen NO, Ihre Inhalt sollte nicht im Besitz von www-Daten sein. Die nur Inhalte, die WWW-Daten gehören sollten, sind die spezifischen Dateien, die Sie Webanwendungen benötigen, um zu ändern und bestimmte Verzeichnisse, die sie in der Lage sein müssen, Dateien zu erstellen oder zu löschen. Der Rest sollte nicht im Besitz sein (oder beschreibbar) von www-data, da jede Datei, in die www-data schreiben kann, eine Datei ist, die ein Angreifer, der Ihren Webserver kompromittiert (einschließlich Skripten oder Web-Anwendungen), durch beliebige schädliche Daten ersetzen kann kann auswählen.

Es ist besonders wichtig, dass www-data nicht eigene oder die Lage sein, jede ausführbare Datei (zB Skripte, Flash-Dateien, Dokumente in Word oder anderen Formate mit Makro-Funktionen, etc.) zu schreiben, weil Ersatz Sie mit bösartigen ausführbaren Dateien bieten eine einfache Möglichkeit, Benutzercomputer oder den Webserver selbst anzugreifen.

+0

Also bekomme ich es richtig, dass der Vorschlag bei http://askubuntu.com/a/9411/12938 eigentlich ein schlechter ist? – texnic

+0

10 @ texnic - Die Antwort, die Sie verknüpften, ist in Ordnung. Es besagt, dass Sie Ihr Benutzerkonto als Besitzer und www-Daten als Gruppe in den Webverzeichnissen festlegen und ihre Berechtigungen auf 0755 festlegen, wodurch www-Datenberechtigungen zum Lesen und Ausführen erteilt werden, nicht jedoch zum Schreiben. Diese Einstellungen stimmen mit dem überein, was ich in meiner Antwort hier gesagt habe. –

+0

In der Tat. Vielen Dank. Ich verstehe langsam die ganze Idee. – texnic

2

Ich denke, es macht Sinn, dass Dateien, die von www-data verwendet werden, im Besitz von www-data sind. Ich meine, wer sollte es sonst besitzen? Der wichtigste Teil ist, dass die Web-App keinen Schreibzugriff auf ihren eigenen Web-Root haben sollte. Der Grund dafür ist, dass eine directory traversal Sicherheitslücke in einer PHP-Funktion wie copy() oder file_put_contents() einem Angreifer erlaubt, eine .php Backdoor in Ihrem Web-Root zu löschen.

Ein weiterer wichtiger zu beachtender Angriff ist, dass ein anderer Prozess oder Benutzer auf dem System möglicherweise in Ihrem Webstamm lesen oder schreiben möchte. Daher ist es wichtig, dass die letzte Zahl eine Null ist. Die mittlere Zahl ist die Gruppe und Sie verwenden diese nicht, also sollte sie auch Null sein. Die folgenden 2 Befehle machen Ihr Web root lesbar und ausführbar durch Apache und nur Apache. Manchmal wird ein anderes Benutzerkonto verwendet. Führen Sie daher eine <?php system('whoami')?> aus, um das richtige Benutzerkonto zu ermitteln.

chown www-data -R /path/to/webroot

chmod 500 -R /path/to/webroot

Als der Angreifer eine Remotecodeausführung hat über die Privilegien des Web-Root sein Spiel zu ändern. Der springende Punkt ist, den Erfolg zu vereiteln.

+5

Beachten Sie, dass, wenn www-data die Dateien/Verzeichnisse besitzt, es ein kleineres Speedbump ist, das einige gespeicherte Attacken stoppen kann, aber nicht viel mehr. Warum? Da der Eigentümer der Datei seine Berechtigungen ändern kann, kann sich ein Angreifer leicht den Schreibzugriff verschaffen, wenn er die Datei besitzt. Wenn nicht, kann der Angreifer keinen Schreibzugriff erhalten, ohne zuerst von "Web-Exploit" zu "Root-Exploit" zu gehen (an diesem Punkt ist es wirklich das Spiel vorbei, unabhängig von den Berechtigungen im Web-Root). –