Bei Debian Derivaten läuft der Apache in der Regel mit www-data Benutzerrechten. Will man aber, dass der Apache unter verschiedenen Benutzern läuft wird es schon schwieriger. Da gibt es Lösungen wie zum Beispiel mod_fcgid, PHP-FPM oder mpm-itk. Besonders das itk Modul fand ich im Vergleich zu PHP-FPM, sehr einfach zu konfigurieren. Getestet mit Debian 8 und Ubuntu 14.04.
Ein kleiness Beispiel:
apt-get install libapache2-mpm-itk
und in der jeweiligen Vhost Konfiguration trägt man folgendes ein:
<IfModule mpm_itk_module> AssignUserId henry www-data </IfModule>
Wobei henry der Benutzer und www-data die Gruppe ist.
Will man testen ob alles funktioniert, kann man einfach folgendes Skript ausprobieren:
<?php $processUser = posix_getpwuid(posix_geteuid()); print $processUser['name']; ?>
Da sollte dann bei meinem Beispiel „henry“ angezeigt werden. Ansonsten einfach mal eine Datei via Webinterface hochladen und schauen wem Sie gehört.
Wichtig dabei ist, dass die jeweiligen Benutzer und Gruppen existieren müssen. Existiert z .B. kein henry oder keine Gruppe www-data, startet auch der Apache nicht. Bedeutet auch, falls man mit einer LDAP Benutzerverwaltung arbeitet und der LDAP läuft nicht stabil, sollte man die Benutzer aus dem LDAP auf den jeweiligen Webserver syncen. Auf der MPM ITK Seite findet man noch diverse andere Parameter wie z.B. MaxClientsVHost, AssignUserIDExpr, LimitUIDRange usw.
Die Anpassungen am System sind minimal, daher kann man das ITK Modul ohne großen Aufwand testen. Hat man sehr viele Vhost und arbeitet nicht mit Puppet&Co kann man auch mit Apache Macros arbeiten, dann würde der Eintrag in etwa so aussehen:
in der vhost.conf:
Use itkmodul henry www-data
in der jeweiligen macro.conf
<Macro itkmodul $username $group> <IfModule mpm_itk_module> AssignUserID $username $group </IfModule> </Macro>
Inwieweit das ITK Modul zusätzliche Sicherheitsprobleme mit sich bringen kann, hängt vom jeweiligen System ab und wie es konfiguriert ist. Da kann man sicherlich schnell etwas konstruieren.
Update: Anscheinend funktioniert das Modul nur für userids < 65535. (link). Eventuell besteht das Problem bei Ubuntu 16.04 nicht mehr (Test folgt).