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.
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.
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:
-
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.
-
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.
-
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.
-
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). -
Ist der Name des anfordernden Benutzers gültig?
Existiert der Benutzer?
-
Ist der Name des anfordernden Gruppe gültig?
Existiert die Gruppe?
-
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. -
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.
-
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. -
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.
-
Kann der Wrapper erfolgreich die Identität des anfordernden
Benutzers und der Gruppe annehmen?
Hier wird das Programm über
setuid
zum anfordernden Benutzer und übersetgid
zur anfordernden Gruppe. Die Gruppenzugriffsliste wird auch mit allen Gruppen initialisiert, deren Mitglied der Benutzer ist. -
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.
-
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)? -
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.
-
Existiert das CGI- oder SSI-Programm?
Ist es nicht vorhanden, kann es auch nicht ausgeführt werden.
-
Hat sonst niemand Schreibrechte für das CGI- oder
SSI-Programm?
Nur der Eigentümer darf das CGI- oder SSI-Programm ändern.
-
Handelt es sich bei dem CGI- oder SSI-Programm nicht um
setuid
odersetgid
?Es dürfen keine Programme ausgeführt werden, die die User- oder Group-ID wieder ändern.
-
Stimmen Benutzer und Gruppe mit der des Programms überein?
Ist der Benutzer Eigentümer der Datei?
-
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).
-
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".
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 dieUserDir
-Direktive auf ein Verzeichnis verweist, das nicht mit dem Stammverzeichnis des Benutzers übereinstimmt (wie es in der Passwortdatei angegeben wird). Die Vorgabe istpublic_html
.
Gibt es virtuelle Hosts mit jeweils unterschiedlichenUserDir
-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 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:
Group webgroup
und wird suexec
im Verzeichnis
/usr/local/apache2/sbin/suexec
installiert, sollten Sie folgende
Befehle ausführen:
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.
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:
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.
Virtuelle Hosts:
Eine Möglichkeit ist die Verwendung
des suEXEC-Wrapper über die
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.
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.
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]