
|
Anzeige:
|

|

29.09.2008, 05:33
|
|
Registered User
|
|
Registriert seit: 09.2008
Beiträge: 409
|
|
[Gelöst] Apache2 + php5: fastCGI _ohne_ suexec?
|
|
Moin,
ich bin gerade am Testen und Lesen, was PHP und den Apachen betrifft. Dabei hätte ich gerne eine soliden Kompromiss aus Schnelligkeit und Sicherheit. Auf dem Root laufen nur eigene Projekte (kein shared Host). OS: Debian Etch'n half, Apache2, php5-cgi
Folgendes konnte ich herausfinden:
1) mod-php5 fkt. nur mit dem Prefork-Apachen, ist schnell, aber offen wie ein Scheunentor
2) suPHP soll grottenlahm sein, dafür unkompliziert zu installieren
3) fCGI + suEXEC ist wohl so schnell wie 1), so sicher wie 2), aber aufwendiger zu konfigurieren
Da bin ich nun beim Knackpunkt: Ich habe es nicht geschafft, fcgi + suexec zum Laufen zu bringen. Die Skripte erzeugten immer einen 500er. Selbst nach dem Compilen von suEXEC mit eigenen Parametern - keine Chance. Irgendwo ist da noch ein Luschigkeitsfehler drin und ich finde ihn im Moment nicht.
Nun meine Frage: Funktioniert eigentlich PHP als fastCGI-Modul im mpm-worker auch ohne suEXEC? Also ohne Nachteil? Die Skripte laufen hier bei mir natürlich, nur kann ich nicht einschätzen, ob ich mir bis auf die Eigentümergeschichte keine anderen Nachteile einhandle?!
Danke,
/dev
Geändert von dev (29.09.2008 um 15:01 Uhr)
|

29.09.2008, 08:29
|
|
Registered User
|
|
Registriert seit: 03.2006
Ort: Darmstadt
Beiträge: 901
|
|
Hallo,
PHP + FastCGI benötigt immer suexec. Was steht im error / suexec log?
Du brauchst für jedes Projekt eine eigenes Starterscript. Dieses musst du dann als FCGIWrapper dem Apache2 mitteilen.
- libapache2-mod-fcgid installiert?
- php5-cgi installiert?
Wichtig sind die Rechte. Denn das Startscript sowie der Ordner in dem das Startscript liegt müssen dem Benutzer gehören. Daher du brauchst für jedes Projekt einen eigenen Ordner mit einem eigenen Startscript.
Beispiel:
Code:
/var/www
../web1/html
../web1/config
../web1/log
../web2/html
../web2/config
../web2/log
Die Startscripte kannst du dann einfach in dem Ordner config ablegen. Wichtig ist das du jedes Startscript durch "chattr -i startscript" unveränderbar machst.
Der Name des Startscripts darf im übrigen keinen Punkt enthalten.
- php5-starter => geht!
- php5-starter.sh => geht nicht!
I
|

29.09.2008, 08:29
|
|
Registered User
|
|
Registriert seit: 08.2006
Beiträge: 126
|
|
Was sagen die Logs nach einem Error 500? Meist sind die Eigentümer der Dateien nicht richtig gesetzt.
Wenn man php-cgi ohne suexec einsetzt hat man ja eigentlich schon den Hauptvorteil verspielt und man könnte auch getrost zu mod_php greifen.
|

29.09.2008, 12:38
|
|
Registered User
|
|
Registriert seit: 09.2008
Beiträge: 409
|
|
Liebe Leute,
danke für Eure Anteilnahme und Tips.
Zitat:
|
Zitat von bibabu
PHP + FastCGI benötigt immer suexec.
|
PHP läuft im Moment bei mir problemlos als FastCGI ohne suEXEC? Ich habe das Modul mit "a2dismod suexec" ganz deaktiviert...
Eure Fragen:
Ich habe mir vorher natürlich alle Dokus/Anleitungen zu Suexec angesehen und denke schon, dass ich alles im Überblick hatte (vor der Installation).
Zitat:
|
Zitat von bibabu
- libapache2-mod-fcgid installiert?
- php5-cgi installiert
|
Ja. Beides Mods sind auch enabled. In der VM-Box läuft diese Paketauswahl:
Zitat:
apache2.2-common (2.2.3-4+etch5)
apache2-mpm-worker (2.2.3-4+etch5)
apache2-threaded-dev (2.2.3-4+etch5)
libapache2-mod-fcgid (1:1.10-2)
|
Ein
Zitat:
a2enmod suexec
a2enmod fcgid
|
wurde ausgeführt.
Anschliessend habe ich das folgende PHP5 installiert:
)
Die Verzeichnisstruktur habe ich natürlich erstellt und ein User wurde auch angelegt, für den die Verzeichnisse als 750 chmod'et' wurden. Das Starterscript existiert mit richtigem Namen, das immutable Bit ist auch gesetzt, die Seite ist unter "/etc/apache2/sites-available" per VHost eingebunden und aktiviert. Erstelle ich nun eine phpinfo.php und lege diese mit korrekten chmods in das html-Verzeichnis, springt laut error.log suexec auch an. Allerdings bekomme ich in der suexec.log das hier:
Zitat:
|
Zitat von suexec.log
[2008-09-29 05:58:37]: uid: (1003/example) gid: (1004/1004) cmd: php-fcgi-starter
[2008-09-29 05:58:37]: (8)Exec format error: exec failed (php-fcgi-starter)
|
/dev
|

29.09.2008, 12:48
|
|
Registered User
|
|
Registriert seit: 03.2006
Ort: Darmstadt
Beiträge: 901
|
|
Hallo,
zeig uns mal den Inhalt des Startscripts.
Im übrigen bringt dir FastCGI ohne suexec nicht wirklich etwas. Denn ohne suexec läuft php unter dem Benutzer des Webservers. Daher muss auch das Startscript und der Ordner darüber dem Benutzer des Webserver gehören.
Hooray: Das war mein 500er Beitrag ;-)
Geändert von bibabu (29.09.2008 um 15:42 Uhr)
|

29.09.2008, 12:59
|
|
Registered User
|
|
Registriert seit: 09.2008
Beiträge: 409
|
|
Ok, alles klar. Dann wäre es ja toll, wenn ich Suexec zum Laufen bekomme, ich bin auch gerne bereit, noch einmal ein paar Stunden zu investieren *ächz*.
Zitat:
|
Zitat von Starterscript
PHPRC="/srv/www/example.com/conf/"
export PHPRC
exec /usr/bin/php5-cgi
|
Aufgerufen wird es vom virtuellen Host:
Zitat:
|
Zitat von aktivierte Site
<VirtualHost *>
ServerAdmin me@example.com
ServerName example.com
SuexecUserGroup example example
AddHandler fcgid-script .php
DocumentRoot "/srv/www/"
DirectoryIndex index.htm index.html index.php
LogLevel debug
ServerSignature On
<Directory "/srv/www/example.com/docs">
SetHandler fcgid-script
Options Indexes -MultiViews FollowSymLinks +ExecCGI
#FCGIWrapper /usr/bin/php-cgi .php
FCGIWrapper /srv/www/example.com/conf/php-fcgi-starter .php
Order allow,deny
allow from all
</Directory>
#ErrorLog /srv/www/example.com/logs/error.log
#CustomLog /srv/www/example.com/logs/access.log combined
</VirtualHost>
|
Dazu muss ich noch sagen, dass ich Suxec neu kompiliert habe, um meinen Pfad "/srv/www" benutzen zu können:
Zitat:
|
Zitat von /usr/lib/apache2/suexec -V
-D AP_DOC_ROOT="/srv/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="/srv/www"
|
Rechte sind für die neue Binary so gesetzt:
Zitat:
|
Zitat von ls -ls /usr/lib/apache2/suexec
28 -rwsr-xr-x 1 root root 24663 2008-09-29 02:08 /usr/lib/apache2/suexec
|
Ich kann keinen offensichtliche Fehler entdecken. Error by obfuscation sozusagen...
Vielleicht sollte ich mal die Default-Installation mit /var/www probieren
/dev
Geändert von dev (29.09.2008 um 13:02 Uhr)
|

29.09.2008, 13:53
|
 |
Registered User
|
|
Registriert seit: 03.2008
Beiträge: 140
|
|
Zitat:
1) mod-php5 fkt. nur mit dem Prefork-Apachen, ist schnell, aber offen wie ein Scheunentor
2) suPHP soll grottenlahm sein, dafür unkompliziert zu installieren
3) fCGI + suEXEC ist wohl so schnell wie 1), so sicher wie 2), aber aufwendiger zu konfigurieren
|
suPHP soll grottenlahm sein <<-- das halte ich für völlig überzogen
suEXEC ist wohl so schnell wie 1 <<-- auch das halte ich für ein Gerücht
Gibt es irgendwo Zahlen, welche das belegen?
Bzw. eine vergleichs Tabelle?
Bei mir kommt suPHP zum Einsatz und ich bin eigentlich rundrum zufrieden. Wenn da allerdings "richtig" was rauszuholen ist, würde ich evtl. umbauen.
|

29.09.2008, 14:22
|
|
Registered User
|
|
Registriert seit: 09.2008
Beiträge: 409
|
|
@combie: Ich bin bei meinen Recherchen auf Faktoren von 2x so langsam bis 5x so langsam gestossen (für suPHP). FastCGI ist etwas schneller. So richtig konkret ist das alles nicht.
Ich bin etwas weiter. Habe nun eine Default FCGI/SUXEC Installation des Apachen gemacht. SuEXEC bricht bei Aufruf des Wrappers ab.
Ich habe in diesen mal ein paar Syntaxfehler gebaut - das stört ihn gar nicht. SuEXEC meckert vorher schon:
Zitat:
|
Zitat von suexec.log
[2008-09-29 08:22:48]: uid: (1004/myuser) gid: (1005/1005) cmd: php-fcgi-starter
[2008-09-29 08:22:48]: (8)Exec format error: exec failed (php-fcgi-starter)
|
Das heisst für mich, dass SuEXEC den Wrapper aufrufen will aber nicht ausführen kann. Ok, wie kann ich das Problem weiter eingrenzen?
/dev
|

29.09.2008, 14:58
|
|
Registered User
|
|
Registriert seit: 09.2008
Beiträge: 409
|
|
Ich kipp' um!
Habe den Fehler gefunden. Es fehlte die folgende Zeile in meinem Starter-Skript:
Nun funktioniert es:
Zitat:
|
Zitat von php-fcgi-starter
#!/bin/sh
PHPRC="/var/www/vhosts/projekt/conf/"
export PHPRC
exec /usr/bin/php5-cgi
|
Diese 9 Zeichen haben mich nun insgesamt 10 Stunden gekostet. Dafür habe ich 'ne Menge gelernt.
Frage nun: Bin ich zu doof oder ist das normal?
Erbitte mir ehrliche Antworten!
/dev
|

29.09.2008, 15:23
|
 |
Hausmeistergehilfe
|
|
Registriert seit: 05.2006
Ort: Ritterhude
Alter: 27
Beiträge: 7.254
|
|
Du lernst laufen nur durch auf die Fresse fallen. Insofern alles "richtig" gelaufen
--marneus
__________________
"Kompetenzen mögen noch keine Bildung sein. Wer freilich seine Handyrechnung nicht lesen kann, der wird sich nicht 'Faust II' auf sein iPhone laden." - Aus einem Artikel der Frankfurter Allgemeinen
"Life isn't like a box of chocolates. It's more like a jar of jalapenos. What you do today, might burn your ass tomorrow." - Autor unbekannt
"Wichtiger, mien Jung, merk' Dir Das ohne Flachs: Die im Süden essen Stäbchen und wir essen Lachs!"Fettes Brot, Nordish by Nature
|

29.09.2008, 21:50
|
|
Registered User
|
|
Registriert seit: 09.2008
Beiträge: 409
|
|
Na dann ist es ja gut, wenn es nicht nur mir so geht. Aber ich habe mittlerweile das Gefühl, dass man bei Linux öfters mal richtig auf den Deckel bekommt
Mittlerweile läuft es ausgezeichnet. Den Apache mit den Modi kriege ich nun innerhalb von 5-10 Minuten installiert. Ich habe die Konfiguration im Griff und innerhalb von ein paar Minuten auch die Webuser mitsamt den Ordnern, Wrapper und Inis auf der Konsole angelegt.
Nach dem ersten Rumprobieren muss ich sagen, das mir im Vergleich zu SuPHP die FCGI/SUEXEC Variante schneller vorkommt. Aber das ist subjektiv. Für mich auch neu ist das Ausführen der Skripte als User - keine "nicht löschbaren Dateien" mehr, ich finde es super.
Und mit der Kombination aus FastCGI/SuEXEC/PHP5-CGI mit Suhosin und ausschliesslichem SFTP Zugriff für die minderpriveligierten Webuser ist das Gesamtkonzept wohl einigermassen ok was die Sicherheit betrifft.
Danke für Eure Hilfe,
/dev
Geändert von dev (29.09.2008 um 21:52 Uhr)
|

29.09.2008, 22:13
|
|
Registered User
|
|
Registriert seit: 11.2006
Beiträge: 2.983
|
|
Zitat:
Zitat von dev
Nach dem ersten Rumprobieren muss ich sagen, das mir im Vergleich zu SuPHP die FCGI/SUEXEC Variante schneller vorkommt. Aber das ist subjektiv.
|
Nein, das ist i. d. R. nicht subjektiv. Mach dir doch einfach einmal den Unterschied klar: bei SuPHP wird für jeden Request ein neuer Interpreter gestartet, bei FastCGI gibt es persistente Prozesse, die über mehrere Requests laufen. Rein bei der Ausführungsgeschwindigkeit der Skripte gibt es keinen Unterschied, aber der Overhead bei einem Request, der normalerweise weit schwerer ins Gewicht fällt, ist bei FastCGI wesentlich geringer.
|

29.09.2008, 22:37
|
|
Registered User
|
|
Registriert seit: 09.2008
Beiträge: 409
|
|
Jup, darüber gelesen hatte ich, aber da ich ja nur in einer VM Box rumprobiere und im Moment noch zu geringe Erfahrung mit der Lastverteilung habe, bleibe ich mit meinen Aussagen lieber unverbindlich
Deswegen ruckt es wohl beim ersten Mal immer etwas und danach ist es dann wesentlich "smoother" beim erneuten Request.
Wann werden die Prozesse wieder entladen? Wahrscheinlich kann man das konfigurieren oder?
/dev
|

29.09.2008, 22:41
|
|
Registered User
|
|
Registriert seit: 11.2006
Beiträge: 2.983
|
|
Zitat:
Zitat von dev
Wann werden die Prozesse wieder entladen? Wahrscheinlich kann man das konfigurieren oder?
|
Richtig. Entweder die Prozesse laufen ewig weiter (bzw. bis der Elternprozess - z. B. der Apache httpd - beendet wird), werden nach einer bestimmten Anzahl Requests neugestartet oder werden nach einer bestimmten Zeit beendet.
|

29.09.2008, 23:00
|
|
Registered User
|
|
Registriert seit: 09.2008
Beiträge: 409
|
|
Was für ein geiler Baukasten
/dev
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|

|

|
 |

|
Alle Zeitangaben in WEZ +2. Es ist jetzt 00:14 Uhr.
|