Erfahrungen apache2 mit PHP 5 als FastCGI

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
Pawel
Beiträge: 284
Registriert: 27.11.2006 03:59:39

Beitrag von Pawel » 03.05.2007 00:26:56

iface hat geschrieben:Hier würde ich ganz einfach beim Erstellen eines neuen Nutzers die Datei für das userdir.conf/ mit anlegen, dann sollte es keine Probleme mit dem Apachen geben.
Das Problem ist eher beim deluser oder wenn ein User auf die schlaue Idee kommt das bin Verzeichnis zu löschen. Danach existiert das fcgi starter Skript nicht mehr und das meckert der Apache an.
iface hat geschrieben:Eine Frage stellt sich mir allerdings noch:
Du hast in deinem Beispiel die Zeile

Code: Alles auswählen

AddHandler fcgid-script .php 
einfach vergessen, oder wird diese nicht benötigt?
Diese Zeile muss nur einmalig in der gesamten Apache Config eingefügt werden. Bei mir ist sie in der fcgid.conf.

Hier noch das besagte Skript:

Code: Alles auswählen

#!/usr/bin/perl -w

use strict;

my $conf_path = $ARGV[0] ;
my $file = $conf_path . "/local_userdir.conf";
my $dir = "";
my $fcgi = "";

my @home_dirs = `find /home/*/public_html/bin/php5-cgi`;

open (USERDIR, ">" . $file );

foreach $fcgi ( @home_dirs ) {
        chomp ($fcgi);
        $dir = $fcgi;
        $dir =~ s/\/bin\/php5-cgi$//g;
        print USERDIR "<Directory ", $dir, ">\n\tFCGIWrapper ", $fcgi, " .php\n\tOptions +ExecCGI\n</Directory>\n\n";
}

close(USERDIR);
Interessant wäre das Skript noch um eine Validierung zu erweitern, so dass es überprüft, ob das fcgid starter Skript mit dem original übereinstimmt.
Zusätzlich ist mir eben was in meiner Konfig aufgefallen: Ich verhindere jeglichen Zugriff auf das bin Verzeichniss. Solltest du auch vlt. machen.

olibaier
Beiträge: 2
Registriert: 05.05.2007 14:36:34

mod_fcgid: can't connect unix domain socket

Beitrag von olibaier » 05.05.2007 15:21:05

Hallo,

ersteinmal vielen Dank an alle die an diesem Thread mitwirken oder gewirkt haben :) (besonders and Kase, atropin und Waleb). Ihr habt mir letzte Nacht echt Hoffnung gemacht ... laufen will mod_fcgid aber irgendwie nicht.

Ich möchte apache2.2 mit dem MPM worker, mod_suexec und mod_fcgid unter Debian Etch für PHP zum laufen kriegen.
Ich benutze nur etch Pakete also mod_fcgid 1.10 und apache 2.2.3.

mod_fcgid scheint nicht die socket connecten zu können (steht im error.log s.u.) Das Problem tritt auf egal ob ich suexec verwende oder nicht (s. logfiles bunten).

Hier meine config:

mods-avaiable/fcgid.conf:

Code: Alles auswählen

<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  SocketPath /var/lib/apache2/fcgid/sock
  IPCConnectTimeout 20
</IfModule>
sites-available/olibaier.de (ist der von Waleb nicht unähnlich):

Code: Alles auswählen

<VirtualHost *>
        SuExecUserGroup olibaier olibaier

        ServerName olibaier.de
        ServerAlias www.olibaier.de

        DocumentRoot /var/www/virtual/olibaier.de
        AddHandler fcgid-script .php

        <Directory /var/www/virtual/olibaier.de>
                FCGIWrapper /var/www/virtual/olibaier.de/php-fcgi .php
                Options FollowSymLinks MultiViews +ExecCGI
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias     /cgi-bin/ /usr/lib/cgi-bin/olibaier.de/

        <Directory /usr/lib/cgi-bin/olibaier.de>
                AllowOverride None
                Options ExecCGI
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log
        #ErrorLog /var/log/apache2/virtual/olibaier.de/error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel debug
        CustomLog /var/log/apache2/access.log combined
        #CustomLog /var/log/apache2/virtual/olibaier.de/access.log combined
        ServerSignature Off
</VirtualHost>
und der FCGIWrapper /var/www/virtual/olibaier.de/php-fcgi (auch von Waleb):

Code: Alles auswählen

PHPRC="/etc/php5/cgi/php.ini"
export PHPRC
PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN
exec /usr/bin/php5-cgi
Und hier die Logfiles:

Wenn suExec aktiviert ist, tut was es soll. Das sieht man auch schön im Log File:

Code: Alles auswählen

[2007-05-05 12:33:49]: uid: (1000/olibaier) gid: (1000/1000) cmd: php-fcgi
[2007-05-05 12:33:50]: uid: (1000/olibaier) gid: (1000/1000) cmd: php-fcgi
[2007-05-05 12:33:51]: uid: (1000/olibaier) gid: (1000/1000) cmd: php-fcgi
[2007-05-05 12:34:35]: uid: (1000/olibaier) gid: (1000/1000) cmd: php-fcgi
[2007-05-05 12:34:36]: uid: (1000/olibaier) gid: (1000/1000) cmd: php-fcgi
[2007-05-05 12:34:37]: uid: (1000/olibaier) gid: (1000/1000) cmd: php-fcgi
[2007-05-05 12:34:38]: uid: (1000/olibaier) gid: (1000/1000) cmd: php-fcgi
[2007-05-05 12:34:39]: uid: (1000/olibaier) gid: (1000/1000) cmd: php-fcgi
Die vielen Aufrufe kommen glaube ich, weil mod_fcgid immer wieder aussteigt.

Dazu erscheinen folgende Logeinträge in /var/log/apache2/error.log:

Code: Alles auswählen

[Sat May 05 12:57:17 2007] [notice] mod_fcgid: call /var/www/virtual/olibaier.de/index.php with wrapper /var/www/virtual/olibaier.de/php-fcgi
suexec failure: could not open log file
fopen: Permission denied
[Sat May 05 12:57:17 2007] [notice] mod_fcgid: server /var/www/virtual/olibaier.de/index.php(9573) started
[Sat May 05 12:57:17 2007] [debug] arch/unix/fcgid_proc_unix.c(491): (111)Connection refused: mod_fcgid: can't connect unix domain socket: /var/lib/apache2/fcgid/sock/8073.22
[Sat May 05 12:57:18 2007] [notice] mod_fcgid: call /var/www/virtual/olibaier.de/index.php with wrapper /var/www/virtual/olibaier.de/php-fcgi
suexec failure: could not open log file
fopen: Permission denied
[Sat May 05 12:57:18 2007] [notice] mod_fcgid: server /var/www/virtual/olibaier.de/index.php(9575) started
[Sat May 05 12:57:18 2007] [debug] arch/unix/fcgid_proc_unix.c(491): (111)Connection refused: mod_fcgid: can't connect unix domain socket: /var/lib/apache2/fcgid/sock/8073.23
das kommt einige mal, bis für jeden versuch das kommt:

Code: Alles auswählen

[Sat May 05 13:00:46 2007] [notice] mod_fcgid: process /var/www/virtual/olibaier.de/index.php(9573) exit(server exited), terminated by calling exit(), return code: 1
[Sat May 05 13:00:46 2007] [notice] mod_fcgid: process /var/www/virtual/olibaier.de/index.php(9575) exit(server exited), terminated by calling exit(), return code: 1
nach diversen versuchen scheint mod_fcgid aufzugben und schreibt das hier ins error.log:

Code: Alles auswählen

[Sat May 05 13:04:16 2007] [warn] mod_fcgid: can't apply process slot for /var/www/virtual/olibaier.de/index.php
(Die Zeitstempel bitte ignorieren, ich habe die index.php mehrmals aufgerufen, um die Fehlermeldungen zu kopieren)

Die sockets werden erzeugt, das zeigt mir watch -n 1 ls -la /var/lib/apache2/fcgid/sock/ . Sie verschwinden aber immer wieder sehr schnell (manchmal sind 2-4 dateien in dem verzeichnis)

Code: Alles auswählen

srwx------ 1 www-data www-data  0 May  5 13:03 8073.68
Da mich die Rechte der socket stuzig gemacht haben, habe ich es mal ohne suexec propiert, also die Zeile SuExecUserGroup im vhost auskommentiert. Leider geht es dann auch nicht. Der Fehler in der error.log sieht aber etwas anders aus.

Code: Alles auswählen

Sat May 05 13:10:13 2007] [notice] mod_fcgid: call /var/www/virtual/olibaier.de/index.php with wrapper /var/www/virtual/olibaier.de/php-fcgi
[Sat May 05 13:10:13 2007] [notice] mod_fcgid: server /var/www/virtual/olibaier.de/index.php(10486) started
[Sat May 05 13:10:13 2007] [debug] arch/unix/fcgid_proc_unix.c(491): (111)Connection refused: mod_fcgid: can't connect unix domain socket: /var/lib/apache2/fcgid/sock/10381.1
[Sat May 05 13:10:14 2007] [notice] mod_fcgid: call /var/www/virtual/olibaier.de/index.php with wrapper /var/www/virtual/olibaier.de/php-fcgi
[Sat May 05 13:10:14 2007] [notice] mod_fcgid: server /var/www/virtual/olibaier.de/index.php(10488) started
[Sat May 05 13:10:14 2007] [debug] arch/unix/fcgid_proc_unix.c(491): (111)Connection refused: mod_fcgid: can't connect unix domain socket: /var/lib/apache2/fcgid/sock/10381.2
[Sat May 05 13:10:15 2007] [notice] mod_fcgid: call /var/www/virtual/olibaier.de/index.php with wrapper /var/www/virtual/olibaier.de/php-fcgi
[Sat May 05 13:10:15 2007] [notice] mod_fcgid: server /var/www/virtual/olibaier.de/index.php(10490) started
[Sat May 05 13:10:15 2007] [info] (104)Connection reset by peer: mod_fcgid: read data from fastcgi server error.
[Sat May 05 13:10:15 2007] [error] [client 212.99.193.46] Premature end of script headers: index.php
[Sat May 05 13:10:19 2007] [notice] mod_fcgid: process /var/www/virtual/olibaier.de/index.php(10490) exit(communication error), terminated by calling exit(), return code: 255
[Sat May 05 13:10:19 2007] [notice] mod_fcgid: process /var/www/virtual/olibaier.de/index.php(10488) exit(server exited), terminated by calling exit(), return code: 255
[Sat May 05 13:10:19 2007] [notice] mod_fcgid: process /var/www/virtual/olibaier.de/index.php(10486) exit(server exited), terminated by calling exit(), return code: 255
Ich hoffe ja, dass ich nur ein Brett vorm Kopf habe und die Lösung ganz einfach ist :D

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 05.05.2007 17:47:48

Code: Alles auswählen

suexec failure: could not open log file
fopen: Permission denied 

Code: Alles auswählen

chmod o+rw /var/log/apache2/suexec.log

olibaier
Beiträge: 2
Registriert: 05.05.2007 14:36:34

Beitrag von olibaier » 05.05.2007 18:11:15

Vielen, vielen Dank Kase, Du bist der Beste. Sorry dass ich so ein Brett vorm Kopf hatte.

Nachdem ich suexec.log +o w gesetzt hatte wurde in der suexec.log folgender fehler gelogged

Code: Alles auswählen

[2007-05-05 15:55:11]: uid: (1000/olibaier) gid: (1000/1000) cmd: php-fcgi
[2007-05-05 15:55:11]: (8)Exec format error: exec failed (php-fcgi)
Dann musste ich noch in dem FCGIWrapper Skript einen Skript Handler (heisst doch so, oder?) geben und schon ging es (auch ohne suexec)

Code: Alles auswählen

#!/bin/sh
PHPRC="/etc/php5/cgi/php.ini"
export PHPRC
PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN
exec /usr/bin/php5-cgi
Eine Frage bleibt...muss suexeg.log wirklich world writable sein? Wie macht ihr das?

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 05.05.2007 19:03:03

Nein, normalerweise loggt suexec seine Meldungen mit www-data, also bevor der User zu SuexecUserGroup gewechselt wird. Dann reicht es vollkommen, wenn die suexec.log von www-data beschrieben werden kann. Ein paar ganz wenige Fehler passieren aber erst dann, wenn suexec den User bereits gewechselt hat, zB wie bei dir, und dann kann suexec keine Logs mehr schreiben.

=> o+w muss nicht sein, wenn alles richtig läuft, aber unbedingt auf "suexec failure: could not open log file" achten, wenn das nächste Mal irgendwas Zicken macht :)

lobo
Beiträge: 180
Registriert: 27.01.2002 21:48:08
Lizenz eigener Beiträge: GNU General Public License

Beitrag von lobo » 07.05.2007 21:25:08

Also ich denke auch, daß die Berechtigung des Sockets ein Problem ist.

tail /var/log/apache2/error.log

Code: Alles auswählen

[Mon May 07 16:19:00 2007] [debug] arch/unix/fcgid_proc_unix.c(491): (111)Connection refused: mod_fcgid: can't connect unix domain socket: /var/lib/apache2/fcgid/sock/3103.28
ls -l /var/lib/apache2/fcgid/sock

Code: Alles auswählen

srwx------ 1 www-data www-data 0 2007-05-07 16:19 3103.28
Mit diesen Berechtigungen ist es für den FCGIWrapper, welcher als vhost-user läuft, einfach nicht möglich auf den socket zuzugreifen. Kann man mod_fcgi dazu bringen, die sockets mit dem vhost als "Owner" anzulegen?

Sobald ich suexec deaktiviere, indem ich die SuExecUserGroup Zeile im Vhost auskommentiere, funktioniert alles, weil dann die Prozesse als www-data ausgeführt werden und somit Zugriff auf die "domain sockets" haben.

regards,

lobo
Zuletzt geändert von lobo am 08.05.2007 21:56:16, insgesamt 1-mal geändert.

marc76
Beiträge: 8
Registriert: 07.05.2007 22:08:13

Beitrag von marc76 » 07.05.2007 22:39:45

Hallo zusammen!

Ich bin jetzt schon seit einigen Stunden dabei meinen Webserver mit mod-fcgid, suexec und php5 zu konfigurieren. Ich habe diesen Thread inzwischen mehrmals durch, habe zig verschiedene Varianten ausprobiert, aber ich bekomme es einfach nicht zum laufen... vielleicht hat hier jemand eine Idee woran es scheitert.
Das Problem ist, daß ich beim Aufruf von php Dateien immer ein "403 Forbidden, You don't have permission to access /test.php on this server" im Browser angezeigt bekomme. Das ganze unabhängig davon, ob die angeforderte Datei überhaupt existiert... ich habe den Eindruck, daß das starter script gar nicht aufgerufen wird...

Das BS ist ein frisch installiertes Debian Etch, installiert sind apache2-mpm-worker, libapache2-mod-fcgid, php5-cgi...

Hier alle möglichen logs und Einstellungen:

/var/log/apache2/error.log:

Code: Alles auswählen

[Mon May 07 22:05:05 2007] [notice] suEXEC mechanism enabled (wrapper: /usr/lib/apache2/suexec)
[Mon May 07 22:05:05 2007] [info] mod_fcgid: Process manager 19514 started
[Mon May 07 22:05:05 2007] [notice] Apache/2.2.3 (Debian) configured -- resuming normal operations
[Mon May 07 22:05:05 2007] [info] Server built: Mar 27 2007 14:59:52
[Mon May 07 22:05:05 2007] [debug] worker.c(1740): AcceptMutex: sysvsem (default: sysvsem)
/var/log/apache2/suexec.log: keine Einträge?!

/var/www/docs/test/access.log:

Code: Alles auswählen

91.96.178.166 - - [07/May/2007:22:05:17 +0200] "GET /test.php HTTP/1.1" 403 290 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"
/var/www/docs/test/error.log: keine Einträge...

fcgi.conf:

Code: Alles auswählen

<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  SocketPath /var/lib/apache2/fcgid/sock
  IPCConnectTimeout 20
</IfModule>
vhost conf:

Code: Alles auswählen

<VirtualHost *:80>

        SuExecUserGroup slintes slintes

        ServerName bla.de

        ServerAdmin webmaster@bla.de

        DocumentRoot /var/www/docs/test

        AddHandler fcgid-script .php

        <Directory /var/www/docs/test>
                FCGIWrapper /var/www/conf/test/php-fcgi-test .php
                Options +ExecCGI -Indexes FollowSymLinks MultiViews
                AllowOverride Options
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog /var/www/docs/test/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel debug

        CustomLog /var/www/docs/test/access.log combined

        ServerSignature On

</VirtualHost>
/var/www/conf/test/php-fcgi-test:

Code: Alles auswählen

#!/bin/sh
PHPRC="/etc/php5/cgi/php.ini"
export PHPRC
PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN
exec /usr/bin/php5-cgi
Verzeichnisstruktur:

Code: Alles auswählen

Debian-40-etch-32-minimal:/var/www# ls -lR
.:
total 8
drwxr-xr-x 3 root     root     4096 2007-05-07 21:43 conf
drwxr-xr-x 3 www-data www-data 4096 2007-05-07 21:42 docs

./conf:
total 4
drwxr-xr-x 2 slintes slintes 4096 2007-05-07 22:26 test

./conf/test:
total 4
-rwxr-xr-x 1 slintes slintes 121 2007-05-07 20:44 php-fcgi-test

./docs:
total 4
drwxr-x--- 2 slintes www-data 4096 2007-05-07 21:57 test

./docs/test:
total 16
-rwxr-x--- 1 slintes www-data 7833 2007-05-07 22:12 access.log
-rwxr-x--- 1 slintes www-data 2292 2007-05-07 22:12 error.log
-rwxr-x--- 1 slintes www-data   20 2007-05-07 20:43 test.php
aktivierte mods:

Code: Alles auswählen

Debian-40-etch-32-minimal:/etc/apache2/mods-enabled# ls
alias.load       authz_default.load    authz_user.load  cgid.load  env.load    mime.load         status.load
auth_basic.load  authz_groupfile.load  autoindex.load   dir.conf   fcgid.conf  negotiation.load  suexec.load
authn_file.load  authz_host.load       cgid.conf        dir.load   fcgid.load  setenvif.load
Jemand ne Idee? Danke im Vorraus :-)

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 08.05.2007 00:31:39

Hmm, sehr merkwürdig, das sieht eigentich von den Rechten her alles sehr gut aus!

Was mir auffällt:

Code: Alles auswählen

SuExecUserGroup slintes slintes 
ist glaube ich nicht ganz rictig, sollte so sein:

Code: Alles auswählen

SuexecUserGroup slintes slintes 
Und

Code: Alles auswählen

AddHandler fcgid-script .php 
setz mal in die erste Zeile von deinem Directory im vHost.

marc76
Beiträge: 8
Registriert: 07.05.2007 22:08:13

Beitrag von marc76 » 08.05.2007 09:27:26

Hallo Kase,

danke für die Tipps, hat aber leider nicht geholfen, das Ergebnis ist das gleiche: 403 Forbidden, nichts neues im error.log, und suexec.log weiter leer. Mein vhost sieht jetzt so aus:

Code: Alles auswählen

<VirtualHost *:80>                                                              
                                                                                
        SuexecUserGroup slintes slintes                                         
                                                                                
        ServerName xyz.de                                              
                                                                                
        ServerAdmin webmaster@xyz.de
                                                                                
        DocumentRoot /var/www/docs/test                                         
                                                                                
        <Directory /var/www/docs/test>                                          
                AddHandler fcgid-script .php                                    
                FCGIWrapper /var/www/conf/test/php-fcgi-test .php               
                Options +ExecCGI -Indexes FollowSymLinks MultiViews             
                AllowOverride Options                                           
                Order allow,deny                                                
                allow from all                                                  
        </Directory>                                                            
                                                                                
        ErrorLog /var/www/docs/test/error.log                                   
                                                                                
        # Possible values include: debug, info, notice, warn, error, crit,      
        # alert, emerg.                                                         
        LogLevel debug

        CustomLog /var/www/docs/test/access.log combined                        
                                                                                
        ServerSignature On                                                      
                                                                                
</VirtualHost>
Apache wurde nach Änderung neu gestartet...

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 08.05.2007 13:15:02

Hast du auf die access.log und die error.log Zugriff per HTTP?

Also anstatt einem http://www.domain.de/test.php ein http://www.domain.de/access.log

Wird dir die Datei angezeigt, oder bekommst du auch bei der access.log/error.log einen 403? Wieso hast du denn die Log-Files überhaupt ins DocumentRoot gelegt?

Auf jeden Fall sieht es stark danach aus, als könne der Apache die test.php wegen fehlender Rechte nicht öffnen. Läuft denn dein Apache auch als www-data? (deswegen auch keine Einträge im suexec.log)

Ansonsten, kommentier mal die Addhandler und FCGIWrapper Zeile aus (mit #) und schaue dann, ob er die test.php zum Download anbietet, oder ob dann immer noch ein 403 kommt.

marc76
Beiträge: 8
Registriert: 07.05.2007 22:08:13

Beitrag von marc76 » 08.05.2007 14:05:45

Hast du auf die access.log und die error.log Zugriff per HTTP?

Also anstatt einem http://www.domain.de/test.php ein http://www.domain.de/access.log

Wird dir die Datei angezeigt, oder bekommst du auch bei der access.log/error.log einen 403? Wieso hast du denn die Log-Files überhaupt ins DocumentRoot gelegt?
Die Dateien werden angezeigt. Die sind beim ganzen hin- und herprobieren irgendwann im DocumentRoot gelandet, hab die auch normalerweise außerhalb in einem extra Verzeichnis.
Auf jeden Fall sieht es stark danach aus, als könne der Apache die test.php wegen fehlender Rechte nicht öffnen. Läuft denn dein Apache auch als www-data? (deswegen auch keine Einträge im suexec.log)
Ja, läuft als www-data:

Code: Alles auswählen

# ps -ef | grep apache                                      
root     30273     1  0 13:54 ?        00:00:00 /usr/sbin/apache2 -k start      
www-data 30278 30273  0 13:54 ?        00:00:00 /usr/sbin/apache2 -k start      
www-data 30279 30273  0 13:54 ?        00:00:00 /usr/sbin/apache2 -k start      
www-data 30280 30273  0 13:54 ?        00:00:00 /usr/sbin/apache2 -k start      
www-data 30282 30273  0 13:54 ?        00:00:00 /usr/sbin/apache2 -k start      
root     30362 30205  0 13:56 pts/2    00:00:00 grep apache
Ansonsten, kommentier mal die Addhandler und FCGIWrapper Zeile aus (mit #) und schaue dann, ob er die test.php zum Download anbietet, oder ob dann immer noch ein 403 kommt.
Wird jetzt zum download angeboten.

Sehr seltsam irgendwie alles...?

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 08.05.2007 15:01:01

Hmm, bin mir inzwischen auch unsicher, woran es liegt.

Welche mod_fcgid Version?

Mach mal das Verzeichnis test und die test.php chmod 755 anstatt 750, obwohl es daran eigentlich nicht liegen sollte, und dies auch keine Lösung für den stable Betrieb ist, da die Files nicht readable bei others sein sollten. Nur zum Testen.

Ansonsten, welche Rechte hat das Verzechnis /var/www?

Außerdem ändere mal die PHPRC Zeile im FCGI-Starter von

Code: Alles auswählen

PHPRC="/etc/php5/cgi/php.ini" 
nach

Code: Alles auswählen

PHPRC=/etc/php5/cgi
Und dann noch bitte ein

Code: Alles auswählen

/usr/bin/php5-cgi -v

marc76
Beiträge: 8
Registriert: 07.05.2007 22:08:13

Beitrag von marc76 » 08.05.2007 19:01:52

Hmm, bin mir inzwischen auch unsicher, woran es liegt.
irgendwie beruhigend, daß ich nicht alleine aufm Schlauch stehe... :roll:
Welche mod_fcgid Version?
Ich habe alles aus den Debian Etch Paketen, ist also Version 1.10-2
Mach mal das Verzeichnis test und die test.php chmod 755 anstatt 750, obwohl es daran eigentlich nicht liegen sollte, und dies auch keine Lösung für den stable Betrieb ist, da die Files nicht readable bei others sein sollten. Nur zum Testen.
kein Unterschied...
Ansonsten, welche Rechte hat das Verzechnis /var/www?

Code: Alles auswählen

/var# ls -l
[...]
drwxr-x---  4 www-data www-data 4096 2007-05-07 21:42 www
Außerdem ändere mal die PHPRC Zeile im FCGI-Starter von
Code: PHPRC="/etc/php5/cgi/php.ini"
nach
Code: PHPRC=/etc/php5/cgi
ich mags ja gar nicht mehr sagen... kein unterschied...
Und dann noch bitte ein
Code: /usr/bin/php5-cgi -v

Code: Alles auswählen

# /usr/bin/php5-cgi -v
PHP 5.2.0-8+etch1 (cgi-fcgi) (built: Mar  7 2007 23:29:30)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies
Mir fällt gerade beim erneuten Durchlesen des Threads was auf: am Anfang ist die Rede davon, daß der vhost Benutzer eine UID > 100 haben muß. Gilt das auch für die Gruppe? Da benutze ich ja noch den www-data, der hat ne GID von 33... Ist das ein Problem? Falls ja, was muß ich alles ändern, damit dann alles läuft? Mir fällt da so sein:
  • neue Gruppe anlegen
  • alle Verzeichnisse in /var/www ändern, die noch www-data als Gruppe haben
  • in der Apache config den Benutzer auf die neue Gruppe ändern? Oder www-data einfach der neuen Gruppe hinzufügen?
  • in der SuexecUserGroup Direktive die neue Gruppe verwenden
edit: hab das mit der Gruppe einfach mal ausprobiert. Ergebnis ist das gleiche. "Normale" Dateien werden ausgeliefert, .php gibt 403 Forbidden, in den logs nichts hilfreiches. Was mich ja echt verwirrt, daß sogar für nich existierende Dateien 403 Forbidden kommt, solang man nur die Endung .php dranhängt...

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 08.05.2007 21:41:14

Total verrückte Idee:

Ändere mal die Addhandler und die FCGIWrapper Zeile jeweils in die Endung .php5 und nenn dann die test.php um nach test.php5 und dann gucken, ob schon wieder ein 403 kommt.

Edit: Das mit der Gruppe ist egal, das gilt nur für die PHP Scripte, und da hast du ja die Gruppe slintes, und die sollte über 100 sein.

marc76
Beiträge: 8
Registriert: 07.05.2007 22:08:13

Beitrag von marc76 » 08.05.2007 21:58:09

Idee kam leider (wenn es geholfen hätte) zu spät: habe den Server neu installiert, nur den Apache + php5-cgi installiert, minimale Konfiguration mit einer Testseite, und siehe da, es funktioniert :D
Hätte zwar gerne gewußt, warum es vorher nicht ging, aber ich wollte irgendwie weiterkommen... Trotzdem danke für die Hilfe!
Ich werd dann mal zusehen daß ich meine ganzen vhosts, mysql, mailserver etc. auf den Server bekomme, ohne es zu zerschießen :wink: Läuft zur Zeit noch alles auf nem anderen Server, ohne fcgi und suexec...

Gruß, Marc

marc76
Beiträge: 8
Registriert: 07.05.2007 22:08:13

Beitrag von marc76 » 09.05.2007 21:35:01

Hallo nochmal,

ich hab zur Abwechslung mal eine Lösung für ein hier noch nicht geschildertes Problem (oder ich hab es überlesen :wink: ):
Nachdem ich meine VHosts alle erfolgreich umgezogen habe, habe ich ab und an einen "500 Internal Server Error" bekommen, in den logs war ein "premature end of script headers". Die Lösung habe ich hier gefunden (letzter Abschnitt):
http://www.felix-schwarz.name/Secure_PH ... cgid)_(en)

Gruß, Marc

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 10.05.2007 08:52:26

Hallo,

wurde hier glaube ich noch nicht so direkt geschrieben.

Ich habe die Timeouts sogar noch ein ganzes Stück höher, Auszug aus meiner fcgid.conf:

Code: Alles auswählen

  # Lange IPCC Timeouts, damit es unter Last keine 500er gibt.
  IPCConnectTimeout 60
  IPCCommTimeout 120

mulix
Beiträge: 2
Registriert: 30.04.2007 09:56:31

Beitrag von mulix » 14.05.2007 17:26:55

Hi Leute...

ich komme mit der verbindung apach2 + php5-cgi + libapach2-mod-fcgid auch nicht wirklich weiter. Ich so einiges aus diesem beitrag abzuleiten aber ich bekomme immer ein error 500 vom apache zurück. Auch die suexec log sagt mir das hier was mit den rechten nicht stimmt ... target uid/gid mismatch with directory...

zur erklärung: www-data ist der apache user bzw. seine gruppe und mschumann ist der vhost user bzw. seine gruppe

die softwareversionen sind debian stable (etch) alles per apt-get install

hier meine conf´s und log´s

vhost

Code: Alles auswählen

<VirtualHost 192.168.3.150:80>
   SuExecUserGroup mschumann mschumann
   ServerName webtest.local.fab9.net
   DocumentRoot /var/www/webtest.local.fab9.net/
   AddHandler fcgid-script .php
      <Directory /var/www/webtest.local.fab9.net>
         FCGIWrapper /var/www/php-fcgi-scripts/php-fcgi-webtest.local.fab9.net .php
         Options FollowSymLinks MultiViews +ExecCGI
         AllowOverride None
         Order allow,deny
         allow from all
      </Directory>
   ErrorLog /var/log/apache2/error.log
   LogLevel warn
   CustomLog /var/log/apache2/access.log combined
   ServerSignature Off
</VirtualHost>
php-fcgi-htdocs

Code: Alles auswählen

#!/bin/sh
PHPRC="/etc/php5/cgi/php.ini"
export PHPRC
PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN
exec /usr/bin/php5-cgi
php-fcgi-webtest.local.fab9.net

Code: Alles auswählen

#!/bin/sh
PHPRC="/etc/php5/cgi/php.ini"
export PHPRC
PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN
exec /usr/bin/php5-cgi
fcgid.conf

Code: Alles auswählen

<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  SocketPath /var/lib/apache2/fcgid/sock
  IPCConnectTimeout 20
</IfModule>
verzeichnisse (ich denke hier ist der hase begraben)

Code: Alles auswählen

/var:
drwxrwxrwx 2 www-data  www-data 4096 2007-05-13 22:29 www

/var/www:
drwxr-xr-x 2 www-data  www-data 4096 2007-05-13 22:29 php-fcgi-scripts
drwxr-x--- 2 mschumann www-data 4096 2007-05-13 22:14 webtest.local.fab9.net

/var/www/php-fcgi-scripts:
-rw-r--r-- 1 www-data  www-data 126 2007-05-13 22:29 php-fcgi-htdocs
-rw-r--r-- 1 mschumann www-data 126 2007-05-13 15:27 php-fcgi-webtest.local.fab9.net

/var/www/webtest.local.fab9.net:
-rwxr----- 1 mschumann www-data 30 2007-05-13 15:42 index.php
-rwxr----- 1 mschumann www-data 16 2007-05-13 22:14 test.html
suexec.log

Code: Alles auswählen

[2007-05-14 17:59:42]: uid: (1000/mschumann) gid: (1000/1000) cmd: php-fcgi-webtest.local.fab9.net
[2007-05-14 17:59:42]: target uid/gid (1000/1000) mismatch with directory (33/33) or program (1000/33)
so long.. mulix

marc76
Beiträge: 8
Registriert: 07.05.2007 22:08:13

Beitrag von marc76 » 14.05.2007 17:56:18

mulix hat geschrieben:
/var/www/php-fcgi-scripts:
-rw-r--r-- 1 www-data www-data 126 2007-05-13 22:29 php-fcgi-htdocs
-rw-r--r-- 1 mschumann www-data 126 2007-05-13 15:27 php-fcgi-webtest.local.fab9.net
Das php-fcgi-webtest.local.fab9.net script muß glaube ich auch der Gruppe mschumann gehören und ausführbar sein. Falls das nicht reicht, erstelle unter /var/www/php-fcgi-scripts auch ein Unterverzeichnis, welches mschumann gehört (User + Gruppe), und verschiebe das Script dahin. Dementsprechend den Pfad dann im Virtual Host anpassen.
Viel Glück!

Kase
Beiträge: 124
Registriert: 24.01.2005 22:15:40

Beitrag von Kase » 14.05.2007 18:50:56

Das Unterverzeichnis wird benötigt!

Code: Alles auswählen

chown root:root /var/www/php-fcgi-scripts
mkdir /var/www/php-fcgi-scripts/mschumann
chown mschumann:mschumann /var/www/php-fcgi-scripts/mschumann
chmod 755 /var/www/php-fcgi-scripts/mschumann
mv /var/www/php-fcgi-scripts/webtest.local.fab9.net /var/www/php-fcgi-scripts/mschumann/
chown mschumann:mschumann /var/www/php-fcgi-scripts/mschumann/webtest.local.fab9.net
chmod 755 /var/www/php-fcgi-scripts/mschumann/webtest.local.fab9.net

mulix
Beiträge: 2
Registriert: 30.04.2007 09:56:31

Beitrag von mulix » 14.05.2007 18:53:18

Hi marc76

WOW :D es lebt.... dank dir.

danke auch an kase für die richtigstellung der chmod´s, ich schrieb noch da hattest du schon dein post draussen - muss ich noch umsetzen

ich musste nur unter /var/www/php-fcgi-scripts ein verzeichniss erstellen mit rechten des vhost-users, dan die php-fcgi datei dorthin kopieren (apache vhost anpassen) und es lief. cool

also so schaut das jetzte aus

Code: Alles auswählen

/var: 
drwxrwxrwx 2 www-data  www-data 4096 2007-05-13 22:29 www 

/var/www: 
drwxr-xr-x 2 www-data  www-data 4096 2007-05-13 22:29 php-fcgi-scripts 
drwxr-x--- 2 mschumann www-data 4096 2007-05-13 22:14 webtest.local.fab9.net 

/var/www/php-fcgi-scripts: 
-rw-r--r-- 1 www-data  www-data 126 2007-05-13 22:29 php-fcgi-htdocs 
drwxr-x-r-x 2 mschumann mschumann 4096 2007-05-13 22:14 webtest.local.fab9.net

/var/www/php-fcgi-scripts/webtest.local.fab9.net:: 
-rwxr-xr-x 1 mschumann mschumann 126 2007-05-13 15:27 php-fcgi-webtest.local.fab9.net 

/var/www/webtest.local.fab9.net: 
-rwxr----- 1 mschumann www-data 30 2007-05-13 15:42 index.php 
-rwxr----- 1 mschumann www-data 16 2007-05-13 22:14 test.html
im großen und ganzen sollte es das sein... evtl. noch ein paar rechte anpassen - muss man sich durch den kopf gehen lassen

so long... mulix

rootsvr
Beiträge: 2
Registriert: 27.06.2007 21:34:21

Beitrag von rootsvr » 27.06.2007 22:40:27

Ich hab irgendwie ein Brett vorm Kopf:
Ich habe (dachte ich) die richtigen Sachen eingebaut, aber nur Probleme.. die html Dateien gehen noch, php geht auf einer Domain.. auf der https domain (anderer Content) nicht..

geht:

Code: Alles auswählen

<VirtualHost *>
        ServerAdmin xyz@test.biz
        ServerName testserver.test.biz
        ServerAlias www.testserver.test.biz
        DocumentRoot /var/www/test.biz/docs
        SuExecUserGroup test_biz test_biz

       <Directory />
            Options -All +FollowSymLinks
            AllowOverride None
       </Directory>
        <Directory /var/www/test.biz/>
           Options -All +FollowSymlinks +ExecCGI
           AllowOverride AuthConfig
           Order allow,deny
           allow from all
           # FCGID-PHP-Teil
           FCGIWrapper /var/www/php-fcgi-scripts/test.biz/php-fcgi-starter .php
           AddHandler fcgid-script .php
        </Directory>
        ErrorLog  /var/www/test.biz/logs/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/www/test.biz/logs/access.log combined
        ServerSignature On

</VirtualHost>

Geht nicht:

Code: Alles auswählen

<VirtualHost IP.IP.IP.IP:443>
  ServerName testserver.test.biz
  DocumentRoot /var/www/https_test.biz/docs
  ServerAdmin xyz@test.biz
  SuExecUserGroup https_test_biz https_test_biz
  # SSL
  SSLCertificateFile    /etc/httpd/ssl/serverbiz.crt
  SSLCertificateKeyFile /etc/httpd/ssl/serverbiz.key
  SSLEngine On
  SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:
  SetEnvIf User-Agent ".*MSIE.*" \
  nokeepalive ssl-unclean-shutdown \
  downgrade-1.0 force-response-1.0


<Directory />
       Options -All +FollowSymLinks
         AllowOverride None
       </Directory>
<Directory /var/www/https_test.biz>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    # FCGID-PHP-Teil
     FCGIWrapper /var/www/php-fcgi-scripts/https_test.biz/php-fcgi-starter .php
     AddHandler fcgid-script .php
</Directory>

  ErrorLog  /var/www/https_test.biz/logs/error.log
  # Possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn
  CustomLog /var/www/https_test.biz/logs/access.log combined
</VirtualHost>
html Dateien gehen im https vhost
php nicht..
rufe ich eine Datein auf kommt

Code: Alles auswählen

Forbidden

You don't have permission to access /app_1/index.php on this server.
Im log:
[Wed Jun 27 22:37:18 2007] [error] [client IS.MY.OWN.IP] Attempt to serve directory: /var/www/https_test.biz/docs/

Suexec.log ist leer...

SeeDyX
Beiträge: 19
Registriert: 08.12.2004 12:47:43

Beitrag von SeeDyX » 27.06.2007 23:03:57

Beim schnellen drüberschauen würd ich sagen dir fehlt im ssl-vhost die ExecCgi option.....

nebenbei: "Options -All +FollowSymlinks +ExecCGI" ist identisch zu "Options FollowSymlinks ExecCGI" und letzteres finde ich einfacher lesbar ;) (siehe auch http://buecher.lingoworld.de/apache2/showdir.php?id=632 )
Gruß,
SeeDyX

rootsvr
Beiträge: 2
Registriert: 27.06.2007 21:34:21

Beitrag von rootsvr » 27.06.2007 23:12:34

Du bist mein Held.. wie gesagt Brett vor Kopf!

Danke!

floogy
Beiträge: 125
Registriert: 19.04.2006 22:43:15

Beitrag von floogy » 24.10.2007 18:01:25

Hallo,

Ich hoffe Ihr könnt helfen das zu klären, ich nutze mod_fastcgi und suexec, in der vHost steht

Code: Alles auswählen

   <VirtualHost 172.16.240.1:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/gallery2

        ServerName www.mygallery2.home
        ServerAlias www.mygallery2.home
        
        DirectoryIndex index.php index.html index.htm
        SuexecUserGroup www-fcgi www-fcgi

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/gallery2>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
                <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews -Indexes +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>


        ErrorLog /var/log/apache2/www.mygallery2.home-error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/www.mygallery2.home-access.log combined
        ServerSignature On

</VirtualHost>


Sowohl mit Symlinks, oder als DocRoot im vHost erhalte ich folgende Fehler:

Code: Alles auswählen

SoftException in Application.cpp:199: Script "/usr/share/gallery2/index.php" resolving to "/usr/share/gallery2/index.php" not within configured docroot

Code: Alles auswählen

[Wed Oct 24 17:50:49 2007] [error] [client 172.16.240.1] SoftException in Application.cpp:199: Script "/var/www/gallery2/index.php" resolving to "/usr/share/gallery2/index.php" not within configured docroot
Wenn man sich mal dpkg -L gallery2 ansieht, ist leicht zu erkennen, dass es nicht unter /var/www installiert wird.
Das selbe gilt ja leider für phpadmin.
Wie kann man das lösen, ohne auf das debian-Paketsystem zu verzichten?



--with-suexec-docroot ist /var/www

Code: Alles auswählen

$ sudo /usr/lib/apache2/suexec2 -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="www-data"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=100
 -D AP_USERDIR_SUFFIX="public_html"

Antworten