SuEXEC
topic - Kurzbeschreibung
Beschreibung
Die Funktion suEXEC bietet Benutzern des Apache HTTP Servers die Möglichkeit, CGI- und SSI-Programme unter anderen Benutzerkennungen als der Benutzerkennung des aufrufenden Webservers auszuführen
- Normalerweise wird ein CGI- oder SSI-Programm unter demselben Benutzer ausgeführt, unter dem auch der Webserver läuft
Richtig eingesetzt, kann diese Funktion die Sicherheitsrisiken erheblich verringern, die damit verbunden sind, dass Benutzer private CGI- oder SSI-Programme entwickeln und ausführen können
- Wenn suEXEC jedoch nicht richtig konfiguriert ist, kann es eine Reihe von Problemen verursachen und möglicherweise neue Sicherheitslücken auf Ihrem Computer schaffen
- Wenn Sie mit der Verwaltung von Setuid-Root-Programmen und den damit verbundenen Sicherheitsproblemen nicht vertraut sind, empfehlen wir Ihnen dringend, die Verwendung von suEXEC nicht in Betracht zu ziehen
Installation
Syntax
Optionen
Parameter
Umgebungsvariablen
Exit-Status
Anwendung
Fehlerbehebung
Konfiguration
Dateien
Anhang
Siehe auch
Sicherheit
Dokumentation
Man-Pages
Info-Pages
Links
Projekt
Weblinks
TMP
Apache2, PHP-FPM, Suexec
Nach dem Wechsel auf Ubuntu 16.04 LTS sollte eine weitere Sicherheitsfunktion genutzt werden
- Jede PHP-Webseite soll als eigenständiger Benutzer ausgeführt werden, damit ein Einbruch nicht die übrigen Webseiten betrifft
Ziele
Folgende Ziele werden umgesetzt
- Jede Webseite nutzt einen PHP-Prozess mit eigener Benutzerkennung
- Jede Webseite nutzt einen eigenen Benutzer für die Dateien
Erforderliche Pakete
Folgende Pakete werden benötigt
- libapache2-mod-fastcgi
- php-fpm
- apache2-suexec-custom
Diese Pakete werden nicht mehr benötigt
- libapache2-mod-php
- libapache2-mod-fcgid
Umsetzung
Benutzer hinzufügen
Für den virtuellen Host wird eine neue Gruppe und ein neuer Benutzer erzeugt:
addgroup --system www-drupal8 adduser --system --home /home/www-drupal8 www-drupal8
FPM-Pool konfigurieren
PHP-FPM (FastCGI Process Manager) sorgt für den Start und die Überwachung der PHP-Prozesse, die der Apache über die Fast-CGI-Schnittstelle anspricht
- Im Verzeichnis pool.d wird festgelegt, unter welcher Benutzerkennung der Prozess läuft
- Eine zusätzliche Datei /etc/php/7.1/fpm/pool.d/drupal8.conf stellt den weiteren Pool bereit
- /etc/php/7.1/fpm/pool.d/drupal8.conf
[drupal8] user = www-drupal8 group = www-drupal8
listen = /run/php/php7.1-fpm-drupal8.sock listen.owner = www-data listen.group = www-data
pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
Apache konfigurieren
Etwas umständlich ist der Webserver zu konfigurieren. Über eine neue Datei /etc/apache2/conf-available/php7-fcgi.conf wird die Zuordnung der PHP-CGI-Prozesse gesteuert
- /etc/apache2/conf-available/php7-fcgi.conf
<IfModule mod_fastcgi.c> # Common Action php7-fcgi /php7-fcgi Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.1-fpm.sock -pass-header Authorization <Location /php7-fcgi> Require all granted </Location>
# Drupal 8 Action php7-drupal8 /php7-drupal8 Alias /php7-drupal8 /usr/lib/cgi-bin/php7-drupal8 FastCgiExternalServer /usr/lib/cgi-bin/php7-drupal8 -socket /run/php/php7.1-fpm-drupal8.sock -pass-header Authorization <Location /php7-drupal8> Require all granted </Location> </IfModule>
Anschließend wird der virtuellen Host in der Datei /etc/apache2/sites-available/100-drupal8.conf eingestellt
- Wichtig sind die Anweisungen SuexecUserGroup zum Wechsel des Benutzers des Apaches und AddHandler zur Zuweisung des richtigen PHP-Prozesses
- /etc/apache2/sites-available/100-drupal8.conf
<VirtualHost *:443> DocumentRoot /srv/www/vhosts/drupal8 ServerName drupal8
SuexecUserGroup www-drupal8 www-drupal8 AddHandler php7-drupal8 .php
Include /etc/apache2/includes/ssl ServerAdmin webmaster@qwirl.eu CustomLog /var/log/apache2/drupal8-access_log combined ErrorLog /var/log/apache2/drupal8-error_log <Directory /srv/www/vhosts/drupal8> AllowOverride All Options FollowSymLinks Require all granted </Directory> </VirtualHost>
Damit Suexec das richtige DocumentRoot-Verzeichnis kennt, wird es in der Datei /etc/apache2/suexec/www-drupal8 konfiguriert
- /etc/apache2/suexec/www-drupal8
/srv/www/vhost/drupal8 # public_html/cgi-bin # The first two lines contain the suexec document root and the suexec userdir # suffix. If one of them is disabled by prepending a # character, suexec will # refuse the corresponding type of request # This config file is only used by the apache2-suexec-custom package. See the # suexec man page included in the package for more details
Dienste konfigurieren und starten
# a2enconf php7-fcgi # a2ensite 100-drupal8 # systemctl enable php7.1-fpm # systemctl start php7.1-fpm # systemctl restart apache2
Zusand überwachen
# systemctl status php7.1-fpm
● php7.1-fpm.service - The PHP 7.1 FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php7.1-fpm.service; enabled; vendor preset: enabled) Active: active (running) since Sa 2017-01-21 08:46:08 CET; 2h 17min ago Docs: man:php-fpm7.1(8) Process: 18645 ExecReload=/bin/kill -USR2 $MAINPID (code=exited, status=0/SUCCESS) Main PID: 11765 (php-fpm7.1) Status: "Processes active: 0, idle: 11, Requests: 3247, slow: 0, Traffic: 0.5req/sec" CGroup: /system.slice/php7.1-fpm.service ├─11765 php-fpm: master process (/etc/php/7.1/fpm/php-fpm.conf) ├─18648 php-fpm: pool drupal8 ├─18649 php-fpm: pool drupal8 ├─18907 php-fpm: pool www ├─19236 php-fpm: pool drupal8 ├─20705 php-fpm: pool www └─30262 php-fpm: pool www