target uid/gid mismatch bei fastcgi

Apache, Lighttpd, nginx, Cherokee
tenshinhan10
Posts: 64
Joined: 2003-02-25 15:47

target uid/gid mismatch bei fastcgi

Post by tenshinhan10 » 2007-05-13 17:02

Ich habe auf meinem Root (suse 10.2 64bit) den Apache2 laufen und wollte per fastcgi/suexec den Vhost eigene User zuweisen. Die Installation habe ich über die Suse eignen RPM vorgenommen, so das eigentlich alles am richtigen Platz sein sollte. fcgid wurde den Module hinzugefügt und die vhost um den Eintrag für User und Gruppe ergänzt.

Wenn ich versuche PHP Datein auf den Vhost aufzurufen erhalten ich einen Fehler in der suexec.log:

target uid/gid (1001/100) mismatch with directory (0/0) or program (0/0)

Was dieser Fehler bedeutet habe ich nachgelesen - aber die Rechte im Vhost sowie die des Vhost Verzeichnis und der PHP Datein stimmen überein. Normaler weise sollte da auch nicht (0/0) auftauchen sondern der möglicherweise falsche User.

Darauf hin hatte ich etwas nachgelesen und einer hatte erwähnt das dies mit dem Zugriff aufs php Binary zu tun haben kann. Daher habe ich testweise
/srv/www/cgi-bin/php5 auf den Benutzer und Gruppe 1001/100 geändert.

Damit laufen die PHP Datein Ordnungsgemäß mit dem gewünschten User - dieser vorgehensweise ist aber falsch - der Fehler müßte irgendwie mit der Zuweisung des php Binary zu tun haben. Vielleicht habe ich nur eine Ordnerangabe vergessen - habt Ihr eine Idee ?

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

Re: target uid/gid mismatch bei fastcgi

Post by Roger Wilco » 2007-05-13 17:27

Du benutzt auf deinem System SuExec. Das stellt gewisse Anforderungen an die CGI-Programme, welche aufgerufen werden, z. B. dass die UID/GID eine bestimmte ist, dass das CGI-Programm unterhalb eines festen DocumentRoots liegt usw.

Aus Sicht deines Webservers wird das PHP-Binary aufgerufen und nicht das PHP-Skript selbst, daher muss das PHP-Binary den Anforderungen genügen. Du kannst dir einen kleinen Workaround basteln, indem du das PHP-Binary aus einem Shellskript heraus aufrufst, welches die entsprechenden Rechte gesetzt hat. Das hat noch den Vorteil, dass du gewisse Parameter über Environmentvariablen in dem Skript steuern kannst.

tenshinhan10
Posts: 64
Joined: 2003-02-25 15:47

Re: target uid/gid mismatch bei fastcgi

Post by tenshinhan10 » 2007-05-13 18:45

Erstmal vielen Dank für Deine Antwort.
Aus Sicht deines Webservers wird das PHP-Binary aufgerufen und nicht das PHP-Skript selbst, daher muss das PHP-Binary den Anforderungen genügen.
Das hatte ich durch den Test mit dem Benutzerwechsel des PHP-Binary bereits raus gefunden. Aber ich kann mir nicht vorstellen das dies so gewollt ist.
Du kannst dir einen kleinen Workaround basteln, indem du das PHP-Binary aus einem Shellskript heraus aufrufst, welches die entsprechenden Rechte gesetzt hat.
Kannst Du mir dafür bitte ein Muster geben ? Ich kann mir das noch nicht so richtig vorstellen - da das Shellscript ja auch nur die Rechte eines Benutzers haben kann.

Ich hatte schon überlegt ob es eine Möglichkeit gibt einfach die PHP Binary für jeden User zu kopieren und mit den entsprechenden Rechten zu hinterlegen. Der dafür nötige Eintrag:
FCGIWrapper /srv/www/cgi-bin/php5 .php
[/code]wird in den VHost Configs vom Apache2 nicht angenommen.

kase
Posts: 1031
Joined: 2002-10-14 22:56

Re: target uid/gid mismatch bei fastcgi

Post by kase » 2007-05-13 19:02

Code: Select all

#!/bin/sh
# Pfad zur php.ini, ohne / am Ende.
PHPRC="/var/www/php-config/legendz"
export PHPRC
# Maximale Requests pro php-Prozess, verhindert immer
# groesser werdende php-binarys zB durch memory leaks.
# Nicht zu niedrig waehlen, da sonst bei hoher Load
# die Binarys zu oft neu gestartet werden muessen. (>=5000)
# Wert IMMER setzen, 0 fuer unendlich (ab PHP 5.2)
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS
# Anzahl an php-fcgi-children (Prozesse)
# Wert IMMER setzen, 0 fuer keine Children (ab PHP 5.2), saemtliche Anfragen uebernimmt dann der Parent.
# --------------------
# ACHTUNG mod_fcgid:
# Bei mod_fcgid und DefaultMaxClassProcessCount > (groesser als) 1
# Wert immer 0 setzen, ansonsten spawnt mod_fcgid
# PHP_FCGI_CHILDREN * (mal) DefaultMaxClassProcessCount Prozesse
# PHP_FCGI_CHILDREN=0 benoetigt mindestens PHP 5.2,
# falls PHP < 5.2 sehr kleinen Wert benutzen. (zB 1)
PHP_FCGI_CHILDREN=0
export PHP_FCGI_CHILDREN
# IP Adresse, von der connections akzeptiert werden, normalerweise nur localhost
FCGI_WEB_SERVER_ADDRS="127.0.0.1"
export FCGI_WEB_SERVER_ADDRS
# php-bin aufrufen
exec /usr/bin/php5-cgi
Edit: Du legst das Shellscript natürlich für jeden Benutzer neu an.

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

Re: target uid/gid mismatch bei fastcgi

Post by Roger Wilco » 2007-05-13 19:06

tenshinhan10 wrote:Das hatte ich durch den Test mit dem Benutzerwechsel des PHP-Binary bereits raus gefunden. Aber ich kann mir nicht vorstellen das dies so gewollt ist.
Doch, ist es. Das PHP-Binary sollte normalerweise für Benutzer unveränderbar sein (also z. B. root:root gehören und 0755 als Rechte gesetzt haben). Das "Problem" mit der unpassenden UID/GID umgehst du dann mit dem Shellskript.
tenshinhan10 wrote:Kannst Du mir dafür bitte ein Muster geben ?
http://debianhowto.de/doku.php/de:howto ... 2_php-fcgi
tenshinhan10 wrote:Ich hatte schon überlegt ob es eine Möglichkeit gibt einfach die PHP Binary für jeden User zu kopieren und mit den entsprechenden Rechten zu hinterlegen.
Das kannst du machen, ist aber nicht sonderlich sinnvoll, da ein böser Benutzer dann ein böses Binary installieren kann, das ggf. den Server in die Knie zwingt.

tenshinhan10
Posts: 64
Joined: 2003-02-25 15:47

Re: target uid/gid mismatch bei fastcgi

Post by tenshinhan10 » 2007-05-13 19:50

Die Art wie dies bei Debinan konfiguriert ist scheint sich doch von Suse zu unterscheiden - die Suse Konfig für mod_fcgi.conf sieht so aus:

Code: Select all

##
## Associate .fcgi files with mod_fcgid
##
AddHandler fcgid-script .fcgi

##
## PHP via FastCGI
##
## uncomment the following line if you want to handle php via mod_fcgid
##
<FilesMatch ".php$">
AddHandler fcgid-script .php
FCGIWrapper /srv/www/cgi-bin/php5 .php

Options +ExecCGI
</FilesMatch>
##
</IfModule>
# End of <IfModule fcgid_module>
Was müßte ich noch eintragen / ändern um so ein Script nutzen zu können ?
Selbst wenn ich das Script wie es ist an die Stelle von /srv/www/cgi-bin/php5. php setze - löst dies doch noch nicht das Problem mehrerer user.

Sorry wenn ich mich da etwas schwerfällig anstelle - es wäre schon wenn Ihr noch einen weiteren Tip geben könnt.

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

Re: target uid/gid mismatch bei fastcgi

Post by Roger Wilco » 2007-05-13 20:31

tenshinhan10 wrote:Die Art wie dies bei Debinan konfiguriert ist scheint sich doch von Suse zu unterscheiden
Nein, aber mod_fastcgi != mod_fcgid. Das nur mal am Rande...
tenshinhan10 wrote:Was müßte ich noch eintragen / ändern um so ein Script nutzen zu können ?
Das Binary in FCGIWrapper muss für jeden Benutzer/VirtualHost gesetzt werden im entsprechenden Abschnitt. Ein Binary für alle geht nicht, außer du verzichtest auf SuExec.

tenshinhan10
Posts: 64
Joined: 2003-02-25 15:47

Re: target uid/gid mismatch bei fastcgi

Post by tenshinhan10 » 2007-05-13 20:35

Das Binary in FCGIWrapper muss für jeden Benutzer/VirtualHost gesetzt werden im entsprechenden Abschnitt.
Genau das würde ich gern machen. Der Befehl:
FCGIWrapper /srv/www/cgi-bin/php5 .php
lässt sich aber scheinbar nicht in den Vhost verwenden. Jedenfalls startet Apache2 nicht und meldet - das dieser Befehl an der falschen Stelle steht.[/code]

kase
Posts: 1031
Joined: 2002-10-14 22:56

Re: target uid/gid mismatch bei fastcgi

Post by kase » 2007-05-13 20:52

Code: Select all

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName legendz.de
        ServerAlias www.legendz.de
        DocumentRoot /var/www/vhosts/legendz/home/web
        SuexecUserGroup legendz legendz

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory /var/www/vhosts/legendz/home/web>
                Options Indexes FollowSymLinks MultiViews
                # Wer htaccess benutzt, sollte hier mindestens AuthConfig setzen
                AllowOverride None
                Order allow,deny
                allow from all
                # PHP
                AddHandler fcgid-script .php
                FCGIWrapper /var/www/php-fcgi-starter/legendz/php-fcgi-legendz .php
                Options +ExecCGI
        </Directory>

        ErrorLog /var/log/apache2/error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel debug

        CustomLog /var/log/apache2/access.log combined
        ServerSignature On
</VirtualHost>

tenshinhan10
Posts: 64
Joined: 2003-02-25 15:47

Re: target uid/gid mismatch bei fastcgi

Post by tenshinhan10 » 2007-05-13 21:09

ok ich habs - der Fehler war das ich den FCGIWrapper Befehl außerhalb des Directory Befehls eingetragen hatte.

Besten Dank nochmal!