Title: Der suEXEC-Wrapper

Dank des suEXEC-Wrappers können Apache-Benutzer CGI- und SSI-Programme unter anderen IDs als der des aufrufenden Webservers ausführen. Normalerweise werden CGI- oder SSI-Programme unter der User-ID des Webservers ausgeführt.

Der korrekte Einsatz dieser Möglichkeit kann die Sicherheitsrisiken beträchtlich vermindern, die sich daraus ergeben können, dass Benutzern die Entwicklung und Ausführung eigener CGI- oder SSI-Programme erlaubt wird. Bei einer fehlerhaften Konfiguration können sich jedoch viele Probleme ergeben und größere Sicherheitslücken auftreten. Wenn Sie keine Erfahrung mit setuid root-Programmen und den damit verbundenen Sicherheitsrisiken haben, wird von der Verwendung von suEXEC dringend abgeraten.

Vorbemerkungen

Vorab sind noch einige generelle Anmerkungen notwendig.

Es wird vorausgesetzt, dass Sie ein UNIX-Betriebssystem benutzen, dass setuid- und setgid-Operationen durchführen kann. Davon wird in allen Beispielen ausgegangen. Andere Betriebssysteme, die suEXEC unterstützen, können in der Konfiguration abweichen.

Zum zweiten wird davon ausgegangen, dass Sie mit den Grundkonzepten der Computersicherheit und der Administration vertraut sind. Hierzu gehören die setuid/setgid-Operationen sowie die unterschiedlichen Effekte, die sie auf Ihrem System und für Ihre Sicherheitsstufe auslösen können.

Zum Dritten wird davon ausgegangen, dass Sie eine unveränderte Version des suEXEC-Code benutzen. Der gesamte suEXEC-Code wurde sowohl von den Entwicklern als auch von zahlreichen Beta-Testern sorgfältig geprüft und getestet. Es wurden alle Vorsichtsmaßnahmen getroffen, um eine einfache aber gründlich gesicherte Codebasis zu schaffen. Veränderungen am Code können zu unerwarteten Problemen und neuen Sicherheitsrisiken führen. Es wird dringend davon abgeraten, Veränderungen am suEXEC-Code vorzunehmen, wenn Sie sich nicht bestens mit den Eigenheiten der Sicherheitsprogrammierung auskennen und nicht bereit sind, sind mit der Apache Group zu bearten.

Viertens und letztens hat sich die Apache Group dazu entschlossen, suEXEC nicht zum Bestandteil der Standardinstallation des Apache zu machen, denn die suEXEC-Konfiguration verlangt vom Administrator äußerste Aufmerksamkeit hinsichtlich vieler Details. Wenn alle erforderlichen Überlegungen zu den unterschiedlichen Einstellungen angestellt wurden, mag sich der Administrator entschließen, suEXEC mit dem normalen Verfahren zu installieren. Die Werte für die Einstellungen müssen gut bedacht und korrekt angegeben werden, um die Systemsicherheit während der Benutzung der suEXEC-Funktionalität nicht zu gefährden. Dieser komplizierte Ablauf soll die Gruppe derer, die suEXEC installieren, auf diejenigen beschränken, die vorsichtig und erfahren genug sind, um sie zu verwenden.

Das suEXEC-Sicherheitsmodell

Vor Beginn der Installation und Konfiguration von suEXEC, soll zuerst erörtert werden, was für ein Sicherheitsmodell implementiert wird. Auf diese Weise wird verständlicher, was genau innerhalb von suEXEC abläuft und welche Vorsichtsmaßnahmen zur Sicherung des Systems getroffen werden.

suEXEC basiert auf eine setuid-Wrapper, der vom Apache-Hauptserver aufgerufen wird. Dieser Wrapper wird bei einer HTTP-Anfrage nach einem CGI- oder SSI-Programm aufgerufen, für das der Administrator eine andere User-ID als die des Hauptservers vorgeschrieben hat. Einer solchen Anfrage stellt der Apache den suEXEC-Wrapper mit dem Programmnamen und der User- und Group-ID zur Verfügung, unter denen das Programm ausgeführt wird.

Der Wrapper führt dann folgenden Ablauf durch, um Erfolg oder Fehlschlag zu ermitteln. Wird eine der Bedingungen nicht erfüllt, protokolliert das Programm den Fehlschlag und wird mit einem Fehler beendet, andernfalls wird es fortgesetzt:

  1. Führt der Benutzer diesen Wrapper als zulässiger Benutzer dieses Systems aus?

    Damit wird sichergestellt, dass es sich tatsächlich um einen Systembenutzer handelt.

  2. Wurde der Wrapper mit der korrekten Anzahl Argumente aufgerufen?

    Der Wrapper wird nur ausgeführt, wenn die korrekte Anzahl von Argumenten angegeben wurde. Das korrekte Format der Argumente ist dem Server bekannt. Erhält der Wrapper nicht die korrekte Anzahl von Argumenten, dann liegt entweder ein Hack vor oder es stimmt etwas mit dem suEXEC-Teil des binären Apache nicht.

  3. Darf dieser zulässige Benutzer den Wrapper ausführen?

    Darf der Benutzer den Wrapper ausführen? Nur ein Benutzer (der Apache-Benutzer) darf dieses Programm ausführen.

  4. Liegen unsichere Verweise für das CGI- oder SSI-Programm vor?

    Enthält der Pfad zum CGI- oder SSI-Programm einen vorangestellten Backslash / oder zwei Punkte .. als Rückverweis? Das ist nicht zulässig, CGI- oder SSI-Programm müssen sich in der DocumentRoot von suEXEC befinden (siehe --with-suexec-docroot=DIR weiter unten).

  5. Ist der Name des anfordernden Benutzers gültig?

    Existiert der Benutzer?

  6. Ist der Name des anfordernden Gruppe gültig?

    Existiert die Gruppe?

  7. Handelt es sich bei dem anfordernden Benutzer nicht um den Superuser?

    Zur Zeit erlaubt suEXEC dem Benutzer root nicht die Ausführung von CGI- oder SSI-Programmen.

  8. Liegt die anfordernde User-ID oberhalb der niedrigsten ID-Nummer?

    Die niedrigste User-ID wird während der Konfiguration angegeben. Damit kann die niedrigste User-ID angegeben werden, mit der ein CGI- oder SSI-Programm ausgeführt werden darf. Auf diese Weise können Systemkonten blockiert werden.

  9. Handelt es sich bei der anfordernden Gruppe nicht um die Gruppe Superuser?

    Zur Zeit erlaubt suEXEC der Gruppe root nicht die Ausführung von CGI- oder SSI-Programmen.

  10. Liegt die anfordernde Group-ID oberhalb der niedrigsten ID-Nummer?

    Die niedrigste Group-ID wird während der Konfiguration angegeben. Damit kann die niedrigste Group-ID angegeben werden, mit der ein CGI- oder SSI-Programm ausgeführt werden darf. Auf diese Weise können Systemgruppen blockiert werden.

  11. Kann der Wrapper erfolgreich die Identität des anfordernden Benutzers und der Gruppe annehmen?

    Hier wird das Programm über setuid zum anfordernden Benutzer und über setgid zur anfordernden Gruppe. Die Gruppenzugriffsliste wird auch mit allen Gruppen initialisiert, deren Mitglied der Benutzer ist.

  12. Kann in das Verzeichnis des CGI- oder SSI-Programms gewechselt werden?

    Existiert es nicht, kann es keine Dateien enthalten und kann nicht in das Verzeichnis gewechselt werden, existiert es möglicherweise nicht.

  13. Liegt das Verzeichnis im Apache-Webbereich?

    Wenn die Anfrage einem regulären Teil des Servers gilt: Liegt das angeforderte Verzeichnis innerhalb der DocumentRoot von suEXEC? Wenn die Anfrage einem Benutzerverzeichnis gilt: Liegt das angeforderte Verzeichnis innerhalb des für suEXEC konfigurierten Benutzerverzeichnisses (siehe Konfigurationsoptionen)?

  14. Darf sonst niemand in das Verzeichnis schreiben?

    Das Verzeichnis soll nicht für andere geöffnet werden. Nur der Eigentümer darf den Verzeichnisinhalt ändern.

  15. Existiert das CGI- oder SSI-Programm?

    Ist es nicht vorhanden, kann es auch nicht ausgeführt werden.

  16. Hat sonst niemand Schreibrechte für das CGI- oder SSI-Programm?

    Nur der Eigentümer darf das CGI- oder SSI-Programm ändern.

  17. Handelt es sich bei dem CGI- oder SSI-Programm nicht um setuid oder setgid?

    Es dürfen keine Programme ausgeführt werden, die die User- oder Group-ID wieder ändern.

  18. Stimmen Benutzer und Gruppe mit der des Programms überein?

    Ist der Benutzer Eigentümer der Datei?

  19. Lässt sich die Prozessumgebung problemlos bereinigen, um sichere Operationen zu gewährleisten?

    suEXEC bereinigt die Prozessumgebung durch Einrichtung eines sicheren Ausführungspfades (der während der Konfiguration definiert wird) sowie durch ausschließliches Weiterreichen der Variablen, deren Namen in der Liste der sicheren Umgebung aufgeführt werden (ebenfalls während der Konfiguration erzeugt).

  20. Ist das CGI- oder SSI-Programm problemlos zu erhalten und auszuführen?

    An dieser Stelle endet suEXEC und das CGI- oder SSI-Programm beginnt.

Dies ist das Standardverfahren nach dem Sicherheitsmodell des suEXEC-Wrapper. Es ist ein wenig stringent und kann dem CGI- oder SSI-Design neue Einschränkungen und Vorgaben auferlegen, es wurde jedoch umsichtig und schrittweise vor dem Hintergrund der Sicherheitsbedürfnisse entwickelt.

Weitere Informationen darüber, inwieweit dieses Sicherheitsmodell Ihre Möglichkeiten bei der Serverkonfiguration einschränken kann und wie Sicherheitsrisiken mit einer korrekten suEXEC-Konfiguration vermieden werden können, finden Sie im Abschnitt "Warnungen und Beispiele".

Konfiguration & Installation

Konfigurationsoptionen für suEXEC

--enable-suexec
Mit dieser Option wird der suEXEC-Wrapper aktiviert, der standardmäßig nicht installiert wird. Mit der Option --enable-suexec muss mindestens einmal die Option --with-suexec-xxxxx angegeben werden, damit das APACI (Apache AutoConf-Style Interface = das Konfigurationsskript) die Anweisung akzeptiert.
--with-suexec-bin=Pfad
Der Pfad zur binären suexec-Datei muss aus Sicherheitsgründen fest kodiert werden. Mit dieser Option wird der Standardpfad überschrieben, z.B. --with-suexec-bin=/usr/sbin/suexec
--with-suexec-caller=User-ID
Der Benutzername, unter dem der Apache normalerweise ausgeführt wird. Nur von diesem Benutzer darf das Programm ausgeführt werden.
--with-suexec-userdir=Verzeichnis
Das Unterverzeichnis des Stammverzeichnisses in dem suEXEC zulässig ist. Alle ausführbaren Dateien aus diesem Verzeichnis können von suEXEC unter diesem Benutzer ausgeführt werden und sollten deshalb "sichere" Programme sein. Verwenden Sie eine "einfache" UserDir-Direktive (ohne *), sollte hier der gleiche Wert gesetzt werden. suEXEC funktioniert nicht korrekt, wenn die UserDir-Direktive auf ein Verzeichnis verweist, das nicht mit dem Stammverzeichnis des Benutzers übereinstimmt (wie es in der Passwortdatei angegeben wird). Die Vorgabe ist public_html.
Gibt es virtuelle Hosts mit jeweils unterschiedlichen UserDir-Direktiven, dann müssen sie sich alle in einem übergeordneten Verzeichnis befinden. Geben Sie den Namen dieses übergeordneten Verzeichnisses mit dieser Option an. Wird diese Definition nicht korrekt durchgeführt, funktionieren CGI-Anfragen mit ~userdir nicht!
--with-suexec-docroot=Verzeichnis
Gleiche Angabe wie bei der DocumentRoot-Anweisung für den Server. Dies ist neben dem Benutzerverzeichnis die einzige Hierarchie, die für suEXEC benutzt werden kann. Das Standardverzeichnis ist der Wert von --datadir mit dem Suffix /htdocs (wird beispielsweise --datadir=/home/apache definiert, dann wird das Verzeichnis /home/apache/htdocs als Verzeichnis für die Dokumente des suEXEC-Wrappers genommen.
--with-suexec-uidmin=User-ID
Legt die niedrigste User-ID für den suEXEC-Benutzer fest. Bei den meisten Systemen liegt dieser Wert bei 500 oder 100. 100 ist die Voreinstellung.
--with-suexec-gidmin=Group-ID
Legt die niedrigste Group-ID für den suEXEC-Benutzer fest. Bei den meisten Systemen liegt dieser Wert bei 500 oder 100. 100 ist die Voreinstellung.
--with-suexec-logfile=Datei
Angabe der Protokolldatei für alle suEXEC-Transaktionen und Fehlermeldungen (für die Überwachung und das Debugging). Standardmäßig heißt die Protokolldatei suexec_log und befindet sich im normalen Verzeichnis für die Protokolldateien (--logfiledir).
--with-suexec-safepath=Pfad
Legt eine sichere Pfadumgebung für die Übergabe an CGI-Programme fest. Die Voreinstellung ist /usr/local/bin:/usr/bin:/bin.

Die suEXEC-Konfiguration überprüfen
Bevor Sie den suEXEC-Wrapper kompilieren und installieren, können Sie die Konfiguration mit der --layout-Option testen.
Die Ausgabe:

suEXEC setup:
suexec binary: /usr/local/apache2/sbin/suexec
document root: /usr/local/apache2/share/htdocs
userdir suffix: public_html
logfile: /usr/local/apache2/var/log/suexec_log
safe path: /usr/local/bin:/usr/bin:/bin
caller ID: www
minimum user ID: 100
minimum group ID: 100

Den suEXEC-Wrapper kompilieren und installieren
Wurde die suEXEC-Eigenschaft mit der --enable-suexec-Option aktiviert, wird die binäre suexec-Datei zusammen mit dem Apache automatisch aufgebaut, wenn Sie den make-Befehl ausführen.
Wurden alle Komponenten eingerichtet, können Sie sie mit dem Befehl make install installieren. Die binäre suexec-Datei wird in dem mit der --sbindir-Option angegebenen Verzeichnis installiert. Das Standardverzeichnis ist /usr/local/apache2/sbin/suexec.
Bitte beachten Sie, dass Sie root-Rechte für diese Installation benötigen. Damit der Wrapper die User-ID setzen kann, muss er mit root als Eigentümer installiert werden und das setuserid-Bit für den Dateimodus muss gesetzt werden.

Wasserdichte Berechtigungen
Der suEXEC-Wrapper überprüft zwar, ob der Aufrufende der mit der Option --with-suexec-caller angegebene Benutzer ist, es ist aber dennoch möglich, das ein von suEXEC benutzter System- oder Bibliotheksaufruf vor dieser Überprüfung auf Ihrem System ausgenutzt werden kann. Um das zu verhindern und weil es generell angebracht ist, sollten Sie über der Dateirechte sicherstellen, das nur die Gruppe, die den Apache ausführt, suEXEC ausführen kann.

Ist Ihr Webserver beispielsweise wie folgt konfiguriert:

User www
Group webgroup

und wird suexec im Verzeichnis /usr/local/apache2/sbin/suexec installiert, sollten Sie folgende Befehle ausführen:

chgrp webgroup /usr/local/apache2/bin/suexec
chmod 4750 /usr/local/apache2/bin/suexec

Damit wird sichergestellt, dass nur die Gruppe, die den Apache ausführt, den suEXEC-Wrapper ausführen kann.

suEXEC aktivieren & deaktivieren

Beim Start sucht der Apache in dem mit der --sbindir-Option angegebenen Verzeichnis nach der Datei suexec (Voreinstellung ist das Verzeichnis /usr/local/apache/sbin/suexec). Findet er dort einen korrekt konfigurierten suEXEC-Wrapper, wird folgende Meldung in das Fehlerprotokoll geschrieben:

[notice] suEXEC mechanism enabled (Wrapper: /path/to/suexec)

Erscheint diese Meldung beim Serverstart nicht, findet der Server das Wrapper-Programm wahrscheinlich nicht im erwarteten Verzeichnis oder das Programm wurde nicht mit setuid root installiert.

Soll der suEXEC-Mechanismus zum ersten Mal aktiviert werden und es wird bereits ein Apache-Server ausgeführt, muss der Prozess gestoppt und der Server neu gestartet werden. Ein Neustart mit einem einfachen HUP- oder USR1-Signal reicht nicht aus.

Soll suEXEC deaktiviert werden, sollte der Server gestoppt und neu gestartet werden, nachdem die suexec-Datei entfernt wurde.

suEXEC benutzen

Virtuelle Hosts:
Eine Möglichkeit ist die Verwendung des suEXEC-Wrapper über die SuexecUserGroup-Direktive in den VirtualHost-Definitionen. Wird diese Direktive auf andere Werte als die User-ID des Hauptservers gesetzt, werden alle Anfragen nach CGI-Ressourcen unter dem Benutzer und der Guppe ausgeführt, die für diesen virtuellen Host definiert wurden. Wird diese Direktive in einem VirtualHost-Abschnitt nicht angegeben, wird die User-ID des Hauptservers genommen.

Benutzerverzeichnisse:
Der suEXEC-Wrapper kann CGI-Programme auch unter dem Benutzer ausführen, an den die Anfrage gerichtet ist. Dies geschieht mit dem Zeichen ~, das der User-ID vorangestellt wird, für die Ausführung erfolgen soll. Damit das funktioniert, muss die CGI-Ausführung für den Benutzer aktiviert sein und das Skript muss der oben beschriebenen strengen Sicherheitsüberprüfung gerecht werden.

Debugging

Der suEXEC-Wrapper protokolliert Transaktionen in der mit der Option --with-suexec-logfile angegebenen Datei. Überprüfen Sie mit einem Blick in diese Datei und in das Fehlerprotokoll, ob Sie den Wrapper korrekt installiert haben und wo eventuell Fehler auftreten.

Warnungen & Beispiele

Achtung! Dieser Abschnitt ist möglicherweise nicht vollständig. Den aktuellen Stand finden Sie in der Online-Dokumentaion der Apache Group.

In Verbindung mit dem Wrapper gibt es nur einige wenige interessante Punkte, die Einschränkungen für die Serverkonfiguration bedeuten können. Bitte lesen Sie diese Hinweise, bevor Sie einen Bug-Report bezüglich suEXEC verschicken.

  • Einschränkungen für die Hierarchie

    Aus Sicherheits- und Effizienzgründen müssen alle suEXEC-Anfragen bei Anfragen an virtuelle Host sich auf eine Dokumentverzeichnis oberster Ebene oder bei Anfragen nach Benutzerverzeichnissen auf ein Dokumentverzeichnis des Benutzers auf oberster Ebene beziehen. Sind beispielsweise vier virtuelle Host konfiguriert, müssen die Dokumentverzeichnisse die virtuellen Hosts so strukturiert sein, dass sie zu zum Dokumentverzeichnis der Dokumenthierarchie des Hauptservers gehören, damit suEXEC für die virtuellen Hosts genutzt werden kann.

  • Die Umgebungsvariable PATH

    Eine Änderung dieser Variablen kann gefährlich sein. Sorgen Sie dafür, dass es sich bei jeden angegebenen Pfad um ein vertrautes Verzeichnis handelt, damit niemand ein Trojanisches Pferd in ihnen ausführen kann.

  • Änderungen am suEXEC-Code

    Es sei noch einmal darauf hingewiesen, dass Änderungen am suEXEC-Code schwerwiegende Folgen nach sich ziehen können, wenn sie nicht mit der erforderlichen Kompetenz durchgeführt werden.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to