PHP: Unterschied zwischen den Versionen
(→open_basedir: link Domains) |
(Umstellung nur 1 phpstub PHP Version noch bei HS) |
||
Zeile 7: | Zeile 7: | ||
=== Anpassung der PHP Grundkonfiguration === | === Anpassung der PHP Grundkonfiguration === | ||
Um die PHP Konfiguration an eigene Bedürfnisse anzupassen legt man eine Konfigurationsdatei Namens php | Um die PHP Konfiguration an eigene Bedürfnisse anzupassen legt man eine Konfigurationsdatei Namens php.ini im fastcgi Verzeichnis der Domain an. (Für https:// entsprechend im -ssl Verzeichnis.) Als Vorlage kann eine [[php-muster.ini]] dienen. | ||
'''Achtung:''' Kommentare nicht mit # einleiten (kann zu unerwarteten Fehlkonfigurationen führen), Kommentarzeichen ist das Semikolon ";". | '''Achtung:''' Kommentare nicht mit # einleiten (kann zu unerwarteten Fehlkonfigurationen führen), Kommentarzeichen ist das Semikolon ";". | ||
Häufig anzupassen sind z.B.: | Häufig anzupassen sind z.B.: | ||
Zeile 97: | Zeile 88: | ||
=== | === verschiedene PHP Konfigurationen nebeneinander verwenden === | ||
Um verschiedene PHP Konfigurationen nebeneinander zu verwenden, kopierst Du den phpstub in ein Unterzeichnis von (fast)cgi(-ssl) und mappst nach Belieben deine PHP Dateien darauf. | |||
So können beliebig viele Konfigurationen bei einer Domain nebeneinander genutzt werden. | |||
==== Beispiel muster.example.com ==== | |||
<pre> | |||
mkdir ~/doms/example.com/fastcgi/muster | |||
cp ~/doms/example.com/fastcgi/phpstub ~/doms/example.com/fastcgi/muster/phpstub | |||
</pre> | |||
Anschließend muss der Apache Webserver noch angewiesen werden auch diese bestimmte Konfiguration von PHP zu verwenden. Dazu werden der [[.htaccess]] Datei im DocumentRoot der Sub-Domain zwei Zeilen hinzugefügt bzw. eine .htaccess mit den zwei Zeilen angelegt. | |||
Im Beispiel handelt es sich um die Domain muster.example.com, also: | |||
<pre> | |||
cd ~/doms/example.com/subs/muster | |||
cd ~/doms/example.com/subs/ | |||
vi .htaccess | vi .htaccess | ||
AddType application/x-httpd-phpfastcgi .php | |||
Action application/x-httpd-phpfastcgi /fastcgi-bin/muster/phpstub | |||
AddType application/x-httpd- | </pre> | ||
Action application/x-httpd- | |||
---- | ---- |
Version vom 8. April 2010, 12:44 Uhr
Einstieg |
Hsadmin |
Pakete |
User |
Domains |
Systemd |
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 auszuführen. Anwender, die lediglich PHP-Dateien hochgeladen haben, brauchen ausdrücklich keine eigene php.ini.
Anpassung der PHP Grundkonfiguration
Um die PHP Konfiguration an eigene Bedürfnisse anzupassen legt man eine Konfigurationsdatei Namens php.ini im fastcgi Verzeichnis der Domain an. (Für https:// entsprechend im -ssl Verzeichnis.) Als Vorlage kann eine php-muster.ini dienen.
Achtung: Kommentare nicht mit # einleiten (kann zu unerwarteten Fehlkonfigurationen führen), Kommentarzeichen ist das Semikolon ";".
Häufig anzupassen sind z.B.:
- die Content-Type charset= Vorgabe für den HTTP Header.
- der maximal verwendbare Hauptspeicher (memory_limit).
- die maximale Größe hochgeladener Dateien (post_max_size).
- die aktiven Extensions.
Beispiel: Durch das Löschen des ";" Kommentarzeichens vor "extension=xyz.so" wird das Module geladen. Achtung viele sind per default schon geladen.
------8< SCHNIPP >8------ [..] memory_limit = 128M (default) post_max_size = 8M (default) upload_max_filesize = 2M (default) [..] default_charset = "UTF-8" ; (ist sonst iso-8859-1) ; Der charset kann aber wiederum durch einen Funktionsaufruf ; header("Content-Type: text/html; charset=iso-8859-1") ; im PHP-Skript überschrieben werden (sofern output_buffering = On). ------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
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 )
safe_mode
Veraltete Option
Die Verwendung des Safe Mode wird explizit nicht empfohlen. Mit PHP 5.3.0 ist der Safe Mode veraltet, in PHP 6 gibt es diese Option nicht mehr.
Dank (Fast)CGI laufen PHP Skripte zwar "nur" mit Userrechten, dennoch ist es ratsam, den PHP safe_mode zu aktivieren, sofern dies mit den eingesetzten PHP Skripten möglich ist. Der safe_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 extra safe_mode_exec_dir außerhalb des open_basedir bereitgestellt werden (z.B. ~/priv/bin).
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
verschiedene PHP Konfigurationen nebeneinander verwenden
Um verschiedene PHP Konfigurationen nebeneinander zu verwenden, kopierst Du den phpstub in ein Unterzeichnis von (fast)cgi(-ssl) und mappst nach Belieben deine PHP Dateien darauf. So können beliebig viele Konfigurationen bei einer Domain nebeneinander genutzt werden.
Beispiel muster.example.com
mkdir ~/doms/example.com/fastcgi/muster cp ~/doms/example.com/fastcgi/phpstub ~/doms/example.com/fastcgi/muster/phpstub
Anschließend muss der Apache Webserver noch angewiesen werden auch diese bestimmte Konfiguration von PHP zu verwenden. Dazu werden der .htaccess Datei im DocumentRoot der Sub-Domain zwei Zeilen hinzugefügt bzw. eine .htaccess mit den zwei Zeilen angelegt. Im Beispiel handelt es sich um die Domain muster.example.com, also:
cd ~/doms/example.com/subs/muster vi .htaccess AddType application/x-httpd-phpfastcgi .php Action application/x-httpd-phpfastcgi /fastcgi-bin/muster/phpstub