[HowTo] PHP4/PHP5 als CGI - gepatcht (deutsches HowTo)

  • Thread starter Thread starter server4downs
  • Start date Start date
Ich habe jetzt auch von Suse 10 auf Suse 9.3 gewechselt, werde wen ich gleich die HP´s usw wieder laufen habe mich mal drann setzen, und Poste Euch wie es funktioniert hat
 
Tutorial Zum Einbinden + Suexec Fixx!!!

Hi Leute,

ich habe seit Tagen mitgelesen hier und habe es auf einem 'Spiel-Root' von mir versucht und hatte den selben Misserfolg wie ihr.

BITTE ZUERST _GANZ_ DURCHLESEN!
Ich gehe davon aus, dass man sich mit der Materie auskennt und nicht erst erklärt bekommen muss, wie man mit PuTTY umgeht und was das überhaupt ist ;)
Also das Tutorial richtet sich an FORTGESCHRITTENE Linux Administratoren.



Zuerst den bekannten Fehler mit der 500er:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator to inform of the time the error occurred and of anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Und in dem error_log:
(DATUM + IP geändert, da rekonstruiert)
[DATUM] [warn] Cannot get media type from 'php5-cgi'
[DATUM] [warn] Cannot get media type from 'php5-cgi'
[DATUM] [warn] Cannot get media type from 'php5-cgi'
[DATUM] [error] [client IP] failed to open log file
[DATUM] [error] [client IP] fopen: No such file or directory
[DATUM] [error] [client IP] Premature end of script headers: php

Dann an der vhost.conf rumgeschraubt und es kam zum bekannten Fehler, dass einem das File zum DL angeboten wurde.

Also wieder zurückgeändert und es blieb beim 500er.
In der suexec.log stand dann:
(DATUM + user geändert, da rekonstruiert)
[DATUM]: uid: (10001/user) gid: (10001/10001) cmd: php
[DATUM]: command not in docroot (/usr/bin/php5/php)

Also ging es nicht mehr anders und ich musste suexec neucompilieren.
Dies habe ich nach der Anleitung von server4downs gemacht:
Wobei der erste Schritt (suexec -V bzw. suexec2 -V nicht ging, da ich keine Ausgabe von suexec bekommen habe (bei mir war es suexec2).
Der Grund:
SWsoft möchte seine Pfade nicht bekanntgeben und hat vor dem compilieren die Funktion ausgebaut.

Schritt 6 des Tutorials habe ich dann wie folgt angepasst:
#ifndef AP_DOC_ROOT
#define AP_DOC_ROOT "/usr/bin/php5"
#endif

Außerdem sollte man darauf achten, dass man die Zeile des LogFiles anpasst, damit man nachher die Logs betrachten kann.
Bei mir sah sie dann so aus:
#define AP_LOG_EXEC "/var/log/apache2/suexec.log" /* Need me? */
.

So jetzt dachte ich mir alles supi, ich habe ein neucompiliertes suexec und jetzt habe ich meinen Spass mit PHP5 als CGI.
->Pustekuchen!
Der docroot-Fehler war ja umgangen aber es kam zum nächsten, welcher sich als graviernd rausstellte.
In meiner suexec.log stand nun:
(DATUM + user geändert, da rekonstruiert)
[DATUM]: uid: (10001/user) gid: (10001/10001) cmd: php
[DATUM]: target uid/gid (10001/10001) mismatch with directory (0/0) or program (0/0)

Ich erkläre euch die Fehlermeldung kurz:
suexec möchte, dass das Script ('program') als 10001/10001 ausgeführt wird und der Ordner in dem es sich befindet auch 10001/10001 gehört.
Bei meinem System war 10001 der User user
und 10001 die Gruppe 'psacln'.
Die Datei und das Directory gehörten auch 10001/10001 doch egal was man machte suexec nahm es nicht an und behauptet steif und fest, dass es 0/0 gehörte. (0/0 bedeutet dem User root und der Gruppe root).
Bis ich dann herrausgefunden habe, dass suexec es auf einen anderen Ordner angewandt hat (was IMHO keinen Sinn macht - aber tut ja nix zur Sache).
Denn suexec wollte gerne, dass der Ordner
/var/www/vhosts/domain.tld/httpdocs
10001/10001 gehört.
Dies ist jedoch nicht möglich, da das httpdocs Verzeichnis dem User 'psaserv' gehören muss.
Andernfalls bekommt man beim Zugriff auf die HP nur noch einen 403 - Forbidden und KEINE! Datei ist dieser Domain ist mehr über das HTTP Protokoll erreichbar.
Wie man die Sache nun auch dreht und wendet, es gibt KEINE Lösung, dass suexec denkt, es würde 'psacln' gehören und PLESK es erlaubt, dass es nichtmehr 'psaserv' gehört.
Ich habe auch schon den suexec User geändert in der CFG und wirklich sogut wie ALLES Mögliche gemacht doch es gibt schier keinen Ausweg.
Also dachte ich mir, wenn suexec es nicht akzeptiert, dann darf es eben nicht wissen.
Also habe ich es erneut recompiliert und diesmal auch in der suexec.c etwas geändert.
Öffnet also die Datei suexec.c (in der Source, die auch schon weiter oben in dem Tutorial angesprochen wurde) mit einem beliebigen Editor.
Findet den Block:
/*
* Error out if the target name/group is different from
* the name/group of the cwd or the program.
*/
if ((uid != dir_info.st_uid) ||
(gid != dir_info.st_gid) ||
(uid != prg_info.st_uid) ||
(gid != prg_info.st_gid)) {
log_err("target uid/gid (%ld/%ld) mismatch "
"with directory (%ld/%ld) or program (%ld/%ld)\n",
uid, gid,
dir_info.st_uid, dir_info.st_gid,
prg_info.st_uid, prg_info.st_gid);
exit(120);
}
/*
* Error out if the program is not executable for the user.

in:

/*
* Error out if the target name/group is different from
* the name/group of the cwd or the program.
*/
/* suexec ist doof und darf nicht wissen wem das File und der Ordner gehört
if ((uid != dir_info.st_uid) ||
(gid != dir_info.st_gid) ||


(uid != prg_info.st_uid) ||
(gid != prg_info.st_gid)) {
log_err("target uid/gid (%ld/%ld) mismatch "
"with directory (%ld/%ld) or program (%ld/%ld)\n",
uid, gid,
dir_info.st_uid, dir_info.st_gid,
prg_info.st_uid, prg_info.st_gid);
exit(120);
}
*/
/*
* Error out if the program is not executable for the user.

Jetzt wird suexec wahrscheinlich meckern, wenn ihr es neucompilieren wollt mir:
make suexec
Deswegen zuerst
make clean
ausführen!
Danach folgendes machen:
cp suexec /usr/sbin/suexec2
chmod 4755 /usr/sbin/suexec2
(Den restart des Apaches könnt ihr euch sparen, da suexec jedesmal neugestartet wird, wenn es aufgerufen wird.

Zusätzlich vielleicht ganz praktisch für euch meine vhost.conf:
<Directory "/usr/bin/php5">
AllowOverride None
Options +ExecCGI +FollowSymLinks
Order allow,deny
Allow from all
</Directory>
ScriptAlias /php5-cgi /usr/bin/php5
Action application/php5-cgi /php5-cgi/php
AddType application/php5-cgi .php5

Jetzt solltet ihr einen Luftsprung machen und euch freuen, dass jmd die Lösung gefunden hat ;)

Es ist selbstverständlich nicht nötig die Kompilation in 2 Schritten zu machen!
Ich habe es nur so geschildert, damit man den Kompletten Weg nachvollziehen kann!

Für die komplette Herausarbeitung dieser Lösung inklusive allem Hinterwissen zu suexec (ich hatte vorher noch nix damit zu tun) habe ich ca. 2 1/2 Tage(Nächte) gebräucht.
Ich hoffe, dass es geschätzt wird, dass ich mir sehr viel Arbeit gemacht habe und auch in diesem Tutorial (wie ich finde) sehr ausführlich beschrieben habe, wie man es nun in den Apache einbindet und suexec einem dabei nicht in die Quere kommt.


Dieser Lösungsschritt konnte von mir auf folgenden Systemen nachvollzogen werden:

SUSE Linux 9.3 mit PLESK 8.0.1
&&
SUSE Linux 9.3 mit PLESK 7.5.4
Die Apache Version sollte irrelevant sein!

Lieben Gruß
Freel@ncer14

© 2006 by Freel@ncer14
Ich kann nicht verhindern, dass dieses Tutorial ohne mein Einverständnis weiterverbreitet und kopiert wird, aber ich hoffe, dass man schon beim Lesen merkt wieviel Arbeit dahinter steckt und soviel Anstand hat und es nicht 'klaut'!
 
Hi Freelancer ersteinmal Super Arbeit von Dir...aber leider habe ich dennoch ein Problem

cp suexec /usr/sbin/suexec2 <-- wenn ich das zum schluss eingebe erscheint
h913875:~/httpd-2.0.53 # cp suexec /usr/sbin/suexec2
cp: cannot stat `suexec': No such file or directory
h913875:~/httpd-2.0.53 #

habe nachgeschaut, der Pfad stimmt .....

und Php5 datein werden immer noch runter geladen....

ich habe mal meine httpd.conf, suexec.c und suexec.h datei angehangen, obwol ich denke das da Kein Fehler ist wäre es nett von Dir wenn Du da mal drüber schauen könntest.

ps: Mein System ( seit neuesten ) Suse 9.3 # ServerAdmin24
 

Attachments

FREELANCER DU BIST EINFACH NUR SUPER!

Nach anfänglichen Problemen hab ich es jetzt nach deiner Art und Weise hinbekommen!

Aber mal ne Frage, wenn man damit quasi eine Funktion von Suexec "ausbaut" macht Suexec dann nicht weniger Sinn? Ist das System jetzt weniger sicher?

Und meine große Frage bleibt, warum gibt es das ganze Netz voll mit Anleitungen wie man eine zweite PHP Version als CGI laufen lässt, aber selten bis fast nie wird das Problem mit der Suexec gelöst. Sollte es die nicht eigentlich immer geben? Oder gibt es ALternativen zu Suexec die die gleiche Arbeit verrichten aber nicht so rumzicken beim PHPCGI Problem? Sowas wie suPHP`?
 
Danke sehr ;)

Also inwiefern es damit jetzt 'unsicher' wurde kann ich nicht 100% beurteilen,
aber ich gehe davon aus, dass der Admin eines Servers wissen sollte, welche Files und Ordner welche Rechte haben, und dies kann der User per FTP sowieso nicht ändern.
Deshalb würde ich es als unbedeutend einstufen, aber ein paar unserer Spezis hier können sich ja gerne mal dazu äußern.
Es gibt noch suPHP, damit habe ich allerdings noch nicht gearbeitet.
Mich würde interessieren, was deine
anfänglichen Problemen
waren, damit ich das Tutorial dahin gehend noch mehr verfeinern kann.
Nur ich weiß nicht ob es überhaupt eine andere Möglichkeit gibt, wenn suexec denkt es geht 0/0 was ja faktisch falsch ist. Man den die group aber nicht ändern darf, da sonst die Page nicht mehr geht, da PLESK 'psaserv' erwartet.
Deswegen bin ich mit dieser Lösung schon ganz zufrieden und hoffe mal, dass ich nicht nur mir helfen konnte ;).

Lg
Free
 
Bitte Schön

h913875:~ # ls -la ~/httpd-2.0.53/support/
total 456
drwxr-xr-x 4 501 cdrom 4096 Aug 20 00:44 .
drwxr-xr-x 11 501 cdrom 4096 Aug 20 00:44 ..
-rw-r--r-- 1 root root 0 Aug 20 00:44 .deps
-rw-r--r-- 1 501 cdrom 701 Nov 24 2004 .indent.pro
-rw-r--r-- 1 root root 2248 Aug 20 00:44 Makefile
-rw-r--r-- 1 501 cdrom 2054 Nov 24 2004 Makefile.in
-rw-r--r-- 1 501 cdrom 4502 Nov 24 2004 NWGNUab
-rw-r--r-- 1 501 cdrom 4489 Nov 24 2004 NWGNUhtdbm
-rw-r--r-- 1 501 cdrom 4503 Nov 24 2004 NWGNUhtdigest
-rw-r--r-- 1 501 cdrom 4508 Nov 24 2004 NWGNUhtpasswd
-rw-r--r-- 1 501 cdrom 4511 Nov 24 2004 NWGNUlogres
-rw-r--r-- 1 501 cdrom 4195 Nov 24 2004 NWGNUmakefile
-rw-r--r-- 1 501 cdrom 4458 Nov 24 2004 NWGNUrotlogs
-rw-r--r-- 1 501 cdrom 1755 Nov 24 2004 README
drwxr-xr-x 2 501 cdrom 4096 Feb 7 2005 SHA1
-rw-r--r-- 1 501 cdrom 65646 Feb 4 2005 ab.c
-rw-r--r-- 1 501 cdrom 4093 Nov 24 2004 ab.dsp
-rw-r--r-- 1 501 cdrom 4957 Nov 24 2004 abs.dsp
-rw-r--r-- 1 root root 3126 Aug 20 00:44 apachectl
-rw-r--r-- 1 501 cdrom 3099 Feb 4 2005 apachectl.in
-rw-r--r-- 1 root root 22789 Aug 20 00:44 apxs
-rw-r--r-- 1 501 cdrom 22782 Feb 4 2005 apxs.in
-rwxr-xr-x 1 501 cdrom 466 Nov 24 2004 check_forensic
-rw-r--r-- 1 501 cdrom 2791 Feb 4 2005 checkgid.c
-rw-r--r-- 1 501 cdrom 3333 Nov 24 2004 config.m4
-rw-r--r-- 1 root root 8729 Aug 20 00:44 dbmmanage
-rw-r--r-- 1 501 cdrom 8725 Feb 4 2005 dbmmanage.in
-rw-r--r-- 1 root root 831 Aug 20 00:44 envvars-std
-rw-r--r-- 1 501 cdrom 839 Feb 4 2005 envvars-std.in
-rw-r--r-- 1 501 cdrom 17100 Feb 4 2005 htdbm.c
-rw-r--r-- 1 501 cdrom 4120 Nov 24 2004 htdbm.dsp
-rw-r--r-- 1 501 cdrom 7771 Feb 4 2005 htdigest.c
-rw-r--r-- 1 501 cdrom 4195 Nov 24 2004 htdigest.dsp
-rw-r--r-- 1 501 cdrom 18693 Feb 4 2005 htpasswd.c
-rw-r--r-- 1 501 cdrom 4195 Nov 24 2004 htpasswd.dsp
-rwxr-xr-x 1 501 cdrom 2888 Nov 24 2004 list_hooks.pl
-rw-r--r-- 1 root root 2447 Aug 20 00:44 log_server_status
-rw-r--r-- 1 501 cdrom 2443 Feb 4 2005 log_server_status.in
-rw-r--r-- 1 501 cdrom 10040 Feb 4 2005 logresolve.c
-rw-r--r-- 1 501 cdrom 4245 Nov 24 2004 logresolve.dsp
-rw-r--r-- 1 root root 6736 Aug 20 00:44 logresolve.pl
-rw-r--r-- 1 501 cdrom 6732 Feb 4 2005 logresolve.pl.in
-rw-r--r-- 1 root root 1419 Aug 20 00:44 phf_abuse_log.cgi
-rw-r--r-- 1 501 cdrom 1415 Feb 4 2005 phf_abuse_log.cgi.in
-rw-r--r-- 1 501 cdrom 8338 Feb 4 2005 rotatelogs.c
-rw-r--r-- 1 501 cdrom 4245 Nov 24 2004 rotatelogs.dsp
-rw-r--r-- 1 root root 2243 Aug 20 00:44 split-logfile
-rw-r--r-- 1 501 cdrom 2239 Feb 4 2005 split-logfile.in
-rw-r--r-- 1 501 cdrom 17429 Aug 20 00:51 suexec.c
-rw-r--r-- 1 501 cdrom 3563 Aug 20 00:49 suexec.h
-rw-r--r-- 1 501 cdrom 37 Nov 24 2004 utilitiesnw.def
drwxr-xr-x 2 501 cdrom 4096 Feb 7 2005 win32
h913875:~ #
 
Wäre ich eine Frau, würde ich Dich jetzt knutschen :D :D :D :D ;)

mein fehler war, ich hatte Immer die datein im Support Ordner bearbeitet bin dann aber wieder im Hauptordner rein, und habe da, das make gemacht :-(


ES GEHT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

DANK DIR

hier der beweis ^^ : PHP5-Info
 
Sehr schön!

Das freut mich, wenn ich dir helfen konnte!

Hoffe du hast Spaß mit dem MOD und das einbinden ist ja wirklich mehr als easy.
Musst ja nur die vhost.conf des Kunden editieren ;)!

Lg
Free
 
Danke Freel@ncer.
Ich hatte vergessen das Editieren der suexec.c zu erwähnen.
Die 2,5 Tage Arbeit hättest du dir sparen können, wenn du mal bei debianhowto.de vorbeigeschaut hättest. Dort wird das schon beschrieben.
Trotzdem aber gut es hier nochmals zu haben.
Kann ich ja eventuell mal in das suexec Howto übernehmen.
 
Last edited by a moderator:
Hi server4downs,

naja macht ja nix,
was man sich selbst erarbeitet verstehst man am besten ;)!
Ich dachte mir ich schreibe es hier mal ausführlich auf, damit sich User, die das TUT durchlesen nicht mehr soviel Mühe machen müssen.

Lg
Freel@ncer14

PS:
(mit 'c' *gG*)
 
Also egal was ich mache, ich bei mir ist alles irgendwie anders:

Wenn ich
ScriptAlias /home/zum/vhost/html /usr/bin/php5
eintrage, steht im Logfile dass die angeforderte Datei /usr/bin/php5/index.php nicht existiert.

Schreibe ich
ScriptAlias /usr/bin/php5 /home/zum/vhost/html
in die httpd.conf steht im error.log, dass die Datei unter /home/zum/vhost/html/home nicht existiert.

Also:
Code:
ScriptAlias /usr/bin/php5 /home/zum/vhost/html
Action application/php5-cgi /home/zum/vhost/html
AddType application/php5-cgi .php

führt im error.log zum
.... File does not exist: /home/zum/vhost/html/home

Ein
Code:
ScriptAloas /home/zum/vhost/html /usr/bin/php5
Action application/php5-cgi /home/zum/vhost/html
AddType application/php5-cgi .php

führt im error.log zum
... File does not exist: /usr/bin/php5/home

Das
Code:
<Directory "/usr/bin/php5">
AllowOverride None
Options +ExecCGI +FollowSymLinks
Order allow,deny
Allow from all
</Directory>
steht im httpd.conf vor den <VirtualHost ..> Einträgen

Die Script-Aliase etc. stehen in den einzelnen <VirtualHost> drin.
SuExec macht mir komischerweise überhaupt keine Probleme und errors. Suphp allerdings schon. Das Modul hab ich jetzt auskommentiert.

Hab das Ganze auf einem Strato-Root-Server wo php5 lediglich nur als CGI-Version neben mod_php4 installiert werden muss. Drauf ist u.a. auch Apache 2.0.53
 
Hi,

willkommen im SSF ich hoffe zuerst einmal, dass du dich schon mit unseren Boardregeln vertraut gemacht hast und diese einhalten wirst.
Desweiteren hoffe ich, dass du viel Hilfe hier kriegen wirst und evtl. auch anderen bei dem ein oder anderen Problem helfen kannst :o)

Zu deinem Problem:

Was mit als erstes auffällt:
ScriptAloas /home/zum/vhost/html /usr/bin/php5
Action application/php5-cgi /home/zum/vhost/html
AddType application/php5-cgi .php

Desweiteren:
/home/zum/vhost/html
Sprechen wir von Confixx?
Von PLESK?
Von einer anderen Admin Software?
Oder hast du es alles selbst eingerichtet?

Ein paar mehr Informationen zu deinem Server wären schonmal von Hilfe.

Lg
Free
 
Hallo,

manchmal wunder ich mich schon, wie sich mein HowTo über die Seiten verändert und am Schluss ganz verdreht rauskommt :D
Wie kommst du denn auf
ScriptAlias /usr/bin/php5 /home/zum/vhost/html
Action application/php5-cgi /home/zum/vhost/html
AddType application/php5-cgi .php
/home/zum/vhost/html finde ich hierbei am interessantesten...!?!

Begebe dich doch einfach mal auf Seite 1 und benutze
Code:
 <Directory "/usr/bin/php5">
AllowOverride None
Options +ExecCGI +FollowSymLinks
Order allow,deny
Allow from all
</Directory>
ScriptAlias /php5rocks /usr/bin/php5
Action php5-cgi /php5rocks/php
AddType php5-cgi .php5

Dies sind meiner Meinung nach "Basics" und sollten beherrscht werden, bevor man sich überhaupt ans Patchen von PHP macht ;)
 
Hi server4downs,

dem kann ich nur zustimmen.

Und ich habe sogar noch eine Config die 100% mit suexec funzt, wenn man mein HowTo vollständig anwendet nach deinem gepostet...

Nunja probiere es einfach nochmal in dem du die beiden HowTos vollständig anwendest und schreibe denn bitte ggf. auftretende Fehler.

Lg
Free
 
@ mbstef

Hoffe mal, das Du es noch liest.

Welches Betriebssystem nutzt du denn ?

weil ich bin auch bei Strato, unter Suse 9.3 habe ich es nicht zum laufen bekommen, aber unter Suse10, ging es nach mehreren anläufen dank Freel@ncer.

Solltest Du Suse 9.3 haben und es geht, wäre nett wenn Du es hier mal posten könntest was Du gemacht hast
 
Last edited by a moderator:
Welch ein Lob!
Danke dir, das freut mich, wenn ich den Usern helfen konnte/kann.
Ist ist zwar grundsätzlich nicht falsch bei Problemen nach dem OS zu Fragen, aber es klappt sowohl auf 10.0 als auch auf 9.3, das kann ich aus eigener Erfahrung bestätigen...

Lg
Free
 
Back
Top