Apache + fcgi + suexec | EIN php-call-script für X vHosts

Apache, Lighttpd, nginx, Cherokee
hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Apache + fcgi + suexec | EIN php-call-script für X vHosts

Post by hever » 2008-01-03 20:11

Hallo zusammen,
ich habe einen Apache Webserver mit mod_fastcgi und suexec konfiguriert.
Um PHP auszuführen habe ich ein Script erstellt, welches ein paar Einstellungen setzt und dann PHP aufruft.
Da ich auch noch suexec verwende wird das Script das PHP aufruft immer unter einem Benutzer (und einer Gruppe) die im VirtualHost konfiguriert ist ausgeführt und somit auch PHP unter diesem Benutzer ausgeführt.

Die Konfiguration ist folgendem ähnlich:
http://www.debianhowto.de/doku.php/de:h ... 2_php-fcgi
http://www.fastcgi.com/docs/faq.html#PHP
http://www.fastcgi.com/mod_fastcgi/docs ... stcgi.html (mod_fastcgi Apache Doku)


Es scheint momentan notwendig zu sein, für jeden VirtualHost ein eigenes Script zu haben, welches dann PHP aufruft.
Mehrere VirtualHosts können nicht ein Script benutzen, welches PHP aufruft, weil suexec dann meckern würde (UID bzw. GID mismatch.).

Mein Problem:
Ich würde gerne nur ein Script benutzen (das dann PHP aufruft), welches alle VirtualHosts aufrufen können und somit mittels suexec unter verschiedenen Benutzern ausgeführt wird.
Noch lieber würde ich die ganze Konfiguration nur im VirtualHost - Abschnitt vornehmen und garnicht erst das Script aufrufen (bsp. die PHP-Binary direkt aufrufen.).

Ich sehe keine Möglichkeit wie das gehen kann (mir fallen nur Gründe ein warum es mit suexec nicht funktionieren kann), darum hoffe ich, dass mir jemand mit mehr Erfahrung weiterhelfen kann...

Nochmal: Ich möchte vermeiden für jeden VirtualHost ein eigenes Script erstellen zu müssen.

simcen
Posts: 333
Joined: 2003-02-12 14:35
Location: Bern, Schweiz

Re: Apache + fcgi + suexec | EIN php-call-script für X vHosts

Post by simcen » 2008-01-03 20:50

Hast du mal daran gedacht, nur ein Virtual Host mit "ServerAlias" zu verwenden und im Script entsprechend auf die URL zu reagieren?

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: Apache + fcgi + suexec | EIN php-call-script für X vHosts

Post by hever » 2008-01-03 21:01

Ich brauche mehrere VirtualHosts...

Wie käme man denn im Shell Script an die URL ?

simcen
Posts: 333
Joined: 2003-02-12 14:35
Location: Bern, Schweiz

Re: Apache + fcgi + suexec | EIN php-call-script für X vHosts

Post by simcen » 2008-01-03 21:04

Wieso ein Shell Script? Startest du ein PHP-Script über das CLI?
Sorry ich blick gerade nicht durch...

Edit:
Uff, da merkt man wie wenig ich geschlafen habe ;)
Ich sitz voll auf der Leitung. Melde mich wieder wenn ich eine Idee habe...
Nichts für ungut.

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: Apache + fcgi + suexec | EIN php-call-script für X vHosts

Post by hever » 2008-01-03 21:26

Vielleicht habe ich es auch etwas konfus beschrieben.

Wenn man mod_fastcgi benutzt, dann wird PHP über ein shell script aufgerufen (oder auch das Binary direkt)...

fastcgi.conf

Code: Select all

<IfModule mod_fastcgi.c>
     FastCgiWrapper On
     
     AddHandler php-fastcgi .php
     ScriptAlias /cgi-bin/ /var/www/cgi-bin/
 
     Action php-fastcgi /cgi-bin/php-fcgi
     AddType application/x-httpd-php .php
</IfModule>


php-fcgi

Code: Select all

#!/bin/sh

PHPRC="/etc/php5/cgi"
export PHPRC

PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN

exec /usr/bin/php-cgi


... im VirtualHost steht etwas wie:

Code: Select all

<VirtualHost *:80>
.
.
.
        SuexecUserGroup USER GROUP
.
.
.
</VirtualHost>


Das Script php-fcgi wird also unter dem Benutzer USER und der Gruppe GROUP ausgeführt.
Das natürlich nur wenn das Script auch USER:GRUPPE gehört, sonst meckert suexec.

Wenn ein anderer VirtualHost nun also das Script aufrufen möchte, muss das Script dessen USER:GROUP aufweisen, es brauch also andere Berechtigungen.
Das führt dazu dass es mehrere Scripts geben muss die alle gleich aussehen (wenn man nicht unterschiedliche Einstellungen vornehmen mag) nur damit PHP unter anderen Berechtigungen ausgeführt wird.

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: Apache + fcgi + suexec | EIN php-call-script für X vHosts

Post by Roger Wilco » 2008-01-03 21:35

hever wrote:Wenn ein anderer VirtualHost nun also das Script aufrufen möchte, muss das Script dessen USER:GROUP aufweisen, es brauch also andere Berechtigungen.
Das führt dazu dass es mehrere Scripts geben muss die alle gleich aussehen (wenn man nicht unterschiedliche Einstellungen vornehmen mag) nur damit PHP unter anderen Berechtigungen ausgeführt wird.

Richtig. Für alles andere müsstest du dein SuExec-Binary patchen. Oder du benutzt SuPHP, wobei dann für jeden Request der Interpreter neu geforkt werden muss.

BTW: mod_fastcgi für den Apache httpd wird nicht mehr weiterentwickelt. Du solltest auf mod_fcgid umstellen.

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: Apache + fcgi + suexec | EIN php-call-script für X vHosts

Post by hever » 2008-01-03 23:22

Ist mein anliegen denn so besonders, will man wirklich meistens für jeden VirtualHost ein eigenes Script anlegen und liegt meine Zielkonfiguration so daneben ?!

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: Apache + fcgi + suexec | EIN php-call-script für X vHosts

Post by hever » 2008-01-04 01:31

Unter Verwendung von mod_fcgid und

Code: Select all

FCGIWrapper /var/www/cgi-bin/php-fcgi .php .php4


erhalte ich folgende Fehlermeldung:

FCGIWrapper takes 1-2 arguments, The CGI wrapper setting


Wie kann ich mehrere Erweiterungen neben .php als PHP Script ausführen lassen ?

hever
Posts: 74
Joined: 2003-09-14 15:23
Location: Münster

Re: Apache + fcgi + suexec | EIN php-call-script für X vHosts

Post by hever » 2008-01-04 02:00

Folgende Konfiguration funktioniert, ich finde es mit dem doppelten FCGIWrapper jedoch noch etwas unschön.

Code: Select all

<VirtualHost *>
   
        SuexecUserGroup USER GROUP
    DocumentRoot /var/www/
   
    AddHandler fcgid-script .php4 .php

    <Directory /var/www/test>
        FCGIWrapper /var/www/cgi-bin/php-fcgi .php
        FCGIWrapper /var/www/cgi-bin/php-fcgi .php4
        Options +ExecCGI

        Order Allow,Deny
        Allow from All
    </Directory>
   
</VirtualHost>


Kann mir jemand erklären warum "AddHandler fcgid-script .php4 .php" notwendig ist ?