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

  • Thread starter Thread starter server4downs
  • Start date Start date
War nur die Wahrheit dankDir lief es dann ja auch :D

Aber unter Suse 9.3 hatte ich echt andere Verzeichniss namen und werte, entweder hatte bei mir von anfang an, das Betriebsystem ne klatsche oder sonst was weil da hatte auch mermals am tag der Server ohne grund Neu gestarten und es gab keine Logs.

Unter Suse 10 habe ich alle diese Probleme nicht, und der Server läuft ruhig durch
 
Hi Deathangel,

das mit deinen LogFiles würdeich sagen lag an dem STRATO Image, da dieses einen Schuss hat!
Uumindest habe ich das schon auf mehreren meiner STRATO Servern nachvollziehen könnnen, dass ohne Reparatur des Admins das System standardmässig nicht logt.
Zu dem mehrfach rebooten kann ich jetzt so nichts sagen, aber das ist ja auch irrelevant.
Wenn du Probleme mit dem 9.3er hattest, dann scheint das aber ein Einzelfall zu sein oder ich habe es nur noch nicht mitbekommen, denn ich habe es selbst mehrfach positiv nachvillziehen können.

PS:
Bitte beachte noch ein wenig stärker unsere Boardregeln.
(->insbesondere Punkt 3)

Lg
Free
 
Ich kann auch leider nur von mir sprechen, weil eine Bekannte hat Suse 9.3 am laufen, und Sie hatte bis heute nie Probleme.

Ich hatte das bis jetzt aber auch nur 1x drauf, könnte ja auch sein, das bei der Installation etwas schief ging, und deshalb die Paar Probleme da waren.
 
Ich fände es schön, wenn wir uns wieder dem HowTo und Hilfesuchenden widmen könnten und der Thread nicht ausartet.
Danke ;)

P.s: für eure Unterhaltungen gibts auch Tools, wie ICQ/MSN etc ;)
 
Hi server4downs,

ganz ruhig bleiben ;)

und jap wir hören ja schon auf, aber jmd. der das hier später liest, der weiß dann auch, auf welchen System es schon lief etc.

Also es ist höchstens 50% OT.
Und wir hören schon auf ;)

Lg
Free
 
Ist ja kein Problem ;)
Ich kann euch jedoch beruhigen:
Dieses HowTo sollte auf jedem Server laufen (egal welche Distri).
 
Jap kann ich nur nochmal bestätigen.

Ich selbst habe es auch schon auf vielen versch. erfolgreich durchgeführt.

Lg
Free
 
Hallo,

zunäcsht mal vielen Dank an alle die in dieem sehr nützlichen Thread mitgewirkt haben.

Ich habe hier dank des Threads nun auch php5 als mod_php udn php4 als cgi zum laufen bekommen (Suse 9.3, Apache 2.0.53, suexec2, Confixx 3.2.1).

Eine Fragezeichen bleibt jedoch.

Beim "umbiegen" von suexec2 habe ich ja docroot geändert (in meinem Fall in /usr/local/php4). Zuvor war docroot "/srv/www" und eben diese docroot fehlt mir nun. D.h. nach "Umbiegen von docroot funktionieren keine cgi-Scripte mehr, habe auch schon versucht für docroot in suexec 2 VZ anzugeben "/srv/www:/usr/bin/php4" das funktionert aber wohl nicht.

Im moment habe ich docroot auf "/" aber das ist ja wohl etwas schwachsinnig.

Wie habt ihr das gelöst?
 
Wie habt ihr das gelöst?
Ganz einfach:
Die Geschichte besteht ja nur aus einem Binary, welches sich frei auf dem Webserver bewegen lässt.
Kopiere das CGI-Binary doch einfach nach /srv/www, bzw. mache in /srv/www/ noch ein Verzeichnis und kopiere es da rein. Dann kannst du den alten Pfad bei suexec2 belassen.
So einfach ist das ;)
 
Danke,d as wars.

Ich habe nun php nach /srv/www/php4 kopiert.
Danach habe ich die suexec bezüglich docroot wieder auf den Ausgagszustand (/srv/www) gebracht und lediglich die suexec.c wegen des Fehlers "target uid/gid (10001/10001) mismatch with directory (0/0) or program (0/0)" angepasst und suexec entsprechend neu kompiliert.

Nun noch die /etc/apache2/conf.d/php4.conf wie folgt erstellt (SUSE9.3/Apache 2.0.53)

<Directory "/srv/www/php4">
AllowOverride None
Options None
Order deny,allow
Allow from localhost
</Directory>

ScriptAlias /php4 /srv/www/php4
Action application/php4 /php4/php
AddType application/php4 .php4

und das ganze funktioniert tadellos. Ich denke so hattest du das gemeint, korrekt?

Oder entsteht hierdurch ein Sicherheitsproblem?
 
Last edited by a moderator:
Oder entsteht hierdurch ein Sicherheitsproblem?
So lange die User nicht Schreibrechte für das Binary, bzw. das Verzeichnis des Binarys haben, sollte es keinerlei Probleme geben.
Ich garantiere aber mal lieber für nichts :D
 
Last edited by a moderator:
Hallöchen,

Ich möchte mich zuerst einmal für eure harte Arbeit danken, welche ihr benötigt habt um uns diese Infos zur Verfügung zu stellen! Das ist echt nicht selbstverständlich...

Ich habe mich auch mal mit diesem How-To versucht, komme aber zur Zeit leider wirklich nicht weiter :(

Vielleicht einmal die Randdaten: Debian Sarge, Plesk 8.0.1

Ich konnte die PHP Version herunterladen, den code patchen und nacher via make resp. make install installieren.
Der nächste Schritt ist ja das Anpassen der "/var/www/vhosts/[domainname]/conf/vhost.conf" mitdem Hinzufügen von den folgenden Zeilen:

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

Soweit denke ist mir alles klar. Wenn ich nun aber versuche apache2 neu zu starten bekomme ich folgende Fehlermeldung:

Code:
/etc/init.d/apache2 restart
Forcing reload of web server: Apache2Syntax error on line 23 of /var/www/vhosts/domain.com/conf/vhost.conf:
Invalid command 'Action', perhaps mis-spelled or defined by a module not included in the server configuration

Dann habe ich gegoogelt und herausgefunden das wahrscheindlich das Module mod_actions nicht vorhanden ist. Desshalb habe ich danach auf meinem System gesucht und es unter /usr/lib/apache2/modules/mod_actions.so gefunden.

Dann habe ich in der /etc/httpd.conf versucht mittels LoadModule das mod_actions zu laden, leider scheiteret dies an folgender Fehlermeldung:

In httpd.conf eingetragen:
Code:
LoadModule mod_actions /usr/lib/apache2/modules/mod_actions.so

Fehlermeldung:
Code:
Syntax error on line 50 of /etc/apache2/apache2.conf:
Can't locate API module structure `mod_actions' in file /usr/lib/apache2/modules/mod_actions.so: /usr/lib/libapr-0.so.0: undefined symbol: mod_actions

Nun stehe ich defintiv an und auch Google hilft mir nicht mehr wirklich weiter. Ich weiss, das ist sischer trivial für einige von euch, aber ich würde mich doch freuen wenn ihr mir ein paar minuten opfern würded. Ich komme einfach nicht darauf was ich falsch mache..

Falls zusätzliche Angaben benötigt werden, lasst es mich bitte wissen.

Gruss & Thx,
Dawn
 
In Debian werden Module geladen, indem Du einen Symlink aus mods-available nach mods-enabled setzt.
In Deinem Fall reicht folgende Zeile in der Shell:
Code:
ln -s /etc/apache2/mods-available/actions.load /etc/apache2/mods-enabled/
Wenn Du dir die actions.load anschaust, siehst Du auch, was oben falsch war.

huschi.
 
Huschi said:
ln -s /etc/apache2/mods-available/actions.load /etc/apache2/mods-enabled/

Code:
a2enmod actions
Das muesste doch auch funktionieren (bei Debian).
 
Ein grosses Dankeschön an Huschi und Guin. Ich konnte es mittels "a2enmod actions" lösen :) Hat prima geklappt.

Nun stehe ich aber leider schon wieder an. Ich bin mir bewusst das ich nicht ein Linux Pro bin wie z.B. Huschi, aber ich wäre doch dankbar wenn mir jemand weiterhelfen könnte.

Ich habe wie Freel@ncer14 suexec.c und suexec.h editiert und dann ein "make suexec" ausgegführt. Hat problemlos geklappt.

Wenn ich ein "suexec2 -V" auführe erhalte ich folgende Rückgabemeldung:
Code:
 -D AP_DOC_ROOT="/usr/bin/php5"
 -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"

Sieht eigentlich gut aus denke ich?

Also weiter: Das vhost.conf des Domains habe ich ensprechend Freel@ncers Anweisungen auf folgendes angepasst:
Code:
<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

Danach per "/usr/local/psa/admin/sbin/websrvmng -a -v" und "/etc/init.d/apache2 reload" die Konfiguration neu geladen.

Danach habe ich im "httpdocs"-Ordner des Domains per "mkdir php5-cgi" und dann in diesem die Datei phpinfo.php5 erstellt mit dem Inhalt:

Code:
<?PHP
phpinfo();
?>

Die rechte des Ordners sind "drwxr-xr-x" und der Owner ist "[userdesdomains] : psacln". Die phpinfo.php5 darin hat die Rechte "-rw-r--r--" und gehört dem gleichen User/Gruppe.

Wenn ich nun diese Datei auzurufen versuche erhalte ich eine "500 Internal Server Error" Meldung.

Im Apache-Log steht folgendes:
Code:
[Wed Oct 18 10:27:45 2006] [error] [client 195.65.5.2] Premature end of script headers: phpinfo.php5

Im Suexec-Log:
Code:
[2006-10-18 10:27:45]: uid: (10002/[userdesdomains]) gid: (10001/10001) cmd: phpinfo.php5
[2006-10-18 10:27:45]: command not in docroot (/usr/bin/php5/phpinfo.php5)

PHP5 ist aber definitv installiert:
Code:
/usr/bin/php5/php -v
PHP 5.1.6 (cgi) (built: Oct 18 2006 03:30:42)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

Bemerkung: [userdesdomains] ersetzt den realen User welchen ich verwende

Ich bin sicher der Fehler muss etwas ganz kleines sein und liegt mit grösster Wahrscheindlichkeit an meiner eigenen Dummheit, aber ich komme einfach nicht darauf was ich falsch mache. Wäre schön wenn ich nicht kurz vor dem Ziel scheitern müsste...

Ein riesen Dankeschön schon mal im Vorraus für jegliche Hilfe!

Gruss,
Dawn
 
Last edited by a moderator:
ScriptAlias /php5-cgi /usr/bin/php5
...
Danach habe ich im "httpdocs"-Ordner des Domains per "mkdir php5-cgi"
Fällt Dir daran nicht was entscheidendes auf?
Wenn nicht, solltest Du die Bedeutung von ScriptAlias nachlesen. Vieleicht klingelt dann der Groschen. :)

Nur damit Du nicht nochmal nachfragst:
Das angelegt Verzeichnis php5-cgi kann nicht erreicht werden, da ein Alias mit dem Namen existiert. Und wenn Du das Howto (ja, ganz am Anfang) noch mal ließt, wirst Du vieleicht feststellen, daß Du das Verzeichnis auch gar nicht brauchst. (Daher ist ein entsprechendes mkdir im Howto auch nicht erwähnt.)

huschi.
 
Uuuuuuuuuups, sau dummer Fehler... Bin wohl echt ein bischen übermüdet.. ;) (siehe vorletztes Posting)

Also WENN ich das richtig verstehe könnte man die phpinfo.php5 einfach ins "httpdocs-Verzecihnis" des betreffenden Domains stellen und diese dann per http://www.domain.com/phpinfo.php5 aufrufen?

Dummerweise bekommen ich immer noch die gleichen Fehlermeldungen im Log.

Error-Log:
HTML:
[Wed Oct 18 12:41:14 2006] [error] [client 195.65.5.2] Premature end of script headers: phpinfo.php5

Suexec-Log:
Code:
[2006-10-18 12:41:14]: uid: (10002/[userdesdomains]) gid: (10001/10001) cmd: phpinfo.php5
[2006-10-18 12:41:14]: command not in docroot (/usr/bin/php5/phpinfo.php5)

Woran könnte das liegen?

Ich bin gerne bereit mich irgendwo einzulesen, aber ich komme einfach nicht weiter und weiss nicht wo ich ansetzen soll :confused:

Ich habe wirklich die Anleitung von server4downs und freel@ncer GENAU befolgt. Einzige Ausnahmen:
- Habe htttpd-2.0.54 (da dieser apache2 bi mier läuft)
- AP_HTTPD_USER ist nicht "www" sondern "www-data"

Wo ich mir nicht ganz sicher war:
Code:
base_dir */

                char awesome[MAXPATHLEN];
                char pathstuff[MAXPATHLEN];
                int counter = 0;
                strlcpy(awesome, "", sizeof(awesome));
                strlcpy(pathstuff, SG(request_info).path_translated, sizeof(pathstuff));
                int i;
                for(i = 0; pathstuff[i]; i++)
                    {
                    if(pathstuff[i] == '/')
                    counter++;
                    if(counter == 6)
                        {
                        pathstuff[i+1] = 0;
                        strlcpy(awesome, pathstuff, sizeof(awesome));
                        break;
                        }
                    }

                strlcat(awesome, ":/other/base/dirs/dude/:/tmp/", sizeof(awesome));

                /* end! */
Die Debian Verzeichnisstruktur im Zusammenhang mit Plesk ist /var/www/vhosts/username. Aber soweit ich das verstehe sollte das defintiv nicht das Problem sein. Darum habe ich das auch so 1:1 übernommen.

Was ich auch überprüft habe ist ob die ID's 10002 und 10001 stimmen:
10002: [userdesdomains]
10001: psacln

Ich hoffe das ersichtlich ist das ich mir echt Müehe gebe und nicht nach 3s schon wieder hier frage. Nur bin ich jetzt wirklich am verzweifeln weil ich einfach nicht mehr weiterkomme. :( Google hilft leider auch nicht wirklich da die Fehlermeldung rel. allgemein gehalten ist. Wenn ich irgendwelche zusätzlichen Infos liefern kann, mach ich das gerne...
 
Ich bin mir nicht ganz sicher, aber evtl. könnte es an Deiner Änderung in der vhost.conf liegen: Du hast statt im Howto beschrieben "php5rocks" in "php5-cgi" im Scriptalias umbenannt. Dadurch könnte es zu ein Durcheinander bei Action & AddType kommen. Beachte das php5rocks nur ein fiktiver Name ist, der ansonsten rein gar nichts zu sagen hat.

PS: Allein anhand Deiner ausführlichen Berichte sieht man, wieviel Arbeit Du Dir selber machst. Also keine Sorgen... :)

huschi.
 
Stimmt der name ist nicht optimal gewählt, wollte mich nur exakt an die Anweisungen halten. Bei den anderen schien es ja zu funktionieren... :confused:

Ich habe mal folgende 2 Einstellungen im vhost.conf ausprobiert:

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

Anzeige in Browser: 500 Internal Server Error

Errorlog:
Code:
[Wed Oct 18 16:45:37 2006] [warn] Cannot get media type from 'php5-cgi'
[Wed Oct 18 16:45:37 2006] [warn] Cannot get media type from 'php5-cgi'
[Wed Oct 18 16:45:37 2006] [warn] Cannot get media type from 'php5-cgi'
[Wed Oct 18 16:45:37 2006] [error] [client 195.65.5.2] Premature end of script headers: php

Suexeclog:
Code:
[2006-10-18 16:45:37]: uid: (10002/blankster) gid: (10001/10001) cmd: php
[2006-10-18 16:45:37]: command not in docroot (/usr/bin/php5/php)

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 application/php5rocks/php
AddType application/php5-cgi .php5

File wird zum Download angeboten, keine Einträge im Errorlog/Suexeclog

Die Adresse zur phpinfo.php/phpinfo.php5 hab ich dir per PN geschickt.

PS: Danke das du das merkst, ich komm mir wirklich total hilflos vor.. *schäm*
 
Hallo Dawn,

Dawn said:
PS: Danke das du das merkst, ich komm mir wirklich total hilflos vor.. *schäm*

Also dafür brauchst du dich wirklich nicht zu schämen...

Wenn man sich Mühe gibt, dann ist einen Hilfe hier eigentlich so gut wie sicher...
Und, dass du dir Mühe gibst, ist glaube ich klar zu erkennen.

Dawn said:
[2006-10-18 12:41:14]: uid: (10002/[userdesdomains]) gid: (10001/10001) cmd: phpinfo.php5
[2006-10-18 12:41:14]: command not in docroot (/usr/bin/php5/phpinfo.php5)

Dieser Fehler wunder mich ein wenig.
Wenn ich es richtig interpretiere wird nicht versucht php aufzurufen und somit dein Script, sondern es wird versucht dein Script als Binary zu benutzen.

Desweiteren denke ich ist das hier:
Dawn said:
Action php5-cgi application/php5rocks/php
ein Fehler in der CFG.

Du solltest die vhost.conf mal bitte so testen:
Code:
<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

huschi said:
Du hast statt im Howto beschrieben "php5rocks" in "php5-cgi" im Scriptalias umbenannt. Dadurch könnte es zu ein Durcheinander bei Action & AddType kommen. Beachte das php5rocks nur ein fiktiver Name ist, der ansonsten rein gar nichts zu sagen hat.

So wie ich das sehe ist es egal wie du es nennst und deswegen ist 'php5-cgi' durchaus möglich!
Ich habe es auch so gemacht und es funzt!

Dawn said:
Die Debian Verzeichnisstruktur im Zusammenhang mit Plesk ist /var/www/vhosts/username. Aber soweit ich das verstehe sollte das defintiv nicht das Problem sein. Darum habe ich das auch so 1:1 übernommen.
In deinem Fall ist die CFG so in Ordnung, das ist also nicht die Fehlerquelle.

Probiere es also bitte nochmal mit der vhost.conf, die ich dir oben reingeschrieben habe und melde uns dann evtl. Fehler.
Dann können wir den Fehler hoffentlich besser eingrenzen.

Lieben Gruß
Free
 
Back
Top