Dateiberechtigungen; Sollte mein www-Ordner Inhalt im Besitz von www-data sein?

8

Dies könnte eine Frage ohne Frage sein, aber nirgends eine Antwort finden.

Ich habe ein Problem, das Ein anderes Dateiberechtigungs-Problem hat mir geholfen, fast zu lösen.

Ich habe einen Benutzer in Linux erstellt ( danny ), der sudo-Zugriff hat. Ich habe auch eine neue Gruppe mit dem Namen ALSO danny erstellt und den Benutzer danny zu dieser Gruppe hinzugefügt. Diese Gruppe hat sudo (root) access.

Ich habe alle Dateien und Ordner in meinem Ordner www im Besitz von danny / danny group.

Ich habe einen Image-Upload-Code, der php lautet. Dieser Code kann keine Bilder in einen Ordner mit dem Namen " images " hochladen, der sich unter dem Ordner www befindet, AUSSERSTELLE ich den Ordner images 777 .

Also habe ich die Antwort auf die verknüpfte Frage verfolgt und herausgefunden, dass der Benutzer, mit dem das Upload-Skript ausgeführt wird, " www-data " ist.

Laut der Antwort auf den Link zu der anderen Frage, die ich gepostet habe, muss ich www-data zu einer Gruppe hinzufügen ... Aber ich stecke hier fest ...

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

Alle Tipps sind willkommen.

Übrigens, hier sind einige Informationen über www-data und danny

%Vor%

Danke und wenn Sie mehr Input brauchen, lassen Sie es mich wissen ...

    
Community 14.08.2010, 16:29
quelle

4 Antworten

-2

Ihr Problem besteht eigentlich darin, dass Sie den Benutzer www-data benötigen, um Schreibzugriff auf den Ordner images zu haben.

Und wahrscheinlich möchten Sie auch, dass der Benutzer danny vollen Zugriff auf den Ordner hat.

BEARBEITEN: Zusätzliches Wort der Warnung: Dateien, die von Ihrem Webserver beschreibbar sind, sind immer ein Sicherheitsrisiko . Überprüfen Sie die geschriebenen Dateien, und stellen Sie sicher, dass Benutzer keinen Code hochladen oder ändern können. Zusammenfassung:  * Lassen Sie Ihren Webserver keine Skripte ausführen, die schreibbar oder in einem schreibbaren Ordner sind. Stellen Sie also sicher, dass nur die Bilder / Ordner schreibbar sind, und überprüfen Sie, ob alles, was geschrieben wurde, tatsächlich ein Bild ist!

Entweder:

  1. Setzen Sie www-data als Besitzer des Ordners, und chmod u + rwx www.
  2. Stellen Sie www-Daten ein als Teil einer Gruppe X, und ändern Sie die Besitzer des Ordners zu X und chmod g + rwx www.
  3. Legen Sie den Ordner fest     Welt schreibbar auf Ihrem Server (in     in einigen Fällen eine akzeptable Lösung     zu, aber weniger sicher).
Konerak 14.08.2010, 16:33
quelle
16

Im Allgemeinen NEIN sollte Ihr Inhalt nicht im Besitz von www-data sein. Der only Inhalt, der www-data gehören sollte, sind die spezifischen Dateien, die Web-Anwendungen benötigen, um sie modifizieren zu können, und bestimmte Verzeichnisse, in denen Dateien erstellt oder gelöscht werden können. Der Rest sollte nicht im Besitz von www-data sein (oder schreibbar sein), 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), ersetzen kann mit irgendwelchen bösartigen Daten, die er wählen kann.

Es ist besonders wichtig, dass www-data nicht besitzen oder in beliebige ausführbare Dateien schreiben können (zB Skripte, Flash-Dateien, Dokumente in Word oder anderen Formaten) mit Macro-Funktionen usw.), da das Ersetzen durch bösartige ausführbare Dateien eine einfache Möglichkeit bietet, Benutzercomputer oder den Webserver selbst anzugreifen.

    
Dave Sherohman 14.08.2010 16:50
quelle
2

Ich halte es für sinnvoll, dass www-data-Dateien 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 Drop eine .php Backdoor in Ihrem Web-Root.

Ein weiterer wichtiger zu beachtender Angriff ist, dass ein anderer Prozess oder Benutzer auf dem System möglicherweise in Ihrem Web-Root lesen oder schreiben möchte. Daher ist es wichtig, dass die letzte Nummer 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 <?php system('whoami')?> aus, um das richtige Benutzerkonto zu ermitteln.

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

chmod 500 -R /path/to/webroot

Zu dem Zeitpunkt, zu dem der Angreifer über Remotecodeausführung verfügt, um die Privilegien des Internets zu ändern, wird das Spiel beendet. Der springende Punkt ist, den Erfolg zu vereiteln.

    
rook 14.08.2010 17:06
quelle
1

Ich würde www-data Benutzer zur Gruppe danny hinzufügen.

%Vor%

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

Damit der Benutzer www-data in einen Ordner mit der Namengruppe Danny schreiben kann, muss die Berechtigungsmaske wie folgt sein (wobei Wildcard bedeutet, dass ein Wert in Ordnung ist):

%Vor%     
LatinSuD 14.08.2010 16:50
quelle