Howto PHP4/PHP5 als CGI
Inhaltsverzeichnis |
Howto PHP4/PHP5 als CGI
Einleitung
Es ist ja deutlich schöner PHP als CGI auf einem Server laufen zu lassen. Jedoch gehen die Tutorials wie man dies ma besten realisiert stark auseinander. Ich habe mich deshalb nun in verschiedene Tut's eingelesen und werde hier mal meine eigene Lösung vorstellen. Die Lösung baut auf debian etch auf. Ich gehe auch davon aus, dass ich das apache Paket nochmals selber kompilier da die modernen Rechner die ohne Probleme in 20 Minuten schaffen und außerdem gibt es dadurch deutlich weniger probleme beim compilieren und es stimmen ohne Großen Aufwand alle Pfade und Rechte. Ich gehe auch davon aus, dass meine spätere PHP-CGI Binary dem Benutzer www-data und der Gruppe www-data angehört und das Verzeichnis ebenfalls diesem Benutzer gehört.
Info
Ich baue auf folgendem Tutorlial auf: http://archiv.debianhowto.de/de/apache2-phpfcgi-sarge/c_apache2-phpfcgi-sarge.html An diesem Tutorial gefällt mir die Variante nicht, dass die Sicherheitsüberprüfung ob das zu ausführende Programm auch wirklich dem Benutzer gehört, ausgeschaltet wird überhaupt nicht.
Ich nehme auch keine Verantwortung darüber, dass dieses Tutorial genau das tut wie ich es hier beschrieben hab, ebenfalls dass meine Patches irgendwelche Sicherheitslücken öffnen könnten.
Vorbereitungen
Als erstes muss man sich folgende Packete installieren:
| Folgendes in der Shell als root ausführen: |
|
apt-get install apache2-mod-fcgid dpatch fakeroot php5-cgi
|
Nun hat man mal die ersten Schritte als nächste, dies setzte voraus, dass in /etc/apt/sources.list ein deb-src eintrag vorhanden ist.
| Folgendes in der Shell als root ausführen: |
mkdir /root/apache cd /root/apache apt-get source apache2 apt-get build-dep apache2 |
So nun haben wir die benötigten Pakete und können uns ans kompilieren machen. Zuvor jedoch muss man noch meinen Patch für suexec einbinden:
| Folgendes in der Shell als root ausführen: |
wget http://www.cryptronic.de/patches/suexec/099_suexec_add_new_prg_owner.dpatch mv 099_suexec_add_new_prg_owner.dpatch debian/patches echo 099_suexec_add_new_prg_owner >> debian/patches/00list |
Gegeben falls noch die Benutzer- und Gruppenid anpassen: Einfach folgende Defines anpassen: BINUID und BINGID (Zeilen 21 und 22 in meinem Patch)
Nach diesen Änderungen können wir uns daran machen das Paket zu kompilieren:
| Folgendes in der Shell als root ausführen: |
dpkg-buildpackage |
Dies kann eine ganze Weile dauern, jedoch hatte ich noch keinen Compile wo dies länger als 20 Minuten gedauert hat.
Installation
Wenn apache nun fertig kompiliert wurde kann man sich daran machen, die nötigen Pakete zu installieren:
| Folgendes in der Shell als root ausführen: |
dpkg -i apache2.2-common*.deb |
Nun hat man schon die benötigte gepatchte suexec binary installiert.
Konfiguration
Nun muss man noch einige Konfigurationen anpassen:
Als erstes müssen wir apache das fcgid Modul beibringen:
| Folgendes in der Shell als root ausführen: |
|
a2enmod fcgid
|
Danach müssen wir noch ein extra Verzeichnis erstellen, in dem wir die phpX-cgi Binary plazieren und das wir auch dem gleichen Benutzer den wir oben unter BINUID und BINGID eingetragen haben übertragen.
Ich habe hierfür /var/www/php gewählt:
| Folgendes in der Shell als root ausführen: |
mkdir /var/www/php chown www-data:www-data /var/www/php ln -s /usr/bin/phpX-cgi /var/www/php/phpX-cgi chown www-data:www-data /usr/bin/phpX-cgi |
Danach noch folgendes in die Apache Konfiguration mit einbringen:
| File: /etc/apache2/apache2.conf |
ScriptAlias /phpX-cgi /var/www/php/ Action application/phpX-cgi /phpX-cgi/phpX-cgi AddType application/phpX-cgi .phpX |
Das wars auch schon apache noch neustarten:
| Folgendes in der Shell als root ausführen: |
|
/etc/init.d/apache2 restart
|
Und folgendes in die vhosts eintragen:
<Directory "/path/to/docroot"> Options +FollowSymlinks Options -Indexes AddHandler fcgid-script .php FCGIWrapper /var/www/php/phpX-cgi .php Options +ExecCGI </Directory>
Zu beachten
Man muss überall darauf achten, dass man phpX durch php4 oder php5 ersetzt.
Auch muss man bei jedem apt-get upgrade aufpassen, denn wenn apache2.2-common geupgraded wird, dann wird selbstverständlich auf die gepatche suexec Binary wieder überschrieben. Danach muss man die Schritte ab apt-get source apache2 nochmals wiederholen bis zu dem Punkt dpkg -i apache2.2-common*.deb
Fertig
Ansonsten wünsch ich viel Spaß mit dem phpX-cgi