Marc Reichelt: PHP als CGI im Apache2

Hallo an alle,

auf meinem Debian-Testserver möchte ich gerne PHP4 als CGI einrichten (zudem mit SuEXEC).
Doch meine bisherigen Versuche scheiterten, obwohl ich PHP öfters (unter Windows) als CGI eingerichtet habe.

Unter Linux habe ich nun die Situation, dass ich mein ausführbares PHP-Binary unter /usr/bin/php-cgi liegen habe (eigentlich ist das ein symbolischer Link, der über weitere Links auf /usr/bin/php4-cgi zeigt, aber das sollte gleich sein).

Nun versuche ich, PHP folgendermaßen zum Laufen zu bekommen (ExecCGI ist für das Verzeichnis aktiviert):

Action php-cgi /usr/bin/php-cgi
AddHandler php-cgi .php

Allerdings meldet mir nun mein Browser, wenn ich http://example.org/test.php aufrufe, folgendes:
"The requested URL /usr/bin/php-cgi/test.php was not found on this server."

Apache2 versucht also, unter /usr/bin/php-cgi/test.php ein Binary zu finden, fällt dabei aber auf die Nase. Ich habe den Apache2 sicherheitshalber mal gestoppt, da ich denke, dass dieses Verhalten Lücken erzeugt haben könnte.

Wie erreiche ich also nun, dass Apache2 meine Datei test.php mit der Binary /usr/bin/php-cgi ausführt? Und was muss ich dann noch für SuEXEC beachten?

Grüße

Marc Reichelt || http://www.marcreichelt.de/

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
  1. hallo Marc,

    auf meinem Debian-Testserver möchte ich gerne PHP4 als CGI einrichten (zudem mit SuEXEC). Warum in der CGI-Version? Für Debian ist,wie für jedes Linux, die Modulvariante deutlich vorzuziehen.

    Allerdings meldet mir nun mein Browser, wenn ich http://example.org/test.php aufrufe, folgendes:
    "The requested URL /usr/bin/php-cgi/test.php was not found on this server."

    Das hast du selbst so festgelegt. Mit "AddHandler" sollen _sämtliche_ *.php-Dateien als php-cgi behandelt werden, und mit "Action" (was in Apache2 eh nicht mehr nötig wäre) hast du festgelegt, in welchem Verzeichnis sie gefälligst zu liegen haben. Du hast im Grunde dasselbe gemacht, womit man Perl zwingen kann, Perl-Scripts grundsätzlich und ausschließlich dann ausführen zu lassen, wenn sie im cgi-bin liegen.

    Und was willst du eigentlich mit SUEXEC und warum?

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
  2. ups, da hatte ich einen Zeilenumbruch vergessen, was die Lesbarkeit erschwert. Konkret wollte ich schreiben:

    hallo Marc,

    auf meinem Debian-Testserver möchte ich gerne PHP4 als CGI einrichten (zudem mit SuEXEC).

    Warum in der CGI-Version? Für Debian ist, wie für jedes Linux, die Modulvariante deutlich vorzuziehen.

    Allerdings meldet mir nun mein Browser, wenn ich http://example.org/test.php aufrufe, folgendes:
    "The requested URL /usr/bin/php-cgi/test.php was not found on this server."

    Das hast du selbst so festgelegt. Mit "AddHandler" sollen _sämtliche_ *.php-Dateien als php-cgi behandelt werden, und mit "Action" (was in Apache2 eh nicht mehr nötig wäre) hast du festgelegt, in welchem Verzeichnis sie gefälligst zu liegen haben. Du hast im Grunde dasselbe gemacht, womit man Perl zwingen kann, Perl-Scripts grundsätzlich und ausschließlich dann ausführen zu lassen, wenn sie im cgi-bin liegen.

    Und was willst du eigentlich mit SUEXEC und warum?

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hallo Christoph,

      auf meinem Debian-Testserver möchte ich gerne PHP4 als CGI einrichten (zudem mit SuEXEC).

      Warum in der CGI-Version? Für Debian ist, wie für jedes Linux, die Modulvariante deutlich vorzuziehen.

      Seit wann bevormundest du andere, welche PHP-Einbindungs-Variante sie vorzuziehen haben, wo du doch selbst Linux verwendest und damit die vielfältigen Möglichkeiten kennen und schätzen gelernt hast?
      OK, war vielleicht etwas hart ausgedrückt, aber: Gibt es bestimmte Gründe, dass unter Debian die Modul- der CGI-Variante deutlich vorzuziehen ist?
      Ich glaube kaum, dass ein via CGI eingebundes PHP4 (zudem mit SuEXEC) unsicherer ist als ein via Modul eingebundenes.

      Allerdings meldet mir nun mein Browser, wenn ich http://example.org/test.php aufrufe, folgendes:
      "The requested URL /usr/bin/php-cgi/test.php was not found on this server."

      Das hast du selbst so festgelegt. Mit "AddHandler" sollen _sämtliche_ *.php-Dateien als php-cgi behandelt werden, und mit "Action" (was in Apache2 eh nicht mehr nötig wäre) hast du festgelegt, in welchem Verzeichnis sie gefälligst zu liegen haben. Du hast im Grunde dasselbe gemacht, womit man Perl zwingen kann, Perl-Scripts grundsätzlich und ausschließlich dann ausführen zu lassen, wenn sie im cgi-bin liegen.

      Nun gut. Dass ich es falsch konfiguriert habe, ist mir eigentlich bewusst. Ansonsten hätte ich nicht hier im Forum nachgefragt.
      Mal eine direkte Frage: Wie erreiche ich denn dann mein Vorhaben, dass PHP-Dateien mit dem Script /usr/bin/cgi-bin ausgeführt werden?

      Und was willst du eigentlich mit SUEXEC und warum?

      suEXEC ermöglicht es mir, Skripte mit den Rechten eines anderen Benutzers als den Standard-Benutzer des Apache ausführen zu lassen.
      Ob dies so sinnvoll ist, sei dahin gestellt - ich möchte meinen Server allgemein so sicher konfigurieren wie nur möglich.

      Grüße

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      1. Hallo Marc.

        Mal eine direkte Frage: Wie erreiche ich denn dann mein Vorhaben, dass PHP-Dateien mit dem Script /usr/bin/cgi-bin ausgeführt werden?

        Die dir noch fehlende Komponente lautet ScriptAlias.

        Einen schönen Mittwoch noch.

        Gruß, Mathias

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        debian/rules
      2. hallo Marc,

        Seit wann bevormundest du andere, welche PHP-Einbindungs-Variante sie vorzuziehen haben

        Ich wüßte nicht, wann und wo ich jemanden bevormundet hätte. Ich habe nach deinen Gründen gefragt. Die Modulvariante ist vor allem deshalb unter Linux deutlich praktikabler, weil sich damit alle Funktionen, die es bei PHP so gibt, ausschöpfen lassen. In der CGI-Variante ist das nicht im gleichen Maß möglich.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Hiho Christoph,

          ich habe mich nun von deinem weisen Rat überzeugen lassen und werde die Modul-Variante von PHP4 für meinen Server nehmen. Unter Debian ist das wohl wirklich "der" Standard. :)

          Grüße

          Marc Reichelt || http://www.marcreichelt.de/

          --
          Linux is like a wigwam - no windows, no gates and an Apache inside!
          Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)