Apache Webserver

Beschreibung

Apache ist ein Webserver.

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

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?=www

Das 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.

  1. Wurde der suexec-Wrapper mit der richtigen Anzahl an Argumenten aufgerufen?
    Das sollte der Apache richtig machen.

  2. Ist der User, der den Wrapper aufgerufen hat, ein gültiger User?
    Der User, der den Wrapper aufruft, muss in der passwd stehen.

  3. 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.

  4. Hat das Programm, dass der Wrapper aufrufen soll, einen gueltigen Pfad?
    Es darf nicht mit "/" beginnen, und darf keine ".." enthalten.

  5. Ist der Zieluser gültig?
    Auch der Zieluser muss in der passwd stehen.

  6. Ist die Zielgruppe gültig?
    Stimmt sie mit der Gruppe des Zielusers überein?

  7. Ist der Zieluser nicht root?
    suexec erlaubt root das ausfuehren von CGIs/SSIs nicht.

  8. Ist die Zieluserid größer als APACHE_SUEXEC_MINUID?
    Systemaccounts duerfen auch keine CGIs ausfuehren.

  9. Ist die Zielgruppenid nicht 0?
    Die Superusergruppe darf auch keine CGIs/SSIs ausfuehren.

  10. Ist die Zielgruppenid größer als APACHE_SUEXEC_MINGID?
    Systemgruppen duerfen nicht.

  11. Kann der Wrapper erfolgreich Zieluser und Zielgruppe werden?
    setuid und setgid darf nicht fehlschlagen.

  12. Existiert das Verzeichnis in dem das Programm sein soll?
  13. Is das Verzeichnis unterhalb von APACHE_SUEXEC_DOCROOT bzw. unterhalb von APACHE_SUEXEC_USERDIR?
  14. Ist das Verzeichnis ausschliesslich vom Zieluser beschreibbar?
  15. Existiert das Zielprogramm?
  16. Ist das Zielprogramm ausschliesslich vom Zieluser beschreibbar?
  17. Ist das Zielprogramm nicht setgid oder setuid?
    suexec führt keine Programme aus, die dann wieder ihre UserID oder GroupID ändern.

  18. Ist die Zieluser/-gruppe die gleiche wie die des auszuführenden Programms?
  19. Können die Umgebungsvariablen erfolgreich, bereinigt werden?
  20. Kann das Programm erfolgreich ausgeführt werden?
    hier endet suexec und das Zielprogramm beginnt.

Tutorials

Im Web

Apache SSL

* /ApacheSSL hier steht was zu tun ist :)

Apache (last edited 2008-07-14 09:55:40 by localhost)