Apache Webserver
Beschreibung
Apache ist ein Webserver.
Contents
Tips und Tricks
Basic .htaccess Authentifizierung einrichten
siehe auch Apache/htaccess
Das .htaccess File sagt dem Apache das eine erfolgreiche Authentifizierung stattfinden muss um die Webseiten eines Directories anzeigen zu koennen. Hierzu muss in jedem Verzeichnis, das geschuetzt werden soll, eine .htaccess Datei wie diese liegen.
AuthName "Irgendwas" AuthType Basic AuthUserFile /path/to/your/htpasswd.users require valid-user
nun kann man mit htpasswd -c /path/to/your/htpasswd.users username ein Passwortfile anlegen. Dieses muss fuer den Apacheuser lesbar sein.
Zu beachten ist, dass .htaccess nur funktioniert, wenn AllowOverride fuer das jeweilige Verzeichnis aktiviert ist.
Apache mit suexec
Was ist das?
CGIs und SSIs werden mit suexec unterhalb von
DocumentRoots von virtuellen Webservern, die eine User und Group-Direktive haben ausgefuehrt. suexec ist ein Wrapper der zuerst der entsprechende User wird, und dann das entsprechende CGI bzw. SSI aufruft.
Das hat den Vorteil, dass CGIs von verschiedenen Usern mit dessen Rechten laufen, und die Daten die sie ablegen, koennen so gesichert werden, dass sie nicht von anderen Usern oder anderen virtuellen Webservern zugaenglich sind.
Installation unter FreeBSD
Zuerst sieht man sich das Makefile des Ports an:
danielt@hamlet:/usr/ports/www/apache13> grep \^APACHE_SUEXEC Makefile
APACHE_SUEXEC_DOCROOT?=${DOCUMENT_ROOT}
APACHE_SUEXEC_LOG?=/var/log/httpd-suexec.log
APACHE_SUEXEC_USERDIR?=public_html
APACHE_SUEXEC_UIDMIN?=1000
APACHE_SUEXEC_GIDMIN?=1000
APACHE_SUEXEC_CALLER?=wwwDas sind die Defaultwerte, die sind fuer meinen Rechner gaenzlich ungeeignet, weil meine DocumentRoots alle unter /home/apache sind, und die UserDir, befinden sich unter /home/apache/user/<username>. Ausserdem fangen die Userids fuer normale User bei mir schon bei 100 an, dasselbe gilt fuer die Groupids
Deshalb installiere ich meinen Apache so:
make install WITH_APACHE_SUEXEC=yes APACHE_SUEXEC_DOCROOT=/home/apache \
APACHE_SUEXEC_UIDMIN=100 APACHE_SUEXEC_GIDMIN=100 \
APACHE_SUEXEC_USERDIR=/home/apache/user
Test
Da mein APACHE_SUEXEC_USERDIR=/home/apache/user ist, muss die UserDir-Direktive genauso lauten. Jetzt koennen sich die User in ihrem Webverzeichnis, ein cgi-Verzeichnis anlegen, z. B. mit einer .htaccess. Zum Beispiel:
$ cat > /home/apache/user/danielt/cgi/.htaccess SetHandler cgi-script Options +ExecCGI ^D $ cat > /home/apache/user/danielt/cgi/test.pl #!/usr/bin/perl print "Content-Type: text/plain\n\n"; print "Real: $< Effective: $>\n"; ^D $ chmod u+rx,go-rwx /home/apache/user/danielt/cgi/.htaccess
Wenn man jetzt das Skript ueber den Browser aufruft, sollte da 2 mal meine UserID stehen. Bei einem Internal Server Error hat man die Dateirechte falsch gesetzt. suexec fuehrt Dateien nur unter bestimmten Bedingungen aus.
Wurde der suexec-Wrapper mit der richtigen Anzahl an Argumenten aufgerufen?
Das sollte der Apache richtig machen.Ist der User, der den Wrapper aufgerufen hat, ein gültiger User?
Der User, der den Wrapper aufruft, muss in der passwd stehen.Darf der User den Wrapper aufrufen?
Es gibt nur einen User, der das darf, naemlich der APACHE_SUEXEC_CALLER, also defaultmässig, der User www. Also die muss APACHE_SUEXEC_CALLER mit der User-Directive in der httpd.conf übereinstimmen.Hat das Programm, dass der Wrapper aufrufen soll, einen gueltigen Pfad?
Es darf nicht mit "/" beginnen, und darf keine ".." enthalten.Ist der Zieluser gültig?
Auch der Zieluser muss in der passwd stehen.Ist die Zielgruppe gültig?
Stimmt sie mit der Gruppe des Zielusers überein?Ist der Zieluser nicht root?
suexec erlaubt root das ausfuehren von CGIs/SSIs nicht.Ist die Zieluserid größer als APACHE_SUEXEC_MINUID?
Systemaccounts duerfen auch keine CGIs ausfuehren.Ist die Zielgruppenid nicht 0?
Die Superusergruppe darf auch keine CGIs/SSIs ausfuehren.Ist die Zielgruppenid größer als APACHE_SUEXEC_MINGID?
Systemgruppen duerfen nicht.Kann der Wrapper erfolgreich Zieluser und Zielgruppe werden?
setuid und setgid darf nicht fehlschlagen.- Existiert das Verzeichnis in dem das Programm sein soll?
- Is das Verzeichnis unterhalb von APACHE_SUEXEC_DOCROOT bzw. unterhalb von APACHE_SUEXEC_USERDIR?
- Ist das Verzeichnis ausschliesslich vom Zieluser beschreibbar?
- Existiert das Zielprogramm?
- Ist das Zielprogramm ausschliesslich vom Zieluser beschreibbar?
Ist das Zielprogramm nicht setgid oder setuid?
suexec führt keine Programme aus, die dann wieder ihre UserID oder GroupID ändern.- Ist die Zieluser/-gruppe die gleiche wie die des auszuführenden Programms?
- Können die Umgebungsvariablen erfolgreich, bereinigt werden?
Kann das Programm erfolgreich ausgeführt werden?
hier endet suexec und das Zielprogramm beginnt.
Tutorials
Im Web
http://httpd.apache.org/ - Offizielle Website
HomePage - Ein WikiWikiWeb zum Apache
Apache SSL
* /ApacheSSL hier steht was zu tun ist

