Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index International Gentoo Users Deutsches Forum (German) Deutsche Dokumentation
  • Search

[HowTo]Apache2 + Suexec2 + php-cgi + mod_fcgid

Dokumentation, Tipps und Tricks.
Post Reply
  • Print view
Advanced search
1 post • Page 1 of 1
Author
Message
gabelhonz
Apprentice
Apprentice
User avatar
Posts: 222
Joined: Mon Aug 30, 2004 8:17 am
Location: 10010100111110011

[HowTo]Apache2 + Suexec2 + php-cgi + mod_fcgid

  • Quote

Post by gabelhonz » Wed May 24, 2006 11:31 am

HowTo Apache2 + Suexec2 + php-cgi + mod_fcgid

1. Einleitung

Anmerkung: Das ganze Howto richtet sich an erfahrene Anwender.
Die wohl am häufigsten genutze Methode PHP in den Apache zu integrieren ist mod_php, allerdings hat es 2 gravierende Nachteile:

- Es führt sämtliche Scripte als User unter dem der Apache läuft aus und
- es entsteht eine Sicherheitslücke da jeder User PHP Scripte eines anderen einsehen kann.

Man kann also jedem Vhost einen User zuteilen unter dem dann auch die Scripte laufen.
Zudem muss das php-cgi binary nicht wie bei mod_suphp bei jedem Request neu gestartet werden (was bei großen Websites ne menge ServerLoad verursacht) sondern bleibt eine weile im Speicher, das über das mod_fcgid Modul sehr gut konfigurierbar ist (besseres Prozessmanagement), also viel besser als bei mod_fastcgi.
Daher wähle ich für meine Konfiguration das mod_fcgid Modul aus. Am Ende des Howtos stehen ein paar Links dazu.


2. Benötigte Progs installieren

Folgende Programme werden benötigt:

Code: Select all

dev-lang/php
net-www/mod_fcgid
net-www/apache
Zudem werden außer den USE Flags die man für php möchte noch zusätzlich folgende Flags verwendet:

Code: Select all

cgi force-cgi-redirect
Trägt man diese nicht ein läuft am Ende das ganze nicht!

Nachdem die USE Flags gesetzt worden sind können wir unsere Progs emergen:

Code: Select all

emerge apache mod_fcgid dev-lang/php
Nachdem unser php-cgi installiert worden ist muss ein php-cgi -v unsere cgi-fcgi binary anzeigen !
Wenn nicht USE Flags überprüfen!

Und zwar so:

Code: Select all

PHP 5.1.2-gentoo (cgi-fcgi) (built: Apr 18 2006 20:15:14)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

3. Suexec2 verifizieren und eventuell ebuild anpassen

Nachdem unsere Programme installiert sind testen wir als erstes unsere Suexec2 Installation.
suexec2 -V sollte nun folgendes ausgeben:

Code: Select all

-D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_EXEC="/var/log/apache2/suexec_log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_SUEXEC_UMASK=077
 -D AP_UID_MIN=1000
 -D AP_USERDIR_SUFFIX="public_html"
Alle Parameter müssen mit unserer gewollten Konfiguration übereinstimmen! Stimmt eines der obengenannten Parameter nicht, läuft später Suexec2 nicht korrekt!
Beispiel:

Suexec2 wird nur funktionieren wenn alle eure späteren Vhosts nach /var/www liegen, sonst bekommt man so eine Fehlermeldung:

Code: Select all

command not in docroot (/home/gabelhonz/public_html/cgi-bin/printenv)
Möchte man nun allerdings ein anderes DocumentRoot verwenden so ist das natürlich möglich. Dazu kann man einfach das gewünschte ebuild anpassen
oder aus den apache sources Suexec2 mit den entsprechenden Optionen neu kompilieren. Da ich ja schon vorher weiß wo mein DOC_ROOT liegen wird
trag ich es einfach in mein ebuild und und merge es dann.
Hinweis: Hat man sein ebuild wunschgemäß geändert muss man folgendes ausführen:

Code: Select all

ebuild /usr/portage/net-www/apache/apache-2.0.xx.ebuild digest

4.FCGID Modul konfigurieren

Als nächstes ist unser fcgid Modul drann. Dazu öffnen wir:
/etc/apache2/modules.d/20_mod_fcgid.conf
und tragen ein:

Code: Select all

    <IfDefine FCGID>
 
 <IfModule !mod_fcgid.c>
  LoadModule fcgid_module     /usr/lib/apache2/modules/mod_fcgid.so
  </IfModule>
 
 <IfModule mod_fcgid.c>
 AddHandler php-fcgid .php
 
 <Location /fcgi/fcgi-starter>
 SetHandler fcgid-script
 Options +ExecCGI
 allow from all
 </Location>
 AddType application/x-httpd-php .php
 Action php-fcgid /fcgi/fcgi-starter
 
 IdleTimeout 120
##hier dann noch weitere prozessspezifischen Konfigurationen###

 </IfModule>
 
        </IfDefine>
Somit haben wir unser fcgid modul richtig konfiguriert.


5.Pfade anlegen und Berechtigungen setzen

Um unseren Vhost später zu konfigurieren legen wir als erstes einmal das neuen Directory für unseren vhost an.
Zudem brauchen wir noch ein fcgi dir für das fcgi starter script.
Bei mir sieht die Verzeichnissstruktur eines Vhosts so aus:

Code: Select all

/var/www/vhost/meine-domain.de/
/var/www/vhost/meine-domain.de/fcgi
/var/www/vhost/meine-domain.de/cgi-bin
/var/www/vhost/meine-domain.de/logs
/var/www/vhost/meine-domain.de/public_html
Im fcgi Verzeichnis legen wir eine Datei namens fcgi-starter mit folgendem Inhalt an:

Code: Select all

#!/bin/sh
PHPRC="/etc/php/cgi-php5/" <== Pfad zur php.ini, kann man natürlich ändern
export PHPRC
PHP_FCGI_CHILDREN=4 <== Eventuell anpassen
export PHP_FCGI_CHILDREN
exec /usr/bin/php-cgi <== Pfad zur php-cgi binary, kann man na klar auch ändern.
Dieses script wird benötigt um z.B jedem User eine persönliche php Konfiguration zu gewährleisten oder ein eigenes binary.

Das ganze ausführbar machen und natürlich nicht vergessen die Berechtigungen richtig zu setzen !
Zudem sollte man das Script für jeden unzugänglich machen mit:

Code: Select all

chattr +i -V fcgi-starter

6. httpd.conf anpassen

Damit unsere Vhost Konfig am ende nicht allzu groß wird tragen wir folgendes in die httpd.conf ein:

Code: Select all

<Directory /var/www/vhost/*/public_html>
 AllowOverride FileInfo AuthConfig Limit Indexes
 Options MultiViews -Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
 Order allow,deny
 Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
 Order deny,allow
 Deny from all
</LimitExcept>
</Directory>

<Directory /var/www/vhost/*/fcgi>
  AllowOverride None
  Options +ExecCGI -MultiViews -Indexes
  Order allow,deny
  Allow from all
</Directory>

<Directory /var/www/vhost/*/cgi-bin>
 AllowOverride None
 Options +ExecCGI -MultiViews -Indexes
 Order allow,deny
 Allow from all
</Directory>
Die ganzen Option wie gewünscht ändern.

7.Vhost anlegen

Als vorletzten Schritt legen wir nun unseren Vhost folgendermaßen an:

Code: Select all

<VirtualHost *:80>
 ServerAdmin me@domain.de
 ServerName www.meine-domain.de
 ServerAlias meine-domain.de
 
  DocumentRoot /var/www/vhost/meine-domain.de/public_html
  Alias /fcgi /var/www/vhost/meine-domain.de/fcgi
  ScriptAlias /cgi-bin /var/www/meine-domain.de/cgi-bin
  DirectoryIndex index.php index.html index.htm
  SuexecUserGroup user group (hier natürlich richtige Daten eintragen)
 
ErrorLog /var/www/vhost/meine-domain.de/logs/error.log
LogLevel warn
CustomLog /var/www/vhost/meine-domain.de/logs/acces.log combined
</VirtualHost>
8.Apache Startoptionen ändern

Als letztes nun die Apache Startoptionen in /etc/conf.d/apache2 auf :

Code: Select all

APACHE2_OPTS="-D FCGID"
setzen.

Das wars. Apache starten und fertig das ganze.
Jetzt sollte man sobald ein php script über den vhost aufgerufen wird mittels pstree -Au sehen können was unter welchem User läuft.
bei mir heißt der User test.

Code: Select all

|-apache2-+-7*[apache2(apache)]
     |         `-apache2(apache)---php-cgi(test)---4*[php-cgi]

Ich hoffe mir sind nicht irgendwelche Fehler reingesprungen.
Viel Spaß

gruß


http://fastcgi.coremail.cn/doc.htm
http://de.php.net/security.cgi-bin
Wenn Chuck Norris ins Wasser fällt, wird Chuck Norris nicht nass. Wasser wird Chuck Norris.
Top
Post Reply
  • Print view
1 post • Page 1 of 1

Return to “Deutsche Dokumentation”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy

 

 

magic