Apache2 Worker mit PHP und fcgid (FastCGI) SuExec auf Debian Lenny

2009-07-31 - kostaki 58 Kommentare »

Mit diesem Thema beschäftige ich mich schon seit 2003, aber aus Bequemlichkeit habe ich darauf verzichtet. Jetzt wurde es wieder aktuell und so machte ich mich auf die Suche nach aktuellen How To's. Überraschender Weise fand ich sogar ein sehr gutes! => christophfischer Dies soll eine kurze Zusammenfassung werden damit ich beim nächsten mal nicht wieder suchen muss. :)

Warum sollte man fcgid benutzen und nicht mod_php?

Warum Apache und PHP sollte klar sein, aber warum sollte man fcgid benutzen und nicht mod_php?

  1. PHP wird normal als Apache Nutzer ausgeführt. d.h. das jedes Script auch mit dessen Rechten ausgeführt wird. Dies kann zu Sicherheitsproblemen führen, besonders wenn man mehrere Benutzer auf einem Server hat.
  2. Apache legt Files als User www-data an. Wenn man nun diese Dateien als FTP User bearbeiten will geht dies nicht. Deshalb wäre es gut Dateien mit den gleichen Benutzerrechten anzulegen mit denen man auch per FTP darauf zugreifen möchte.
  3. mod_php kann nicht mit dem Apache MPM Worker eingesetzt werden. Deshalb muss man das recht alte und langsamere MPM Prefork benutzen. Außerdem ist PHP nicht wirklich Threadsave und man muss deshalb Prefork nutzen. Mit fcgid ist dieses Problem gelöst.
  4. Mit mod_php kann man nur eine php.ini für den gesamten Server anlegen, was bei unterschiedlichen Projekten oder Benutzern aber nicht immer Sinn macht. Mit fcgid kann man für jeden vhost eine eigene php.ini definieren und so mehr auf die Bedürfnisse der einzelnen Projekte eingehen.
  5. Es ist sogar möglich mehrere PHP Versionen auf dem gleichen Server zu verwenden! So kann ein vhost mit PHP4 laufen und ein anderer mit PHP5.

Hinweise:

  • Bei großen Installationen (viele vhosts) kann es zu RAM Problemen kommen, da für jeden vhost-Apache-User mindestens 1 PHP Prozess vorgehalten wird. suPHP könnte hier besser funktionieren.
  • Der erste Aufruf einer Website nach dem Start des Apaches kann etwas länger dauern, da erst der PHP Prozess in den Arbeitsspeicher geladen werden muss. Wenn er erst mal drin ist geht aber alles sehr schnell. Das betrifft aber auch nur Server mit sehr vielen vhosts!
  • Fastcgi aus dem Paket libapache2-mod-fastcgi darf nicht installiert sein. Dies ist durch die Verbesserungen in fcgid veraltet und sollte nicht mehr verwandt werden.

Ich lege für jeden vhost einen eigenen System User an. So hat User X nur Rechte seine eigenen Dateien zu bearbeiten und kann nicht auf die Files von User Y zugreifen. Das ist einer der größten Vorteile beim Einsatz von SuExec und fcgid, da so auch mögliche Einbrecher im System nur einen vhost unter ihre Kontrolle bringen können und nicht das ganze System. Um es möglichst einfach zu haben benutze ich den gleichen Namen an allen möglichen Stellen! In diesem Beispiel heißt der User vh-example.

Installation:

Die Installation ist wie immer bei Debian schnell und einfach. In diesem Beispiel benutze ich das von Debian verwaltete php5 Paket, aber wie schon gesagt kann man sich auch einfach seine eigenen Paket bauen und benutzen.

$ aptitude install apache2-mpm-worker apache2-suexec php5-cgi libapache2-mod-fcgid

Noch ein paar Zusatzpakete die ich oft brauche.

$ aptitude install php5-curl php5-gd php5-mcrypt php5-mysql

Wenn PHP Kommandozeile Support gewünscht ist, dann wird das folgende Paket installiert.

$ aptitude install php5-cli

Jetzt noch die apache module fcgid und suexec aktivieren und fertig. Fertig ist man natürlich noch nicht. Damit die Änderungen wirksam werden müsste noch der Apache neu gestartet oder wenigstens die Config neu laden werden, aber da die Konfiguration ja noch fehlt lasse ich es an dieser Stelle weg.

$ a2enmod fcgid suexec rewrite

Konfiguration:

Normalerweise lege ich meine vhosts unter /www/ ab, aber da hier das SuExec Paket von Debian benutzt wird, müssen die vhosts im Debian Standard Pfad liegen (/var/www/) da dieser Pfad fest in das SuExec Paket ein kompiliert ist. Note: Möchte man den Pfad anpassen, dann ist dies anscheinden mit dem Paket apache2-suexec-custom möglich. Hiermit kann man die SuExec Config mit Hilfe der Datei /etc/apache2/suexec/www-data anpassen und somit den Pfad zu den vhosts frei wählen. Danke an tobyte für den Tipp.

Unter dem htdocs Verzeichnis lege ich noch ein public Verzeichnis an das die DocumentRoot für den Apache wird. Wenn der User sich jetzt per FTP einloggt kommt er in den htdocs Ordner und kann dann in den public Ordner. Das hat den Vorteil das er noch Dateien außerhalb seiner DocumentRoot ablegen kann, aber nicht ohne weiteres an die User Sessions oder an die Configs kommt. Meine Standard Ordner Struktur sieht so aus:

#die configs dieses vhosts
/var/www/vh-example/conf

#hier landet der User wenn er sich per FTP einloggt
/var/www/vh-example/htdocs

#das ist die DocumentRoot für den Apache
/var/www/vh-example/htdocs/public

#custom logs für diesen vhost
/var/www/vh-example/logs

#der eigene tmp Ordner
/var/www/vh-example/tmp

#der eigene Sessions Ordner
/var/www/vh-example/sessions

Nun wird der System User erstellt.

$ useradd -s /bin/false -d /var/www/vh-example/htdocs vh-example
$ adduser www-data vh-example

Mit -s /bin/false legt man fest das der User keine Standardshell hat und sich deshalb nicht auf dem System einloggen kann. -d legt das Home Directory des Users fest. Als letztes kommt der Name des Users. Die zweite Zeile fügt den User www-data (Apache User) zur Gruppe unseres neuen Users hinzu. Damit kann der Apache auf die Verzeichnisse und Dateien unseres neuen Users zugreifen. Das ist zwingend notwendig damit Webseiten ausgeliefert werden können.

Jetzt werden die Verzeichnisse des neuen vhosts angelegt.

$ mkdir -p /var/www/vh-example/htdocs/public
$ mkdir /var/www/vh-example/logs /var/www/vh-example/conf
$ mkdir /var/www/vh-example/sessions /var/www/vh-example/tmp

Als nächstes lege ich die vhost Config an und fülle sie mit Inhalten. Als Beispiel hier eine simple vhost Config die ich als Basis benutze.

$ nano /etc/apache2/sites-available/vh-example
<VirtualHost *:80>
    ServerName example.de
    ServerAdmin admin@example.de

    Include /etc/apache2/mods-available/fcgid.conf

    DocumentRoot /var/www/vh-example/htdocs/public
    SuexecUserGroup vh-example vh-example

    <Directory /var/www/vh-example/htdocs/public>
        FCGIWrapper /var/www/vh-example/conf/fcgid .php
        <FilesMatch \.php$>
        	SetHandler fcgid-script
        </FilesMatch>
        Options +ExecCGI -Indexes
        Order allow,deny
        allow from all
        AllowOverride All
    </Directory>

    LogLevel warn
    ErrorLog /var/www/vh-example/logs/error_log
CustomLog "| /usr/sbin/rotatelogs /var/www/vh-example/logs/access_log.%Y.%m.%d 86400" combined
</VirtualHost>

SuexecUserGroup: legt den User und die Gruppe fest unter der die PHP Skripte ausgeführt werden.
FCGIWrapper: legt den Pfad zum fcgid-starter fest und weist .php Dateien diesem zu.
Options +ExecCGI: erlaubt das Ausführen von PHP Dateien im CGI Modus

In der vhost Config lade ich außerdem noch einmal die fcgid.conf, da aktuell ansonsten die dort definierten Einstellungen durch die Standardwerte überschrieben werden. Eine genaue Erklärung gibt es in diesem Artikel.

Nachdem wir im vhost schon den Pfad zum fcgid starter angegeben haben, wird es Zeit ihn auch anzulegen.

$ nano /var/www/vh-example/conf/fcgid
#!/bin/sh
export PHPRC="/var/www/vh-example/conf/"
exec /usr/bin/php5-cgi

Die zweite Zeile weist der Variable PHPRC den Pfad zu unserem Config Verzeichnis zu. In diesem liegt auch die User php.ini und mit diesem Kommando weiß nun auch der CGI Prozess davon. Die dritte Zeile gibt an welches CGI Paket bei einem Aufruf geladen werden soll. An dieser Stelle könnte man also auch ein PHP4 oder irgend eine spezielle PHP Konfiguration einbinden.

Wie schon erwähnt können wir für jeden vhost eine eigene php.ini anbieten. Da diese nur als Ergänzung zur Standard php.ini zu sehen ist sichern wir als erstes die Standard php.ini ab. Korrektur: Scheinbar wird nicht erst die globale php.ini geladen und dann die Werte aus der User php.ini überschrieben. Es muss also in jedem vhost eine komplette php.ini liegen! Es macht aber trotzdem Sinn erst einmal die System php.ini abzusichern um eine möglichst restriktive Standardkonfiguration zu erhalten die als default genommen werden kann.

$ cp /usr/share/doc/php5-common/examples/php.ini-recommended /etc/php5/cgi/php.ini

Ich benutze als Basis die mitgelieferte php.ini-recommended. Sie ist super kommentiert falls man weitere Anpassungen vornehmen möchte. Nun können wir im conf Ordner unseres vhosts eine weitere php.ini anlegen um vom Standard abzuweichen. Leider werden eben nicht die Werte der Standard.ini mit denen der User.ini überschrieben, sondern es wird nur die User.ini geladen! d.h. das alle hier nicht angegebene Parameter auf die PHP eigenen defaults gesetzt werden. Man sollte also Vorsichtig sein und überprüfen ob man wirklich eine User.ini braucht.

$ nano /var/www/vh-example/conf/php.ini
open_basedir = /var/www/vh-example/htdocs/public:/var/www/vh-example/tmp/
upload_tmp_dir = /var/www/vh-example/tmp
soap.wsdl_cache_dir = /var/www/vh-example/tmp
session.save_path = /var/www/vh-example/sessions

Beim verwenden eigener Session Dirs sollte man die Session Garbage Collection Verwaltung beachten! Auf weitere php.ini Einstellungen bin ich hier näher eingegangen.

Sehr wichtig sind außerdem die richtigen Zugriffsrechte der Ordner und Dateien in unserem vhost.

/var/www/vh-example root:vh-example 750
/var/www/vh-example/conf vh-example:vh-example 750
- php.ini root:vh-example 640 (immutaple bit)
- fcgid vh-example:vh-example 750 (immutaple bit)
/var/www/vh-example/htdocs vh-example:vh-example 750
- *.* vh-example:vh-example 640
/var/www/vh-example/htdocs/public vh-example:vh-example 750
- *.* vh-example:vh-example 640
/var/www/vh-example/logs root:root 750
/var/www/vh-example/tmp vh-example:vh-example 750
/var/www/vh-example/sessions vh-example:vh-example 750

Und das ganze in Befehle gefasst.

$ chown root:vh-example /var/www/vh-example
$ chmod 750 /var/www/vh-example
$ chown vh-example:vh-example /var/www/vh-example/*
$ chmod 750 /var/www/vh-example/*
$ chown root:root /var/www/vh-example/logs
$ chown root:vh-example /var/www/vh-example/conf/php.ini
$ chmod 640 /var/www/vh-example/conf/php.ini
$ chown vh-example:vh-example /var/www/vh-example/conf/fcgid
$ chmod 750 /var/www/vh-example/conf/fcgid
$ chown -R vh-example:vh-example /var/www/vh-example/htdocs
$ find /var/www/vh-example/htdocs -type d -exec chmod 750 {} +
$ find /var/www/vh-example/htdocs -type f -exec chmod 640 {} +
$ chmod 750 /var/www/vh-example/htdocs

Das Immutable Bit setzt man sobald man mit der Konfiguration fertig/zufrieden ist. Es verhindert das weiter Anpassungen an den Dateien vorgenommen werden können und da es nur von root wieder entfernt werden kann, schließt man Änderungen andere User 100% aus.

$ chattr +i -V /var/www/vh-example/conf/fcgid
$ chattr +i -V /var/www/vh-example/conf/php.ini

Und so entfernt man das Immutable Bit wieder (als root).

$ chattr -i -V /var/www/vh-example/conf/fcgid
$ chattr -i -V /var/www/vh-example/conf/php.ini

Bei der php.ini ist das Immutable Bit eigentlich nicht nötig, da der vhost User eh nur lesen darf, aber ich setze es trotzdem. Dann noch die Site aktivieren und den Apache neu starten.

$ a2ensite vh-example
$ apache2ctl configtest
$ /etc/init.d/apache2 restart

Fertig. Wenn es jetzt nicht gleich auf Anhieb funktioniert, einfach die Logs des Apaches und des vhost Users beobachten. Bei Problemen sind in 95% der Fälle die Zugriffsrechte nicht richtig gesetzt! Anmerkungen und Ergänzungen sind natürlich ausdrücklich erwünscht.

Einen weiteren vhost anlegen

Möchte man einen weiteren vhost anlegen wiederholt man die betreffenden Schritte einfach. Ich habe mir dafür eine Textdatei angelegt, in der ich nur den vhost Namen Suche und Ersetze und dann die Befehle nach einander ausführe. Damit hat man einen weiteren vhost innerhalb von 2 Minuten angelegt und einsatzbereit. Hier geht es zu der Textdatei.

Notizen:

vhost File Name: vh-example
vhost Pfad: /var/www/vh-example/
Systemuser: vh-example
Datenbankname: example
Datenbankuser: example
Datenbankpass: ***********
FTP User: example
FTP Password: *********** (nicht wie DB PW!)

Related Links

Ähnliche Artikel

  1. 58 Kommentare

  2. mrschm
    schrieb am 18.08.2009 um 13:02 Uhr

    Manchmal bin ich aber auch einfach zu faul und installiere mir einen apache prefork mit php Unterstützung.

    $ aptitude install apache2 php5 php5-curl

  3. Selam
    schrieb am 02.09.2009 um 10:10 Uhr

    Hey du hast in der php.ini 2x den Session Pfad drin. Funktioniert zwar auch so da der zweite den ersten überschreibt, aber soll wohl nicht so sein oder?

  4. mrschm
    schrieb am 02.09.2009 um 21:58 Uhr

    jo danke ist gefixt :)

  5. Andreas
    schrieb am 22.09.2009 um 09:40 Uhr

    Und weil sich so sehr sehr sehr viele sessions in /var/www/VHOST/sessions/ ansammeln, welche vom System nicht automatisch aufgeräumt werden (siehe php.ini) habe ich /usr/lib/php5/maxlifetime und /etc/cron.d/php5 wie folgt angepasst:

    /usr/lib/php5/maxlifetime

    #!/bin/sh -e
    
    max=1440
    
    for ini in /var/www/*/conf/php.ini; do
            cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true);
            [ -z "$cur" ] && cur=0
            [ "$cur" -gt "$max" ] && max=$cur
    done
    
    echo $(($max/60))
    
    exit 0
    

    /etc/cron.d/php5

    # Look for and purge old sessions every 30 minutes
    09,39 *     * * *     root   [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/www/*/sessions/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm
    

    Ähm… nun ja… in einer Zeile halt, aber das gibt das Formular hier nicht her ;-)

    Jedenfalls wird so nun auch wieder automatisch vom System aufgeräumt und abgelaufen sessions werden gelöscht…

    Gruß,
    Andreas

  6. Andreas
    schrieb am 22.09.2009 um 10:16 Uhr

    Huch, jetzt erst http://www.debianroot.de/server/php-session-save_path-debian-fcgid-1029.html gesehen ;-)
    Geht natürlich auch, wobei ich meinem irgendwie mehr vertraue :-P
    Nochmal Gruß!

  7. mrschm
    schrieb am 22.09.2009 um 10:31 Uhr

    Hehe ich habe es mal formatiert und ist natürlich auch eine Lösung.

  8. maXus
    schrieb am 10.12.2009 um 18:35 Uhr

    Du sprichst suPHP bei vielen Usern an. Welche Unterschiede gibt es hier zu deinem Vorschlag? Warum nicht gleich auf suPHP setzen?

    Ansonsten scheint es auch reibungslos geklappt zu haben. Er meckerte zwar beim Apache Config Test, doch das ist ja eher das kleinere Ding:
    apache2: Could not reliably determine the server’s fully qualified domain name, using (IP ausgetauscht) for ServerName

  9. kostaki
    schrieb am 10.12.2009 um 20:39 Uhr

    Zu den Unterschieden von suPHP und fastcgi/fcgid will ich hier nichts schreiben, da gibt es schon genug von im Netz. Hier beschreibt jemand sehr gut warum es manchmal Sinn macht das eine oder das andere einzusetzen. Es kommt halt immer auf die Anforderungen an und bei meinen Servern ist fastcgi die bessere Wahl. Wenn du mehr Informationen suchst, dann google einfach: “suphp fastcgi”.

    Das Problem mit dem “fully qualified domain name” ist leicht zu beheben. Da muss nur entweder der richtige Servername in die apache.conf oder der richtige Name in die /etc/hosts. Auch dazu gibt es unzählige Anleitungen im Netz :P

  10. Marus
    schrieb am 12.12.2009 um 22:58 Uhr

    Sagte ja das is eher nen kleines Ding. Wollte damit sagen, dass ich weiß was los is :D Dann mach ich mal weiter mit dem Ding.

  11. tobyte
    schrieb am 08.02.2010 um 10:57 Uhr

    Danke für den Artikel, hat mir sehr geholfen.

    Mit dem Paket apache2-suexec-custom lässt sich der Pfad für suexec übrigens auch komfortabel in der Datei /etc/apache2/suexec/www-data einstellen.

  12. crousN
    schrieb am 12.05.2010 um 20:02 Uhr

    Mhm.. die Anleitung an sich ist super! Aber ich sehe sie nicht als sehr sicher an!

    Denn nun darf www-data (sprich vh-example) in jedem Verzeichnis schreiben (ist ja fast einem chmod 777 ähnlich).

    Sprich Bugs in Skripten oder Plugins führen direkt dazu, dass jeder User mit seinem Browser überall reinschreiben kann.

    Oder sehe ich da was falsch?

  13. kostaki
    schrieb am 12.05.2010 um 20:28 Uhr

    Nicht ganz. Über adduser www-data vh-example wird der User www-data in die Gruppe vh-example gesetzt. Dadurch kann www-data die Dateien von vh-example lesen.

    vh-example kann nur die Dateien editieren/lesen die auch ihm gehören und das sollten in diesem Fall nur die unter /var/www/vh-example/ sein.

    Die Vorteile von SuExec merke ich jetzt erst richtig. So kann man WordPress Plugins mit einem Klick installieren oder löschen und Piwik automatisch updaten lassen. Der Sicherheitsgewinn ist auch super. Wenn WordPress/anderes System kompromittiert wird, dann sollte auch nur der vhost dieses Users betroffen sein.

  14. crousN
    schrieb am 14.05.2010 um 09:05 Uhr

    Mhm… stimmt! An sich hast du Recht aber:

    - Zitat -
    Die Vorteile von SuExec merke ich jetzt erst richtig. So kann man WordPress Plugins mit einem Klick installieren oder löschen und Piwik automatisch updaten lassen. Der Sicherheitsgewinn ist auch super. Wenn WordPress/anderes System kompromittiert wird, dann sollte auch nur der vhost dieses Users betroffen sein.
    - Zitat Ende -

    Genau da sehe ich ja die Schwachstelle. Die eine vHost-Benutzer hat Berechtigungen auf ihren ganzen Ordner und wird auch mit dem User ausgeführt.

    Ich mein im Endeffekt ist es eigentlich egal, weil wenn man so eklatante Bugs in seinen Seiten hat wird man so oder so gehackt ;-)

    Persönlich wäre es mir aber sicherer, wenn der User der es ausführt auch nur Lese Rechte hat und ich für bestimmte Ordner/Dateien nur “Schreibrechte” vergebe.

    An sich ist das ganze so aber schon sicher, aber man kann ja immer mal meckern ;-)

    Trotzdem sehr schönes Tutorial!

  15. kostaki
    schrieb am 14.05.2010 um 13:18 Uhr

    Hm ja das ist Ansichtssache. Wenn ich einen Vhost einrichte, dann ist bei mir der User dieses Vhost für seine Dateien verantwortlich. Dabei ist mir wichtig das wenn etwas passiert keine anderen Projekte/Systeme/Vhosts dran glauben müssen. Bei einer Kompromittierung kann der Angreifer so nur Scripte mit den Rechten des Vhosts ausführen und kann somit auch nur Schaden in diesem einen Vhost anrichten. Das ist meiner Ansicht nach schon ein großer Sicherheitsgewinn. :)

  16. Marco
    schrieb am 18.05.2010 um 12:23 Uhr

    Hey! Nettes HowTo! Hab es auch gestern schon ausprobiert und läuft prima. Jetzt wollte ich allerdings den Worker auf einem produktiven System einrichten, wo nun der Prefork mit mod_php rennt. Weiterhin nutze ich nun Webmin/Virtualmin zur Verwaltung der einzelnen Vhosts. Wie gehe ich nun am Besten vor? Würde mich da sehr über eine kleine Hilfe freuen.

  17. Neonstriker
    schrieb am 01.06.2010 um 23:16 Uhr

    Ich habe ein kleines Problem:
    Ich habe eine lamp version von debian, habe nun dein TuT hier befolgt nur komme ich immer wieder ins www verzeichnis wenn ich meine domain eingebe! Ich vermute mal das liegt an dem standart einstellungen:

    Virtueller Server
    Behandelt den Namen-basierten Server an Adresse *.
    Adresse Beliebig
    Port 80 Server-Name Automatisch
    Dokument-Root /var/www/

    Wenn ich jedoch diesen lösche bringt er mir eine fehler meldung default nicht vorhanden

  18. Neonstriker
    schrieb am 01.06.2010 um 23:24 Uhr

    Desweiteren komme ich nun nicht merh auf mein phpmyadmin wenn ich dies eigebe bekomme ich ein fenster zum downloaden einer 4NCYghRA.part datei

  19. kostaki
    schrieb am 02.06.2010 um 08:25 Uhr

    Sorry aber da weiß ich nicht mal wo ich anfangen soll. Da scheint etwas ganz elementares nicht zu stimmen. Hast du überhaupt eigene Vhosts angelegt oder nur den default?

  20. Neonstriker
    schrieb am 02.06.2010 um 13:07 Uhr

    Also……^^
    Es handelt sich um einen standart Lamp Server! Ich mache nun nichts anderes als deinen anleitung zu folgen also 1zu1 genau das selbe (natürlich mit meiner domain)! Wenn ich dies gemacht habe und auf meine domain gehen möchte komme ich quasi noch in den default verzeichnis raus also dort wo steht “It Works” und ich weis nicht weshalb! Wenn ich meine ip eingebe komme ich ebenfalls auf dieser Seite heraus jedoch komme ich weder via domain noch via up in mein phpmyadmin ich bekomme hier immer wieder nur einen download von einer datei angeboten! Wenn ich auf den webspace “www” eine html lege funktioniert das jedoch bei einer php funktioniert dies nicht da kommt nun der download. Natürlich kann ich es nicht mit meiner domain testen da ich ja nicht ins richtige verzeichniss gelange also var/www/test/htdocs/public sondern ich komme immer iweder in var/www/

  21. kostaki
    schrieb am 02.06.2010 um 17:05 Uhr

    Vielleicht ne Dumme Frage, aber hast du mal den Apache neu gestartet? Sieht mir so aus als ob die Config(s) nicht geladen werden… Du hast ja sicher eine vhost Config unter /etc/apache2/sites-available/, in der /var/www/test/htdocs/public steht. Ich sage mal vh-test. Die hast du dann aktiviert mit a2ensite vh-test und dann den Apache neu gestartet /etc/init.d/apache2 restart. Das PHP Dateien als Download angeboten werden liegt meist auch an der Konfiguration des Webservers. Hier scheint PHP nicht richtig konfiguriert zu sein. Ein Blick in die log Files unter /var/logs/ könnte auch helfen.

  22. Neonstriker
    schrieb am 02.06.2010 um 17:40 Uhr

    Ich hab meinen fehler gefunden^^ oder zumindest denke ich das! Wäre supi wenn ihr das nochmal bestätigen könnt das ich so doof war.

    /etc/apache2/sites-available/kdt-wow-hp

    ich dachte da muss

    stehen bleiben! Nun hab ich das geändert in

    und es funzt! nun hab ich nur das Problem, das ich immer noch nicht auf mein Phpmyadmin komme bzw wenn ich nun über meine ip auf die Seite möchte kommt dieses download fenster bei jeglichen php seiten! Wie ich ja gesehen habe hatte dieses Problem schoneinal jemand bei der einrichtung des phpmyadmins! vorher hat alles funktioniert nur seit dieser anleitung gehen quasi keine php scripte ehr unter dem standart vhost

  23. Neonstriker
    schrieb am 02.06.2010 um 18:57 Uhr

    VirtualHost *:80

    geändert in

    VirtualHost domain.de:80

  24. Neonstriker
    schrieb am 02.06.2010 um 23:06 Uhr

    AddHandler fcgid-script .php

    für was diesnt dies eigentlich das finde ich in jeder anleitung außer hier

  25. kostaki
    schrieb am 03.06.2010 um 08:26 Uhr

    Das findest du hier auch im in der Vhost Config im FilesMatch \.php$ Block. Wenn PHP Scripte zum Download angeboten werden, dann weiß der Webserver nicht was er damit anfangen soll. Es muss also irgend etwas fehlen.

  26. Ulrich
    schrieb am 08.06.2010 um 07:58 Uhr

    @Neonstriker:

    Du musst einen eigenen Vhost für phpmyadmin anlegen und diesen dann auf /user/share/phpmyadmin legen.

    Wie das geht habe hier hier erklärt:
    http://www.ulrich-block.de/?p=3

  27. Neonstriker
    schrieb am 24.06.2010 um 22:04 Uhr

    Schau mal du hast bei open_basedir vergessen dein sessiondir einzutragen wenn ich mich nicht täusche! Soweit ich das in erinnerung habe sollte das dabei stehen

  28. kostaki
    schrieb am 25.06.2010 um 08:45 Uhr

    Schau mal du hast bei open_basedir vergessen dein sessiondir einzutragen wenn ich mich nicht täusche! Soweit ich das in erinnerung habe sollte das dabei stehen

    Hi ich habe es nicht drin zu stehen und es funktioniert. Ich habe aber seit langem keine PHP Sessions mehr benutzt (ich benutze MySQL oder Memcached), deshalb bin ich mir nicht 100% sicher! Wenn das jemand bestätigen kann, passe ich es an.

  29. traxxus
    schrieb am 02.07.2010 um 07:19 Uhr

    Hallo

    Bei mir will das einfach nicht laufen. Hab schon zig mal Debian neu installiert aber es ist IMMER der gleiche Fehler. PHP Dateien bietet er mir zum Downlaod an anstatt sie auszuführen.

    HAbe das Tutorial von Christophfischer sehr genau befolgt. Mit diesem Tutorial hier ist es dasselbe Ergebnis.

    Habe echt keine Ahnung woran es scheitert.

  30. kostaki
    schrieb am 02.07.2010 um 08:54 Uhr

    Das die Dateien zum Download angeboten werden heißt das der Webserver nicht weiß was er mit ihnen machen soll. Also entweder ist PHP nicht installiert oder der Webserver nicht richtig konfiguriert in der Verwendung von PHP. Wenn ich einen neuen Webserver einrichte, dann gehe ich eigentlich nur diese Liste 1:1 durch und verändere den vhostnamen und es funktioniert jedes mal. Als Anhaltspunkte wo man mal schauen kann:
    – Webserver neu gestartet nach der Konfiguration?
    – hast du schon mal in die Apache Logfiles geguckt?

  31. traxxus
    schrieb am 02.07.2010 um 09:14 Uhr

    Webserver ist natürlich neu gestartet worden, selbst Debian.

    Was geb ich denn in der vhost config an wenn ich gar keine Domain besitze und nur per IP bzw. DynDNS Adresse auf die Website gehe?

  32. kostaki
    schrieb am 02.07.2010 um 15:36 Uhr

    einen vhost hast du ja immer, das wäre dann der default vhost. Der muss so ausgestattet werden wie oben beschrieben. Schau einfach mal in den /etc/apache2/sites-enabled/ Ordner.

  33. traxxus
    schrieb am 05.07.2010 um 14:58 Uhr

    Konnte es lösen. Ich musste noch folgendes ausführen:

    apt-get install libapache2-mod-php5

    Danach werden die PHP Dateien ausgeführt.

  34. kostaki
    schrieb am 05.07.2010 um 15:04 Uhr

    Das ist dann aber mod_php und kein php via fcgid!

  35. traxxus
    schrieb am 05.07.2010 um 16:47 Uhr

    Trotz 1:1 Befolgung oben ging’s erst nach Installation des genannten Pakets….

    ka was ich falsch mache.

  36. traxxus
    schrieb am 24.08.2010 um 18:02 Uhr

    Ich nochmals :D

    Dein Tut funzte nicht einmal bei 5 Installationsversuchen. Dieses hier haut sofort hin:

    http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-debian-lenny

    Vielleicht solltest du dir das mal ansehen?

  37. kostaki
    schrieb am 24.08.2010 um 20:18 Uhr

    Hey traxxus :)

    Schade das es bei dir nicht funktioniert. :( Kann mir so ohne Infos leider nicht erklären warum das so ist… Ich weiß aber recht genau das diese Anleitung hier funktioniert, weil ich sie selbst bei jedem neuen Webserver mit Apache2-fcgid benutze.

    Sobald Squeeze stable wird, werde ich sie aber noch einmal komplett überarbeiten und wenn nötig anpassen. Als viel Erfolg noch. :)

  38. olafson
    schrieb am 28.02.2011 um 17:52 Uhr

    Hosa

    ich bekomme nach deiner Anleitung immer ein

    You don’t have permission to access /vh-example/htdocs/index.php on this server.

    Hab alle Permissions so wie in deiner Anleitung
    gesetzt.

  39. kostaki
    schrieb am 01.03.2011 um 09:18 Uhr

    Schau nochmal über alles rüber. Auch ob die Pfade stimmen und natürlich die Berechtigungen. Hast du den vhost wirklich vh-example genannt oder ist das nur copy&paste Fehler?

  40. Sebastian
    schrieb am 28.03.2011 um 14:00 Uhr

    Moin!
    Danke erstmal für das nette Tut!
    Ein Problem hab ich allerdings…

    Wenn ich nun so Dinge wie zB phpmyadmin installiere, erstellt der Installer im Order /etc/apache2/conf.d/ eine Datei mit der Konfiguration der entsprechenden Anwendung. In dem Fall phpmyadmin.

    Da ich aber für die ganzen allgemeines Apps eine eigene Subdomain einrichte und somit auch meine vhost configs selbst schreiben will, frage ich mich ob ich den include vom ‘conf.d’ Ordner in der apache2.conf einfach auskommentieren kann oder hat das anderweitige folgen?!

    Wenn ich die files einfach lösche sind sie nach dem nächsten update wieder da, weil der Installer denkt die Datei würde fehlen.

    Vielen Dank für die Hilfe oder zumindest einen Denkanstoss!

    Gruß
    Sebastian

  41. kostaki
    schrieb am 28.03.2011 um 15:01 Uhr

    Lass sie doch einfach da und mach sie leer oder kommentiere die Zeilen aus. Der Paketmanager sollte dann beim Update des Paketes fragen ob er die Config anpassen soll und da musst du dann nur nein sagen.

  42. Sebastian
    schrieb am 31.03.2011 um 10:32 Uhr

    Hallo

    Super Tutorial seit mehre Wochen läuft mein Server mit der Konfiguration.
    Nun habe ich leider aber ein Problem, ich muss ein paar .html Seiten als php ausführen lassen. Dazu habe ich mir .htaccess Datei mit folgenden Inhalt erstellt:

    AddHandler application/x-httpd-php .html

    in der Apache Konfiguration für vhost steht auch AllowOverride All.

    Trotzdem werden die html Seiten nicht als php geparst. Ich bin am verzweifeln. Woran kann das liegen.

    Schöne Grüße
    Sebastian

  43. kostaki
    schrieb am 31.03.2011 um 12:18 Uhr

    Hab ioh noch nicht gemacht, aber guck ma in die vhost Config. Dort gibt es ja Stellen mit .php und die müsstest du sicher auch noch anpassen/erweitern.

  44. newbie
    schrieb am 17.07.2011 um 13:00 Uhr

    Hi, ich hab mal versucht es nach dieser Anleitung um zusetzten, hat nicht ganz geklappt. Wenn ich eine *.php Datei im Verzeichnis aufrufe lädt er mir einfach nur das Skript runter.

    Server version: Apache/2.2.16 (Debian)
    PHP 5.3.3-7+squeeze3

    Ich komme nicht weiter, hat jemand eine Idee was man machen könnte in den log Dateien steht auch nicht wirklich was drin.

  45. kostaki
    schrieb am 19.07.2011 um 08:22 Uhr

    Hi, das klingt danach das irgend ein Pfad falsch ist oder irgend welche Rechte falsch gesetzt sind. Mehr kann man so ins blaue nicht sagen. Einfach noch einmal alles überprüfen.

  46. wynni
    schrieb am 11.08.2011 um 20:00 Uhr

    Tools howto. Wie kann ich nun testen ob das auch mit diesem User ausgeführt wird?

    Danke

    wynni

  47. kostaki
    schrieb am 12.08.2011 um 06:32 Uhr

    Bau dir ein Script das versucht auf eine Datei zuzugreifen auf die der User keine Rechte hat und dann auf eine auf die er Rechte hat. Dann kannst du noch per Script eine Datei erstellen lassen und gucken welchen owner/group diese bekommt.

  48. wynni
    schrieb am 18.08.2011 um 19:21 Uhr

    wie hast das mit dem ftp server gelöst? du hast ja “useradd -s /bin/false” da kann man sich ja mit diesem user nicht anmelden. Hast du die user über mysql, dann fehlen wieder die rechte auf den htdocs ordner… was verstehe ich hier nicht?

  49. kostaki
    schrieb am 19.08.2011 um 07:49 Uhr

    Ich benutze pureftpd wie hier beschrieben.

    http://www.debianroot.de/server/ftp-server-pureftpd-mit-mysql-und-tls-unterstuetzung-1014.html

    Accounts brauchen da keine Shell, damit es funktioniert.

  50. DefCon
    schrieb am 19.09.2011 um 11:34 Uhr

    Vorweg, sehr nette und super Anleitung (Neudeutsch: Tutorial)!

    Ich habe irgendwie das Gefühl das wenn ich einen Webserver so aufbaue wie du es oben beschreibst, sich ein Chroot für Apache an sich erübrigt? Oder bin ich da auf dem Holzweg? Da ein Angreifer ja nicht weiter kann als das vhost Verzeichnis. (Aufgrund der Rechte) Andere Frage: Das ganze ist portierbar auf Debian 6 (Squezze)?

    Viele Grüße,
    Marcus

  51. kostaki
    schrieb am 19.09.2011 um 11:42 Uhr

    Ja ist portierbar auf Squeeze. Einige Sachen funktionieren etwas anders.

    – die php.ini recommended liegt wo anders
    – das braucht man nicht mehr in jedem vhost Include /etc/apache2/mods-available/fcgid.conf
    – die fcgid.conf benutzt andere Werte

    Ein Angreifer hat wenn er einen vhost unter seine Kontrolle bringt nur die Rechte dieses Vhost Users. Er kann also auch nur mit dessen Rechten Schaden anrichten.

  52. DefCon
    schrieb am 19.09.2011 um 12:19 Uhr

    Hey! Danke für die schnelle Antwort! :-) Ich werde dann mal beginnen das bei mir nach zu bauen.

    Drückt mir die Däumchen. :-)

    Greetz

  53. timwebdev
    schrieb am 21.10.2011 um 12:02 Uhr

    Hi,

    ich versuche mich gerade an der Installation mehrerer PHP Version unter Squeeze. Ich habe den Artikel hier gefunden http://stackoverflow.com/questions/524508/how-can-one-run-multiple-versions-of-php-5-x-on-a-development-lamp-server welcher aber nur für Ubuntu geeignet ist. Wie kann ich denn mehrere Repositories mit unterschiedlichen PHP Versionen eintragen und vorallem, wie kann ich diese für die jeweilige Version installieren?

    Ideal ist natürlich eine Verzeichnisstruktur, bspw.

    /usr/bin/php5.2
    /usr/bin/php5.3

    oder ähnliches …

    Ich hoffe ich habe bei der Suche hier und über Google nichts vercheckt. Kann mir dabei jemand behilflich sein oder einen Tipp geben?

    Viele Grüße

  54. kostaki
    schrieb am 21.10.2011 um 12:08 Uhr

    Das ist natürlich möglich per fastcgi! Die Frage ist nur wo du die php binaries her bekommst. Fertige Debian Repos die auch ältere Versionen beinhalten sind mir nicht bekannt. Du kannst sie dir natürlich selbst kompilieren.

  55. timwebdev
    schrieb am 21.10.2011 um 16:12 Uhr

    Danke für die schnelle Antwort!

    Hab ich mir schon gedacht und selber kompilieren ist nicht so elegant.

  56. Sascha
    schrieb am 24.10.2011 um 14:03 Uhr

    Hallo,

    danke erst mal für das ausführliche Tut.

    Bei mir wollte das ganze erst fliegen, als ich den sessions und tmp Ordnern noch die entspechenden Benutzer und Gruppen zugewiesen habe. Soweit ich das in Deinem Tut sehe, bleiben die unberührt und gehören dem Ersteller (in meinem Fall dem root). Ergo hat die gestartete PHP-Instanz keine Berechtigung, die Sessions zu schreiben.

  57. kostaki
    schrieb am 26.10.2011 um 07:42 Uhr

    Hi,

    die müssen natürlich dem User gehören. Steht so eigentlich auch in der Rechte Tabelle und die Befehle darunter machen dies auch ;)

  1. Trackback(s)

  2. Feb 9, 2010:Tweets die Apache2 Worker mit PHP und fcgid (FastCGI) SuExec auf Debian Lenny » Server » Debian Root erwähnt -- Topsy.com
  3. Jun 5, 2010:Fcgi und dadurch Probleme mit Phpmyadmin - Linux: Linux-Forum

Kommentar schreiben

*

*