Apache, PHP & SuExec auf CentOS

slashwalker

New Member
Hallo,
ich habe hier einen Centos 5 Server mit Apache2 und PHP5.

Um nicht ständig einen Rechtekonflikt zwischen Apache und FTP-User zu bekommen, möchte ich PHP unter dem FTP-User ausführen. Dazu möchte ich SuExec nutzen.

Also habe ich mir mod_fcgid installiert und in meiner vhost folgendes eingetragen:

...
...
SuexecUserGroup slashwalker slashwalker
<Files ~ (\.php)>
SetHandler fcgid-script
FCGIWrapper /usr/bin/php-cgi .php
Options +ExecCGI
allow from all
</Files>
...

Damit wirft mir der Apache einen 500 um die Ohren. Begründung in der suexec.log: Not in DocRoot.

Also habe ich auf einem Server mit Plesk 9.5 gespickelt, wie es dort gelöst wurde.

Plesk verwendet einen Wrapper unter /var/www/cgi-bin/cgi_wrapper/cgi_wrapper

Also habe ich mir auch einen Wrapper angelegt und meine vhost.conf geändert:

...
...
SuexecUserGroup slashwalker slashwalker
<Files ~ (\.php)>
SetHandler fcgid-script
FCGIWrapper /var/www/cgi-bin/php-wrapper .php
Options +ExecCGI
allow from all
</Files>
...

Und nun kommt der Teil, wo ich nicht mehr richtig durchblicke.
Auf dem Plesk Server gehört der Wrapper root:root und hat 755.
Auf meinem Server bekomm ich damit einen Fehler (UID/GID mismatch).
Ich muss den Ordner cgi-bin und den Wrapper dem FTP-User und dessen Gruppe zuordnen.

Auf dem Plesk Server funktioniert suexec -V nicht (danke Parallels, *** euch :mad: ), ich kann also nicht nachvollziehen, was dort geändert wurde.

Stand jetzt, müsste ich also für jeden User einen eigenen Wrapper anlegen, der auch wirklich dem User/Group gehört. Kann ja nicht sein oder?
 
Ich benutze zwar keine Administrationstools wie Plesk oder Confixx, aber seit Jahren schon php + suexec + fcgid:

Ich habe für jeden User einen Bash-Wrapper, der das php-Binary startet. Durch diesen wird auch die für jeden User gültige php.ini festgelegt - diese Flexibilität ist ja gerade ein Vorteil von dem Konzept.

Bei mir sieht die Ordnerstruktur so aus (von den altüberlieferten cgi-bin Ordnern halte ich nicht so viel):

Code:
var/www
   | webuser1
       | conf
       | htdocs
       | log
       | tmp
   | webuser2
       | conf
       | htdocs
       | log
       | tmp


Im conf-Ordner liegen bei mir der Wrapper und die php.ini, tmp hält die Session- und temporären Uploaddaten, htdocs ist der Webroot und in log werden die Logdateien von httpd und php abgelegt.
 
Ja, genau so wird es auch in den ganzen Tutorials beschrieben.
Mich würde aber interessieren, wie Plesk es hinbekommt.

Auf Plesk Servern gibt es nur einen Bash Wrapper, den alle webuser nutzen. Und dieser Bash Wrapper gehört root. Das Problem ist, das Plesk wohl die suexec so "manipuliert" hat, das suexec -V unterdrückt wird.

Aber es muss ja offensichtlich möglich sein, einen zentralen Bash Wrapper zu nutzen.
 
Es gibt wohl einen Patch für suexec, der den Eigentümer nicht mehr prüft, aber damit geht auch ein Sicherheitsfeature von suexec verloren.
 
Back
Top