in meiner Konfiguration werden die Logs eines VirtualHosts in ein .logs Unterverzeichnis des DocumentRoots geschrieben.
suEXEC ist für die VirtualHosts aktiviert, da CGI Scripte und PHP unter dem jeweiligen Benutzer ausgeführt werden sollen.
In das .logs Verzeichnis soll nun ein perl Script, welches die Logdateien filtert (selbst geschrieben) und in ein .stat Unterverzeichnis soll die Statistik (AWStats). Diese Scripte sollen nicht von dem Benutzer gelöscht oder geändert werden können. Die Scripte dürfen ruhig gelesen und auch als Benutzer ausgeführt werden (alternative wäre Ausführung als www-data).
Da ich suEXEC benötige, kann ich nicht einfach den Eigentümer des Scripts ändern.
Eine Lösung die ich sehr anstrebe wäre:
Das Verzeichnis .logs oder .stat einem anderen Benutzer zuordnen. Dies funktioniert nicht, weil es ein UID/GID Mismatch Fehler von suEXEC gibt, obwohl das meiner Meinung nach nicht so dokumentiert ist (http://httpd.apache.org/docs/2.2/suexec.html#model) und eigentlich funktionieren sollte. (Das Verzeichnis ist erstmal nicht schreibbar durch andere.) suEXEC macht also mehr als es soll. PHP mit mod_fcgid macht hier keine Probleme (logischerweise).
Eine zweite Lösung wären zentrale Scripte:
Hier kommt jedoch viel Aufwand wie Authentifizierung hinzu. Bei awstats müsste man dem Script irgendwie mitteilen um welches Logverzeichnis es sich handelt, etc. Sicherlich möglich aber viel Aufwendiger und anfälliger für Fehler.
Eine dritte Lösung wäre:
... die Einführung von "logs" und "stat" subdomains in eigenen VirtualHosts mit eigenem Benutzer. Aber mir wäre auch von der Semantik her die Verzeichnisse lieber. Also so will ich es auch nicht.
Ich hoffe das suEXEC Problem lässt sich lösen oder es gibt Möglichkeiten für mich suEXEC zu umgehen und hier hoffe ich auf Hilfe. Denn die Lösung einfach dem Verzeichnis einen anderen Benutzer zu geben wäre mir sehr lieb.
Code: Select all
<VirtualHost *:80>
ServerName DOMAIN.TLD
ServerAlias DOMAIN.TLD
SuexecUserGroup BenutzerUID BenutzerGID
DocumentRoot /var/www/UID/public/
ErrorLog "|usr/sbin/rotatelogs /var/www/UID/public//.logs//%Y-%m-%d.error.log 86400 120"
CustomLog "|usr/sbin/rotatelogs /var/www/UID/public//.logs//%Y-%m-%d.access.log 86400 120" combined
<Directory /var/www/UID/public//.logs//>
AuthName "Logs"
AuthType Basic
AuthBasicAuthoritative Off
AuthUserFile /dev/null
require user UID
AuthMySQLEnable On
AuthMySQLDB DB
AuthMySQLUser USER
AuthMySQLPassword PASS
AuthMySQLUserTable TABLE
AuthMySQLNameField FIELD
AuthMySQLPasswordField FIELD
AuthMySQLPwEncryption md5
Options +Indexes
IndexOptions NameWidth=*
IndexOptions +FancyIndexing
Options +ExecCGI
AddHandler cgi-script .pl
AddType text/html .pl
</Directory>
<Directory /var/www/UID/public//>
AddHandler fcgid-script .php .php3 .php4 .php5 .php6
FCGIWrapper /var/www/cgi-bin/UID/php-fcgi .php
FCGIWrapper /var/www/cgi-bin/UID/php-fcgi .php3
FCGIWrapper /var/www/cgi-bin/UID/php-fcgi .php4
FCGIWrapper /var/www/cgi-bin/UID/php-fcgi .php5
FCGIWrapper /var/www/cgi-bin/UID/php-fcgi .php6
Options +ExecCGI
AllowOverride AuthConfig Indexes FileInfo
Order Allow,Deny
Allow from All
</Directory>
</VirtualHost>
Code: Select all
[2008-06-19 11:45:46]: uid: (BenutzerUID/BenutzerUID) gid: (BenutzerGID/BenutzerGID) cmd: perl.pl
[2008-06-19 11:45:46]: target uid/gid (BenutzerUID/BenutzerGID) mismatch with directory (www-data/www-data) or program (BenutzerUID/BenutzerGID)
[Thu Jun 19 13:45:46 2008] [error] [client] suexec policy violation: see suexec log for more details
[Thu Jun 19 13:45:46 2008] [error] [client] Premature end of script headers: perl.pl
Code: Select all
dr-xr-xr-x 3 www-data www-data 4.0K 2008-06-19 11:54 .logs
-rwxr-xr-x 1 BenutzerUID BenutzerGID 493 2008-06-18 17:06 perl.pl