PHP: Unterschied zwischen den Versionen
(PHP Sicherheit) |
Keine Bearbeitungszusammenfassung |
||
Zeile 17: | Zeile 17: | ||
cp /opt/php/5.2.5/etc/php-cgi-fcgi.ini php.ini | cp /opt/php/5.2.5/etc/php-cgi-fcgi.ini php.ini | ||
Und anschließend die php.ini anpassen. Häufig benötigt wird z.B. die | Und anschließend die php.ini anpassen. | ||
'''Achtung:''' Keine Kommentare mit # einleiten, Kommentarzeichen ist das Semikolon ";". | |||
Häufig benötigt wird z.B. die | |||
* Anpassung der Content-Type charset= Vorgabe für den HTTP Header. | * Anpassung der Content-Type charset= Vorgabe für den HTTP Header. | ||
Zeile 54: | Zeile 58: | ||
------8< SCHNIPP >8------ | ------8< SCHNIPP >8------ | ||
'''Beachte:'' Eine geänderte php.ini Konfiguration wird mit FastCGI erst übernommen, wenn die PHP Prozesse des Users | '''Beachte:'' Eine geänderte php.ini Konfiguration wird mit FastCGI erst übernommen, wenn die PHP Prozesse des Users (die über längere Zeit laufen bleiben) neu gestartet werden. | ||
Die Brechstange mit der das Neustarten der PHP Prozesse erzwungen werden kann ist diese zu killen: | Die Brechstange mit der das Neustarten der PHP Prozesse erzwungen werden kann ist diese zu killen: | ||
Zeile 60: | Zeile 64: | ||
Geht das Neuladen der Konfiguration nicht sanfter falls die Seiten stark frequentiert sind? | Geht das Neuladen der Konfiguration nicht sanfter falls die Seiten stark frequentiert sind? | ||
=== PHP open_basedir === | |||
=== PHP Sicherheit === | |||
==== open_basedir ==== | |||
Sofern der PHP Parameter open_basdir nicht gesetzt ist (Vorgabe) können (kompromittierte) php Skripte an alle Dateien kommen des Users kommen, ohne einen extra Shellzugang installieren zu müssen und dadurch entdeckt zu werden. | Sofern der PHP Parameter open_basdir nicht gesetzt ist (Vorgabe) können (kompromittierte) php Skripte an alle Dateien kommen des Users kommen, ohne einen extra Shellzugang installieren zu müssen und dadurch entdeckt zu werden. | ||
Zeile 73: | Zeile 82: | ||
Wenn man mehrere Subdomains hat und diese isolieren möchte, ist dies durch Aufschaltung von lokalen Subdomains auf verschiedene User möglich. (Siehe [[Domain-Aufträge]] ) | Wenn man mehrere Subdomains hat und diese isolieren möchte, ist dies durch Aufschaltung von lokalen Subdomains auf verschiedene User möglich. (Siehe [[Domain-Aufträge]] ) | ||
==== save_mode ==== | |||
Dank (Fast)CGI laufen PHP Skripte zwar "nur" mit Userrechten, dennoch ist es ratsam den PHP save_mode zu aktivieren, sofern dies mit den eingesetzten PHP Skripten möglich ist. Der save_mode kann auch die Daten des Users vor (kompromittierten) PHP Skripten schützen. In der php.ini ist dafür die Option | |||
= | safe_mode = On | ||
zu setzten, und die weiteren Optionen sind zu prüfen. | |||
Falls Systembefehle oder Shellskripte ausgeführt werden müssen sollten diese über ein safe_mode_exec_dir außerhalb des open_basedir bereitgestellt werden. | |||
==== Sicherheitskritische Funktionen ==== | |||
Weitere Dinge die deaktiviert werden sollten, wenn sie nicht benötigt werden, was im allgemeinen der Fall ist, sind: Das öffnen von URLs als Dateien, | Weitere Dinge die deaktiviert werden sollten, wenn sie nicht benötigt werden, was im allgemeinen der Fall ist, sind: Das öffnen von URLs als Dateien, |
Version vom 8. Juni 2009, 20:19 Uhr
Einstieg |
Hsadmin |
Pakete |
User |
Domains |
Cron |
Logging |
E-Mail |
WWW
Datenbanken |
Backup & Restore |
Installationsanleitungen |
FAQ |
Bugtracker
PHP wird heute bei HS standardmäßig per FastCGI vorkonfiguriert. Dafür wird in jedem Domainverzeichnis unter fastcgi/ eine phpstub Datei angelegt und der Apache Webserver ist konfiguriert .php Dateien über diesen "Stub" mit den Rechten des Users zu auszuführen.
(PHP via CGI installieren, beschreibt eine ältere und langsamere Schnittstelle .php Dateien ausführen zu lassen.)
Anpassung der PHP Grundkonfiguration
Um die PHP Konfiguration an eigene Bedürfnisse anzupassen ist eine php.ini oder php-cgi-fcgi.ini Datei im fastcgi Verzeichnis der Domain anzulegen. (Für https:// entsprechend im -ssl Verzeichnis.) Als Vorlage kann eine php-cgi-fcgi.ini dienen, die vom HS PHP Maintainer zusammen mit optionalen PHP Versionen unter /opt bereitgestellt wurde. Beispielweise:
cd doms/example.com/fastcgi/ cp /opt/php/5.2.5/etc/php-cgi-fcgi.ini php.ini
Und anschließend die php.ini anpassen.
Achtung: Keine Kommentare mit # einleiten, Kommentarzeichen ist das Semikolon ";".
Häufig benötigt wird z.B. die
- Anpassung der Content-Type charset= Vorgabe für den HTTP Header.
- Anpassung des maximal verwendbaren Hauptspeichers (memory_limit).
- Anpassung der maximalen Größe hochgeladener Dateien (post_max_size).
- Aktivierung gewünschter Extensions.
Beispiel: Durch das Löschen des ";" Kommentarzeichens vor "extension=mysql.so" werden z.B. die Module für den Zugriff Zugriff auf die GD-Library und MySQL über das klassische Modul aktiviert.
------8< SCHNIPP >8------ [..] memory_limit = 16M (oder höher)
[..] default_charset = "UTF-8" ; Vorgabe ist iso-8859-1
[..] post_max_size = 8M
[..] ;extension=curl.so extension=gd.so ;extension=imap.so ;extension=mcrypt.so ;extension=mhash.so ;extension=ming.so extension=mysql.so ;extension=mysqli.so ;extension=odbc.so ;extension=pdo.so ;extension=pdo_mysql.so ------8< SCHNIPP >8------
'Beachte: Eine geänderte php.ini Konfiguration wird mit FastCGI erst übernommen, wenn die PHP Prozesse des Users (die über längere Zeit laufen bleiben) neu gestartet werden.
Die Brechstange mit der das Neustarten der PHP Prozesse erzwungen werden kann ist diese zu killen:
killall php -u $USER
Geht das Neuladen der Konfiguration nicht sanfter falls die Seiten stark frequentiert sind?
PHP Sicherheit
open_basedir
Sofern der PHP Parameter open_basdir nicht gesetzt ist (Vorgabe) können (kompromittierte) php Skripte an alle Dateien kommen des Users kommen, ohne einen extra Shellzugang installieren zu müssen und dadurch entdeckt zu werden.
Die Passwortabfrage von Hsadmin bringt eine Abhilfe für die zentralen Dienste. (Sofern Du dein Passwort nicht in eine Datei schreibst und die Abfrage so wieder ausschaltest, wovon besser abzusehen ist.) Doch alle Daten auf die Du als Benutzer zugreifen kannst sind prinzipiell den PHP-Skripten ausgeliefert.
Mit open_basedir wird festgelegt in welchen Verzeichnissen PHP Skripte lesen und schreiben dürfen. Geprüft wird dabei ob der zu öffnende Pfad mit dem angegebene Pfad beginnt. Es ist daher wichtig ob sich am Ende ein "/" befindet oder nicht. Ein open_basedir von /home/doms/example.org/subs/www (ohne /) erlaubt somit z.B. auch Zugriffe auf die Subdomain www2 etc.
Beispielzeile für die php.ini:
open_basedir = /home/doms/example.org/subs/
Wenn man mehrere Subdomains hat und diese isolieren möchte, ist dies durch Aufschaltung von lokalen Subdomains auf verschiedene User möglich. (Siehe Domain-Aufträge )
save_mode
Dank (Fast)CGI laufen PHP Skripte zwar "nur" mit Userrechten, dennoch ist es ratsam den PHP save_mode zu aktivieren, sofern dies mit den eingesetzten PHP Skripten möglich ist. Der save_mode kann auch die Daten des Users vor (kompromittierten) PHP Skripten schützen. In der php.ini ist dafür die Option
safe_mode = On
zu setzten, und die weiteren Optionen sind zu prüfen.
Falls Systembefehle oder Shellskripte ausgeführt werden müssen sollten diese über ein safe_mode_exec_dir außerhalb des open_basedir bereitgestellt werden.
Sicherheitskritische Funktionen
Weitere Dinge die deaktiviert werden sollten, wenn sie nicht benötigt werden, was im allgemeinen der Fall ist, sind: Das öffnen von URLs als Dateien,
allow_url_fopen = Off
und die Ausführung von Systembefehlen.
disable_functions = show_source, system, passthru, shell_exec, exec, phpinfo, popen, proc_open
Spezielle PHP Versionen
Um spezielle PHP Versionen zu nutzen kopiert man sich zunächst einen entsprechenden phpstub und eine passende Konfigurationsdatei in das fastcgi Verzeichnis. Die stubs für spezielle alternative Debian Versionen sind unter /usr/local/src/phpstub zu finden. Unter /opt/php stehen darüber hinaus bei HS auch weitere optionale PHP Versionen (neben den aktuellen Debian Versionen) zur Verfügung. Für Version 5.2.5 beispielsweise geht man wie folgt vor:
cd doms/example.com/fastcgi/ cp /opt/php/5.2.5/bin/php525stub . cp /opt/php/5.2.5/etc/php-cgi-fcgi.ini .
Anschließend muss der Apache Webserver noch angewiesen werden auch diese bestimmte PHP Version zu verwenden. Dazu werden der .htaccess Datei im DocumentRoot der Domain zwei Zeilen hinzugefügt bzw. eine .htaccess mit den zwei Zeilenangelegt. Im Beispiel handelt es sich um die Domain www.example.com, also:
cd ~/doms/example.com/subs/www vi .htaccess
Für Version 5.2.5 wären folgende zwei Zeilen einzugeben:
AddType application/x-httpd-phpcgi .php Action application/x-httpd-phpcgi /cgi-bin/php525stub