Howto PHP4/PHP5 als CGI

Aus Cryptronic
Wechseln zu: Navigation, Suche

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

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Tipps
Werkzeuge