Apache, Suexec, PHP, SuPHP

12

Obwohl ich mich als Linux- Benutzer recht wohl fühle , ist mein Linux Admin-Fu ein bisschen schwach. Daher suche ich hier nach Anleitungen für einen CentOS-Server, den ich gerade aufbauen werde.

Ich muss für einige unserer Clients einen Apache2-Webserver einrichten. Ich möchte, dass sich der Webinhalt jedes Clients in seinem Home-Verzeichnis ( USERDIRin apache.conf, richtig?) Für die statischen HTML-Sites befindet. Ich möchte, dass Apache als Client ausgeführt wird ( suexec?). Einige davon werden PHP-Apps sein und ich habe den Eindruck, dass ich mir das auch ansehen möchte suphp.

Im Grunde möchte ich wie eine kleine Version eines gemeinsam genutzten Webhosting-Unternehmens aussehen. In Anbetracht dessen, wie häufig diese sind, dachte ich, ich würde leicht eine nette aktuelle Anleitung finden, um dies alles einzurichten, aber bisher hatte ich sehr wenig Glück. Ich vermute, meine Suchwörter sind deaktiviert.

Also die Fragen (zögern Sie nicht, einige oder alle zu beantworten):

  1. Hat jemand solide Links zu aktuellen / modernen Reiseführern, die mir dabei helfen, das alles einzurichten? Nein, die Apache-Dokumentationsseite ist keine Anleitung ;-)
  2. Da ich eine Mischung aus statischen Sites und PHP-Apps habe, möchte / muss ich sowohl suexec als auch suphp installieren? Wenn ja, bringt dies Herausforderungen mit sich, die mir bewusst sein sollten?
  3. Sollte ich andere Optionen anstelle von suexec und suphp in Betracht ziehen?

Ich habe vor, den Endbenutzern SSH, SFTP oder SCP Zugriff auf ihre Inhalte zu gewähren (falls dies Auswirkungen hat).

Vielen Dank im Voraus für Ihre Hilfe.

[Bearbeiten] Ich hätte dies früher erwähnen sollen: Ein wichtiges Ziel meiner Suche nach einem Shared Hosting-Anbieter in Bezug auf Dateiberechtigungen und Eigentumsverhältnisse. Ich möchte wirklich vermeiden, den Benutzern beizubringen, dass sie solche Dinge ändern müssen, um ihre Ergänzungen / Änderungen zu sehen.

Chris_K
quelle

Antworten:

14

Die Verwendung von suexec und suphp erzwingt eine andere Art der Berechtigungstrennung als die Standardeinstellung.

Standardmäßig wird die Berechtigung des Benutzers vom Webserver getrennt. Das heißt, der Benutzer besitzt die Dateien und muss dem Webserver die Berechtigung erteilen, sie anzuzeigen und zu ändern.

Das suexec / suphp-Modell sieht vor, dass der Webserver (beim Ausführen von Skripten) unter dem Benutzerkonto ausgeführt wird, sodass die Website berechtigt ist, alle Aktionen auszuführen, zu denen der Benutzer berechtigt ist. Dies hebt bis zu einem gewissen Grad die Trennung zwischen dem Benutzer und dem Webserver auf, erzwingt jedoch im Gegenzug eine UNTERSCHIEDLICHE Trennung: zwischen der Website eines Benutzers und der Website eines anderen Benutzers in derselben Box.

Standardmäßig wird PHP immer unter dem Benutzerkonto von Apache ausgeführt, sodass die PHP-Skripte einer Website auf alle Dateien zugreifen können, die die PHP-Skripte einer anderen Website können. Wenn daher ein Konto auf dem Server gehackt wird, kann sich die Infektion auf die anderen ausbreiten. SuPHP verhindert dies.

Weder suexec noch suphp beeinflussen die Art und Weise, wie Apache statischen Inhalt bereitstellt . Es gelten weiterhin alle alten Regeln. Stattdessen ändern suexec und suphp das Konto, unter dem CGI bzw. PHP ausgeführt werden. Mit Suexec kann CGI unter dem Konto des Eigentümers ausgeführt werden, während mit SuPHP PHP-Skripts unter dem Konto des Eigentümers ausgeführt werden.

Suexec und SuPHP sind nicht unbedingt besser . Sie sind einfach anders . Sie verhindern nicht, dass eine Website gehackt wird (und machen die Website möglicherweise einfacher zu hacken), aber sie verhindern, dass sich ein Kompromiss auf einer Website auf alle anderen ausbreitet. Für den Site-Administrator ist diese Isolation wahrscheinlich wichtiger, weshalb einige gemeinsam genutzte Hosting-Systeme suexec und suphp als Standard festlegen.

Ein sehr häufiges "gotcha" ist, dass SuPHP den Besitz und die Berechtigungen eines Skripts überprüft, bevor es ausgeführt wird, und einen 500-Fehler zurückgibt, wenn die Berechtigungen nicht zutreffen.

Im Speziellen:

  • Der Eigentümer und die Gruppe der Datei müssen mit dem Eigentümer der Website übereinstimmen (wie in der Apache-Konfiguration festgelegt).
  • Die Datei darf nicht von der Welt beschreibbar sein
  • Das übergeordnete Verzeichnis darf nicht schreibgeschützt sein
tylerl
quelle
Zu wissen, dass ich ein Shared-Hosting-Modell emulieren möchte (wie Sie bereits betont haben, um die Benutzer voneinander fernzuhalten), ist also das Suexec- / Suphp-Modell die Art und Weise, wie ich vorgehen möchte, oder gibt es Ihrer Meinung nach bessere Optionen? Ich habe den Beitrag auch bearbeitet, um darauf hinzuweisen, dass ein Hauptziel darin besteht, Benutzer nicht zu unterrichten, dass sie Dateiberechtigungen oder -besitzer ändern müssen, um ihre Änderungen oder Ergänzungen zu sehen.
Chris_K
2
suexec / suphp ist eine gute Lösung für das, was Sie suchen.
Tylerl
Ich würde suphp gegenüber suexec vorziehen. Ich denke, es ist sicherer.
Vladislav Rastrusny
@FractalizeR: Normalerweise verwenden Sie beide gleichzeitig. SuPHP ist für PHP, suexec ist für CGI. Sie können PHP über suexec ausführen, indem Sie PHP als CGI ausführen. Dies ist jedoch ein wenig unnötig, da es bessere (sicherere, effizientere) Optionen für PHP gibt.
Tyler
@tylerl: Vielen Dank für deine Antwort. Was sind die sichereren / effizienteren Lösungen für PHP, auf die Sie sich beziehen?
Benjamin