GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum genau ist chmod 777 in einem PHP/Apache/Linux-Kontext gefährlich?

Es gibt viele gute allgemeine Gründe, dem Minimalismus zu folgen, wenn es um Berechtigungen geht, aber im Zusammenhang mit einem LAMP-Webhost fallen mir nur wenige ein:

  • Auf einer gemeinsam genutzten Hosting-Plattform können andere Benutzer, die Ihren Host teilen, jetzt Ihre Skripte lesen und in sie schreiben.
  • Auf einem dedizierten Host können Rogue-Prozesse Ihre Dateien lesen/schreiben und versehentlich löschen. Nehmen wir an, es gibt einen benutzerdefinierten Protokollierungsprozess, der als Benutzer niemand im Hintergrund läuft und einen Fehler hat, der dazu führt, dass er versucht, rm -rf / zu machen . Nun, im Allgemeinen wird dies harmlos sein, da es kaum eine Datei geben würde, auf die niemand Schreibrechte haben sollte, aber dieser Schurkenprozess wird Ihre Dateien jetzt mitnehmen.
  • Um Ihre Website zu verunstalten, muss jemand nur als beliebiger Benutzer Zugriff erhalten, sogar nobody sagen oder ein solches Dummy-Konto. Im Allgemeinen müsste der Angreifer einen weiteren Eskalationsangriff auf Benutzerebene durchführen, um an die Stelle zu gelangen, an der er Schaden anrichten kann. Das ist eine echte Bedrohung. Einige nicht kritische Dienste werden möglicherweise unter Dummy-Konten ausgeführt und enthalten möglicherweise eine Schwachstelle.

Es erhöht das Anfälligkeitsprofil Ihrer Website für böswillige Aktivitäten erheblich, da es nur erforderlich ist, in ein Konto einzudringen.

Jeder, der sich mit einem beliebigen Login Zugang zu Ihrem System verschafft, kann mit Ihren Seiten machen, was er will, einschließlich der Änderung auf „Diese Website ist wirklich unsicher, geben Sie mir bitte Ihre Kreditkartendaten.“

BEARBEITEN:(Um Kommentare zu klären und anzusprechen)

Viele Server haben mehr als einen Zweck im Leben. Sie betreiben mehrere Dienste. Wenn Sie diese Dienste sorgfältig voneinander isolieren, indem Sie jedem einen eindeutigen Benutzer zuweisen und die Dateiberechtigungen entsprechend verwalten, ja, Sie sind immer noch in heißem Wasser, wenn jemand die Anmeldeinformationen für ein Konto kompromittiert, aber der Schaden, den sie anrichten können, ist auf diesen einen Dienst beschränkt . Wenn Sie nur ein generisches Konto haben und das gesamte Dateisystem auf 777 setzen, gefährdet ein kompromittiertes Konto alles auf dem Computer.

Wenn Ihr Server nur für die Ausführung von Apache/PHP bestimmt ist und keinem anderen Zweck im Leben dient und es nur ein Konto gibt, unter dem Apache/PHP ausgeführt wird, ist die Kompromittierung dieses einen Kontos so gut wie die Kompromittierung des gesamten Computers Sicht Ihrer Anwendung (obwohl Sie immer noch Systemdateien haben sollten, die von dem Konto, das zum Ausführen von PHP verwendet wird, geschützt und nicht beschreibbar sind ... das sollte immer noch nur für ein Administratorkonto/Root möglich sein).

Wenn sie eine Datei schreiben können und diese ausführbar ist, können sie sie in etwas ändern, das auf Ihrem Computer ausgeführt wird (ausführbare Datei oder Skript) und dann Shell_exec von PHP verwenden, um diese ausführbare Datei auszuführen. Wenn Sie so konfiguriert sind, dass sie shell_exec nicht zulassen, können sie Ihre Konfiguration ebenfalls ändern


Hier ist ein Szenario:

  1. Sie haben ein ungeschütztes Verzeichnis, in das Benutzer hochladen können.
  2. Sie laden zwei Dateien hoch:ein Shell-Skript und eine PHP-Datei mit einem system() Rufen Sie es im Shell-Skript auf.
  3. Sie greifen auf das PHP-Skript zu, das sie gerade hochgeladen haben, indem sie die URL in ihrem Browser aufrufen, wodurch das Shell-Skript ausgeführt wird.

Wenn dieses Verzeichnis 777 ist, bedeutet das, dass jeder (einschließlich des Benutzers Apache, unter dem das PHP-Skript ausgeführt wird) es ausführen kann! Wenn das Ausführungsbit für dieses Verzeichnis und vermutlich die Dateien innerhalb des Verzeichnisses nicht gesetzt ist, würde Schritt 3 oben nichts bewirken.

Bearbeiten Sie aus den Kommentaren:Es sind nicht die Berechtigungen der PHP-Datei, die von Bedeutung sind, sondern der system() Aufruf innerhalb der PHP-Datei, der als Linux-Systemaufruf vom Linux-Benutzer Apache (oder wie auch immer Sie Apache zur Ausführung eingestellt haben) ausgeführt wird, und genau hier kommt es auf das Ausführungsbit an.


Linux
  1. So installieren Sie Suphp mit Apache unter Ubuntu / Linux

  2. Linux-Berechtigungen ändern

  3. Konto auf Linux Dropbox ändern?

  4. Warnungen zu Linux-/Apache-Webserver-Segmentierungsfehlern

  5. Warum ist chmod -R 777 / destruktiv?

So installieren Sie LAMP (Linux Apache, MariaDB, PHP) unter CentOS 7

So installieren Sie Linux, Apache, MySQL, PHP (LAMP) auf Debian 8 oder 8.1, Cloud Server oder VPS

So installieren Sie Linux, Apache, MySQL, PHP (LAMP) auf Debian 8.2 Cloud Server

So installieren Sie LAMP unter Ubuntu 15.10 (Linux, Apache, MySQL und PHP)

So installieren Sie LAMP auf Fedora 23 (Linux, Apache, MySQL und PHP)

So installieren Sie Apache, MySQL, PHP (LAMP) unter Arch Linux