Warum sollte / var / www nicht chmod 777 haben?


67

Beim Entwickeln einer Seite auf einem lokalen Host wird manchmal der Fehler "Berechtigung verweigert" angezeigt, den ich durch Ausführen beheben kann chmod -R 777 /var/www. Allerdings sagen mir die Leute, dass dies aus Sicherheitsgründen eine schlechte Idee ist.

Warum sollte /var/wwwein chmod von 777 nicht sein?


Ich würde diesen Thread gerne über @ serverfault.com weiterempfehlen. Es ist eine großartige Aufgabe, ein Beispiel-Setup für Apache2 und Berechtigungen zu geben. serverfault.com/q/6895/57036 PS Ich kann keinen Kommentar abgeben , daher muss ich ihn als Antwort hinzufügen.
MystaMax

Antworten:


80

777 ist im Allgemeinen eine schlechte Erlaubnis und ich zeige Ihnen warum.

Auch wenn es in einem Casino oder in Las Vegas so aussieht, bedeutet 777 für Sie keinen Jackpot. Vielmehr Jackpot für alle, die Ihre Dateien ändern möchten. 777 (und seine hässliche Cousin 666) erlaubt Lese- und Schreibrechte (und im Fall von 777, Execute) anderen . Sie erfahren mehr über die Funktionsweise von Dateiberechtigungen. Es gibt jedoch drei Berechtigungsgruppen: Eigentümer, Gruppe und andere . Wenn Sie die Berechtigung für andere Benutzer auf 6 oder 7 ( rw-oder rwx) setzen , können Benutzer diese Dateien und Ordner bearbeiten und bearbeiten. Wie Sie sich vorstellen können, ist dies in der Regel schlecht für die Sicherheit.

Hier ist mein Beispiel:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 

Bisher habe ich einen Ordner erstellt und eine Datei mit "schlechten" Berechtigungen erstellt (777 und 666). Jetzt werde ich zu einem anderen Benutzer wechseln und versuchen, diese Dateien zu manipulieren.

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE

Als dieser "böswillige" Benutzer konnte ich Dateien in das Verzeichnis einfügen und Text in bereits vorhandene Dateien einfügen. Während unten in einem Verzeichnis mit 755 und Dateien mit 644 Dateien und Verzeichnisse angezeigt werden, kann ich die Dateien weder bearbeiten noch neue erstellen:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied

Für Apache-Berechtigungen sollten Sie 0755 und 0644 (AKA umask 022) für Ordner bzw. Dateien verwenden. Auf diese Weise können Sie als Eigentümer der Dateien diese bearbeiten und manipulieren und gleichzeitig Apache die für den Betrieb erforderlichen Mindestzugriffsebenen gewähren.


13
Die Sprache tut mir leid, aber das ist eine klasse Antwort. Vielen Dank, Marco.
Luis Alvarado

Was ist, wenn Sie nur Benutzer für die Personen erstellt haben, die den Ordner / var / www frei verwalten dürfen? Ich verwende dedizierte virtuelle Maschinen für jeden Webserver, den ich verwende, und ich frage mich, ob es immer noch zutrifft, dass Sie so vorsichtig sein sollten.
UrkoM

1
@UrkoM Man kann niemals vorsichtig genug sein. Wenn Sie möchten, dass Benutzer auf dieselben Dateien zugreifen, können Sie die Gruppenberechtigungen auf 6/7 (0664/0775) erhöhen und jeden Benutzer zu dieser Gruppe hinzufügen. Obwohl dieses Setup (und das, das ich in meiner Antwort beschrieben habe) nicht alle Kriterien erfüllt, würde ich sagen, dass in gut 90% der Fälle 0755/0644 die Berechtigungen sind, die Sie verwenden möchten. Wenn Sie nur „ein Benutzer“ Systeme haben dann das Risiko von hat andere Benutzer mit Schreibzugriff ist nicht so sehr ein Risiko.
Marco Ceppi

4
@UrkoM Die andere zu berücksichtigende Sache ist, dass es viele "Benutzer" gibt, die keine echten Personen darstellen, sondern existieren, sodass bestimmte Dienste mit reduzierten Fähigkeiten ausgeführt werden können (hauptsächlich aus Sicherheitsgründen, aber auch, um den Schaden zu verringern, der auftreten könnte von einem Stabilitätsfehler). Zeigen Sie den Inhalt /etc/passwdund Sie werden sehen , wie Benutzer mail, newsund nobody. Selbst wenn es für alle echten menschlichen Benutzer Ihres Systems in Ordnung ist, den Inhalt von zu ändern /var/www, bedeutet dies nicht, dass Sie alle Prozesse ausführen möchten, damit diese "künstlichen" Benutzer dies können.
Eliah Kagan

1) So einfach wie möglich. Erklärt nicht, wie Apache oder Nginx Ordner oder Dateien manipulieren können. Apache oder Nginx - Server sind, so dass Anwendungen, sie nicht Ihre „böswillig“ Benutzer sind, können sie nicht geben ls -lah, touch badoder andere Befehle. Wie können sie Ordner und Dateien manipulieren? 2) Vererbung. Sie haben keine Vererbung zwischen Ordnern und Dateien in ihnen abgedeckt. Es gibt mindestens 2-3 Schritt vor einer Datei: /var, /var/www, /var/www/project. Welche Benutzer- / Gruppenrechte sollten /varhaben? Welche Benutzer- / Gruppenrechte sollten /var/wwwhaben? Und so weiter. Wie arbeiten sie zusammen?
Grün

15

777-Berechtigungen führen im Grunde genommen nicht dazu, dass Sie von alleine gehackt werden. Wenn sich jedoch jemand an einer beliebigen Stelle einen Besitz zu Eigen macht, kann dies dazu verwendet werden, die Berechtigungen zu erhöhen und die vollständige Kontrolle über Ihren Computer zu erlangen. Das Schlimmste ist, dass Ihre Berechtigungen "7" verwenden - das bedeutet, dass Berechtigungen gelesen, geschrieben und ausgeführt werden .

Angenommen, ein Hacker möchte Ihren Computer übernehmen. Er kann über einen Webbrowser eine Verbindung zu Ihrem Computer herstellen und eine Verbindung zu http://IhrComputer.Beispiel.com:80/ herstellen.. Wenn Sie Seiten zur Verfügung haben, auf denen er Bilder hochladen kann, kann er eine ausführbare Datei so umbenennen, dass sie mit ".jpg" endet, und sie auf Ihren Server hochladen. Jetzt durchsucht er diese Datei in seinem Webbrowser und führt sie aus, da Linux sich nicht um die Erweiterung kümmert, sondern nur erkennt, dass es sich um eine ausführbare Datei handelt. Das bringt ihm vielleicht nicht viel, aber weil es überhaupt lief, weiß er, dass es als Apache-Benutzer lief. Anschließend lädt er eine geänderte Version hoch, die die Konfigurationsdateien von Apache bearbeitet und ihm so noch mehr Zugriff gewährt - sagen wir, Apache gibt den Inhalt von / etc / passwd aus. Er kann diese Informationen dann verwenden, um festzustellen, welche Benutzer auf dem System vorhanden sind. Er kann dann eine Verbindung mit ssh herstellen und gängige Kennwörter verwenden, um sich als diese Benutzer anzumelden. Wenn dies nicht funktioniert, wird er einen vollständigen Brute-Force-Angriff durchführen. Wenn er als Benutzer mit sudo-Zugriff einsteigt,

Nun können Sie sagen, dass dies nicht wahrscheinlich ist oder dass es nicht so ist, wie ein echter Hacker arbeiten würde. Das ist wahr, aber der Punkt ist, dass Sie durch das Setzen von Dateien auf chmod 777 eine Sicherheitslücke geöffnet haben, die ein Hacker nutzen kann, wie er es für richtig hält.

Wenn Sie stattdessen das Prinzip des geringsten Privilegs befolgen , tritt diese Lücke nicht auf, und Ihr System ist umso schwerer zu hacken. Auch wenn es schwieriger ist, die Dinge richtig zu machen, sollten Sie dennoch alle Anstrengungen unternehmen, um dies zu tun.


+1 für "toehold" und "escalate". Beschreibt das Konzept gut.
Kari Kääriäinen

3
Können Sie bitte erklären, wie eine als jpg getarnte Datei auf einem Server ausgeführt werden kann?
Anurag Peshne
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.