Freel@ncer14
Registered User
Dieses HowTo bezieht sich auf:
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:
Und in dem error_log:
(DATUM + IP geändert, da rekonstruiert)
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)
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:
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:
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)
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
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:
in:
Jetzt wird suexec wahrscheinlich meckern, wenn ihr es neucompilieren wollt mir:
Danach folgendes machen:
Zusätzlich vielleicht ganz praktisch für euch meine vhost.conf:
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'!
[HowTo] PHP4/PHP5 als CGI - gepatcht (deutsches HowTo)
Hallo zusammen. Hier kommt das ultimative, langerwartete, geniale, einzigartige HowTo... Note: Please click here to see the English version. Achtung! Dieses HowTo richtet sich an fortgeschrittene Linux-Serveradministratoren! Es werden grundlegende Linux-Kenntnisse (u.a. auch Apache-Kenntnisse...
serversupportforum.de
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:
Mini HowTo: suexec neukompilieren
Hallo zusammen, ich wollte hier einfach mal schnell posten wie man an suexec Änderungen vornehmen kann ohne gleich den gesamten Apachen neuaufzusetzen. -Wieso kann man denn nicht einfach Änderungen einfach so durchführen, ohne zu kompilieren? Das geht wegen verschiedenen Security-Issues...
serversupportforum.de
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
10001/10001 gehört./var/www/vhosts/domain.tld/httpdocs
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:
Deswegen zuerstmake suexec
ausführen!make clean
Danach folgendes machen:
cp suexec /usr/sbin/suexec2
(Den restart des Apaches könnt ihr euch sparen, da suexec jedesmal neugestartet wird, wenn es aufgerufen wird.chmod 4755 /usr/sbin/suexec2
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'!