SuEXEC

Aus Foxwiki

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

  1. Jede Webseite nutzt einen PHP-Prozess mit eigener Benutzerkennung
  2. 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