Ich hoffe Ihr könnt ein wenig Licht in die Sache bringen.
Um eine flexiblere und vor allem sichere Webserverkonfiguration zu bekommen würde ich gerne das HOWTO, oder ähnliche Ansätze umsetzen.
Erst mal, was ist mit der Weiterentwicklung des HOWTOS? Die etch version wirkt arg beschnitten:
http://debianhowto.de/doku.php/de:howto ... 2_php-fcgi
Die sarge-version scheint aktueller zu sein (letzte Änderungen):
http://debianhowto.de/doku.php/de:howto ... 2_php-fcgi
Ich habe versucht das ganze mal exemplarisch auf meinem ubuntu/gutsy/amd64 Desktop nachzuvollziehen.
Dabei gibt es ein paar Verständnisprobleme, und ein Problem mit meiner Entwicklungsumgebung, die ich auch für Windows bereithalten möchte (xampp).
Der Hintergrund ist aber mehr der Lerneffekt, und das Vorhaben meinen debian/etch vserver von apache 1.3.x auf apache2.2-mpm-worker umzustellen, und zwar von mod_php auf php5_fcgi.
Zu den Fragen:
1.
Ich konnte kein php5_fcgi oder php_fcgi unter gutsy finden. Ist php5-cgi das richtige binary?
Code: Select all
zless /usr/share/doc/php5-cgi/README.Debian.gzVerstehe ich so, dass php5-cgi das entsprechend zu nutzende binary ist, es ist im Paket php5-cgi enthalten.Our recommendation is that, if you need
to use a threaded webserver, you should use php5-cgi in either
'normal' CGI mode, or in FastCGI mode.
phpinfo() spuckt u.a. folgende Zeile aus:
Code: Select all
Server API CGI/FastCGIpstree gibt das hier aus:
Code: Select all
├─apache2─┬─apache2
│ ├─apache2───php5-cgi───4*[php5-cgi]
│ └─2*[apache2───26*[{apache2}]]Was bedeuten die Variablen in der fastcgi.conf? PRIM_VHOST/php-fcgi-starter -user USER_PRIM_VHOST -group TGROUP_PRIM_VHOST
Ist die Konfiguration richtig?
Der apache startet folgendermaßen:
Code: Select all
[Tue Oct 23 19:51:17 2007] [notice] caught SIGWINCH, shutting down gracefully
[Tue Oct 23 19:51:27 2007] [notice] suEXEC mechanism enabled (wrapper: /usr/lib/apache2/suexec)
[Tue Oct 23 19:51:27 2007] [notice] Digest: generating secret for digest authentication ...
[Tue Oct 23 19:51:27 2007] [notice] Digest: done
[Tue Oct 23 19:51:28 2007] [notice] FastCGI: wrapper mechanism enabled (wrapper: /usr/lib/apache2/suexec2)
[Tue Oct 23 19:51:28 2007] [notice] FastCGI: process manager initialized (pid 9179)
[Tue Oct 23 19:51:28 2007] [warn] FastCGI: server "/var/www/php-fcgi-scripts/mypages.home/php-fcgi-starter" (uid 1000, gid 151) started (pid 9180)
[Tue Oct 23 19:51:28 2007] [notice] Apache/2.2.4 (Ubuntu) mod_fastcgi/2.4.2 mod_perl/2.0.2 Perl/v5.8.8 configured -- resuming normal operationsDer Dateibaum sieht folgendermaßen aus:
Code: Select all
var
`--www
|--php-fcgi-scripts
| |-- index.html
| |-- mypages.home
| | |-- index.html
| | `-- php-fcgi-starter
| `-- www.vhost1.home
| |-- index.html
| `-- php-fcgi-starter
|--mypages.home
| |-- conf
| `-- web
| `-- index.php
`--www.vhost1.home
|-- conf
`-- web
`-- index.phpCode: Select all
<VirtualHost 172.16.240.1:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/www.vhost1.home/web
#http://archiv.debianhowto.de/de/apache2-phpfcgi-sarge/c_apache2-phpfcgi-sarge.html
ServerName www.vhost1.home
ServerAlias www.vhost1.home
DirectoryIndex index.php index.html index.htm
SuexecUserGroup floogy www-fcgi
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/www.vhost1.home/web>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
#RedirectMatch ^/$ /apache2-default/
</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.vhost1.home-error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/www.vhost1.home-access.log combined
ServerSignature On
</VirtualHost>Code: Select all
#http://archiv.debianhowto.de/de/apache2-phpfcgi-sarge/c_apache2-phpfcgi-sarge.html
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi .php
FastCgiWrapper /usr/lib/apache2/suexec2
FastCgiIpcDir /var/lib/apache2/fastcgi
FastCgiServer /var/www/php-fcgi-scripts/mypages.home/php-fcgi-starter -user floogy -group www-fcgi
<Location /cgi-bin/php-fcgi-starter>
SetHandler fastcgi-script
Options +ExecCGI
</Location>
Action php-fastcgi /cgi-bin/php-fcgi-starter
AddType application/x-httpd-php .phpund ob der ScriptAlias ok ist (der ScriptAlias war Distributionsmäßig so eingetragen, und ich habe ihn so belassen, im HOWTO ist er anders):
Code: Select all
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">Ich kapier nicht ganz, ob es sich um Variablen handelt, die ich bei der Bearbeitung der Konfiguration ersetze, oder ob das Variable sind, die irgendwie vom apache2 eingesetzt werden. Und was heißt in diesem Zusammenhang PRIM=primär?FastCgiServer /var/www/php-fcgi-scripts/PRIM_VHOST/php-fcgi-starter -user USER_PRIM_VHOST -group TGROUP_PRIM_VHOST
Die vhost-datei mypages.home sieht analog aus.
3.
Nun ist das eigentliche Verzeichnis von http://www.vhost1.home auf einer ntfs-3g Partition. Ich habe versucht mit symlinks zu arbeiten, was mit den *.php Dateien nicht funktioniert:
Code: Select all
[Tue Oct 23 20:10:50 2007] [error] [client 172.16.240.1] SoftException in Application.cpp:199: Script "/var/www/www.vhost1.home/web/kontakt.php" resolving to "/mnt/export/www.vhost1.home/kontakt.php" not within configured docroot, referer: http://www.vhost1.home/index.phpCode: Select all
[Tue Oct 23 20:03:36 2007] [error] [client 172.16.240.1] SoftException in Application.cpp:231: File "/var/www/www.vhost1.home/web/index.php" is writeable by group
[Tue Oct 23 20:03:36 2007] [error] [client 172.16.240.1] Premature end of script headers: index.phpDazu das HOWTO:
Das scheint aber nicht zu funktionieren. Was ist hier falsch?Installation eines eigenen suexec Binarys
Warnung
Dieses Kapitel sollte nur dann bearbeitet werden, wenn man ein Datei-System hat, das kein immutable-Bit setzen kann oder wenn man ein anderes DocumentRoot als /var/www hat. 99% aller Leser können dieses sehr aufwendige Kapitel also getrost überspringen
Edit: Ein Symlink /var/www auf ein ggf. anderes DocumentRoot hilft auch, ohne dass man das suexec neu bauen muss.
4.
Ist es mit diesem HOWTO leicht möglich php5-cgi mittels fcgi und suexec mit unterschiedlichen Nutzern und Gruppen laufen zu lassen, so dass ein Einbruch wirklich auf den vhost und sein Verzeichnis beschränkt bleibt?
In diesem Zusammenhang ist das lighthttpd HOWTO ganz interessant: http://www.rootforum.org/forum/viewtopic.php?t=47409
Ist das leicht auf den apache übertragbar?
5.
Sind inzwischen andere Konfigurationen sinnvoller, ist das HOwTO noch "state of the art"?
6.
Ich nutze den opcode-Cache APC. Wird das mit fastCGI und suexec funktionieren, mit suphp ja wohl nicht?
Vielen Dank im Voraus.
EDIT: Ich würde mich auf eine Antwort für die ein oder andere Frage freuen!
Glücklicherweise bin ich nun über diesen thread gestolpert:
http://www.debianforum.de/forum/viewtopic.php?t=78073
Wichtige Hinweise scheint es auch hier zu geben:
http://blog.zugschlus.de/archives/286-fastcgi.html
Ich arbeite das gerade durch.

