Suexec nachträglich einbinden?

Anzeige:

djrick

Registered User
Hallöchen,

Ich hab ein Problem mit einem Linux Server, der mit Confixx 3.3.4 arbeitet.

Per default war Confixx mit suPHP für Apache2 installiert. Das hat jedoch hinten und vorne bei mir nicht so geklappt wie ich mir das vorgestellt hab. Dann hab ich wieder auf mod_php gewechelt, da ich damit die besseren Erfahrungen gemacht hatte.

Jetzt tut sich allerdings noch ein Problem auf: Der Apache läuft mit dem User "www-data" und wenn jetzt ein Confixxkunde Sachen per HTTP hochläd / erstellt, beispielsweise Fotoupload oder Ähnliches, dann werden diese Dateien natürlich mit dem User / der Gruppe: www-data erstellt. Was zwar funktioniert doch spätestens wenn ein User "seine" Dateien per FTP bearbeiten will kommen schon die Probleme auf.

Um dieses Problem zu umgehen arbeitet Confixx ja eigentlich mit suEXEC. Allerdings, lautet jetzt die Frage: Wie bekomme ich Confixx dazu das auch zu nutzen? Wenn ich mir die Vhost Datei eines beliebigen Confixxusers anschaue fehlen dort die entsprechenden Eintragungen, auch mit der admin.pl von Confixx kann ich nichts derartiges finden. Die Manual sagt auch recht wenig zu diesem Thema. Das Modul suexec selbst ist im Apache enabled und läuft auch.

Hilfe...? :)
 

net-spacy

Blog Benutzer
Hallo Rick,

eine nachträgliche Umstellung von mod_php auf suPHP ist eigentlich ohne großen Probleme möglich!

Zwischenfrage: Welche Distri. läuft? Debian? SuSE? Gentoo? etc.?

Wichtig ist, dass man suPHP & suExec als Modul ( Apache ) lädt, und mod_php anschließend in der Confixx-Admin-Datei auf suPHP ändert.

Wichtig ist, dass man nach der Änderung ein "update" durchführt!

Standartpfad:
/root/confixx/admin/updates

In diesem Verzeichnis dann die Datei:
./update_3.x.pl
ausführen! Achtung: hier werden ALLE Einsetllungen überschrieben, wenn hier manuelle Änderungen in den webX.conf´s vorgenommen wurden, sind nach diesem Upate weg.

Gruß

Dennis Kühn
 

djrick

Registered User
Hallo,

Sorry hab ich vergessen: Ubuntu ist die Distribution.

Ich bin mir mitlerweile nicht mal mehr sicher ob ich auch wirklich "suexec" meine. Also mein Problem ist, dass alle Dateien die zB per PHP Script erstellt werden den Nutzer "www-data" haben, was sie natürlich nicht haben sollten.

Ist das ein suexec Problem? Oder sollte ich eher da an setzen, dass ich webX in die Gruppe www-data verschiebe? :confused:

Und: Ich möchte von suPHP nach mod_php, nicht anders rum ;)

Und: Ja ich weiss: DIE SICHERHEIT! Aber für die Sicherheit des Servers ist bereits anderweitig sehr gut gesorgt und ich suPHP bringt auf diesem, doch relativ schwachen Server, nicht die gewünschte Performance, deswegen möchte ich auf mod_php zurück.
 

net-spacy

Blog Benutzer
Nabend Rick,

wenn es dir um die Performance geht, dann solltest du dich, wie mein VorRedner schon geschrieben hat, für FastCGI/FCGI & suexec entscheiden.
 

djrick

Registered User
FastCGI sieht ja genau nachdem aus, was ich haben möchte.

Wenn ich das richtig sehe, werden die jeweiligen Benutzer / Gruppen über "SuexecUserGroup xxx xxx" definiert, richtig?

Sprich: Funktioniert es problemlos mit Confixx zusammen?
 

net-spacy

Blog Benutzer
Bei uns läuft das genau problemlos, genau wie bei unseren Kunden.

Sollte nach nen bisschen längeren konfigurieren ( Installation ) problemlos laufen.
 

chris085

Registered User
Jop und sogar Plesk 9 hat diese PHP Konfiguration neuerdings integriert.
Ich wüsste nicht welcher große Provider noch mit mod_php arbeitet.
 

djrick

Registered User
Also ich hab mich jetzt mal daran versucht, und mir diese Anleitung zu Herzen genommen:
http://www.aaron-spettl.de/ubuntu/debian-etch-apache2-php5-fcgi-suexec.php

Nachdem ich das alles schön installiert habe, bekomme ich zunächst die Meldung:
Code:
Invalid command 'php_admin_value', perhaps misspelled or defined by a module not included in the server configuration
Was mir irgendwie sagt: PHP funktioniert nicht.

Dann habe ich noch eine Frage zu dem Tutorial: Da wird ja für jedes Projekt ein PHP-Starter Angelegt und dies auch in den jeweiligen VirtualHost gelegt: Wie mache ich das für Confixx? Muss ich mir da ein Bashscript schreiben, welches das automatisch macht? :confused:
 

djrick

Registered User
Ich werde es heute Abend mal testen und dann berichten :)
So hier mein Testbericht:

Nachdem es, wie oben beschrieben, zunächst nicht geklappt hat, hier meine entgültige Lösung zum Nachmachen ;)

Grundlagen auf die ich mich stütze:
1.) Confixx mit fcgid • puzich.com :: I took the blue pill
2.) http://www.puzich.com/wp-content/sunlog/images/php-fcgi-starter_create.phps
3.) http://www.aaron-spettl.de/ubuntu/debian-etch-apache2-php5-fcgi-suexec.php

Step 1:
PHP FCGI und Konsorten installieren:
Code:
apt-get install php5-cgi apache2-mpm-worker libapache2-mod-fcgid
Danach will Debian / Ubuntu wahrscheinlich mod_php und den Prefork deinstallieren...das geht soweit in Ordnung :)

Step 2:
In den Confixx Scripts alles auf suPHP umstellen:
Code:
/pfad/zu/confixx/admin/admin.pl
Dort unter Punkt 2, Webserver: mod_php ausschalten, suPHP anschalten.
Den Adminbereich verlassen.
Danach:
Code:
/pfad/zu/confixx/admin/updates/update_3x.pl
(das dauert was)

Step 3:
Apache2 anpassen:
Code:
vim /etc/apache2/apache2.conf
Am Ende einfügen:
Code:
Include /etc/apache2/confixx_special_vhost.conf

AddHandler fcgid-script .php
AddHandler fcgid-script .php4
AddHandler fcgid-script .php5
AddHandler fcgid-script .phtml

Die o.g. *.conf Datei erstellen:
Code:
touch /etc/apache2/confixx_special_vhost.conf

Step 4:
PHP Fcgi Wrapper Scripte anpassen.
Wir nehman dazu das Script von dieser Seite:
http://www.puzich.com/wp-content/sunlog/images/php-fcgi-starter_create.phps

Wir kopieren also den Inhalt der Webseite in die Datei:
Code:
/usr/local/bin/confixx_fcgi.php

Für den Gebrauch mit Confixx hab ich die Datei etwas abgeändert:
Code:
$conf_path      = '/var/www/';
Da bei mir alle Kunden unterhalb von /var/www liegen. Also /var/www/web1 etc.
Aus:
Code:
// user-dir exists?
 if ( !file_exists($user_path) ) {
Wird:
Code:
// user-dir exists?
 if ( file_exists($user_path) ) {
Weil die Schleife sonst dort abricht, aber die Verzeichnisse bestehen ja schon.

Die darauffolgenden Zeilen kommentieren wir aus:
Code:
   // mkdir($user_path);
   // chown($user_path, $data['kunde']);
   // chgrp($user_path, $data['kunde']);
   // chmod($user_path, 0755);

Dann, aus:
Code:
 fwrite($fh, '<Directory "/home/httpd/htdocs/' . $data['kunde'] . '/html">'."\n");
Wird:
Code:
fwrite($fh, '<Directory "/var/www/' . $data['kunde'] . '/html">'."\n");
Und aus:
Code:
fwrite($fh, '  FCGIWrapper /home/httpd/php-fcgi-scripts/' . $data['kunde'] . '/php5-fcgi-starter .php'."\n");
wird:
Code:
fwrite($fh, '  FCGIWrapper /var/www/' . $data['kunde'] . '/php5-fcgi-starter .php'."\n");

Damit sind wir schon mit dem Bearbeiten des Scripts fertig. Somit liegen die Startscripte für den Wrapper jetzt in dieser Form vor:
Code:
/var/www/web1/php5-fcgi-starter
Jetzt könnte man einweden: "Ja toll und was ist wenn ein Confixx Kunde per FTP die Datei löscht?" Antwort: Kann nichts passieren, da das Erstell-Scripte diese Dateien mit dem "immutable bit" sichert. Sprich: Die Datei gehört zwar dem jeweiligen User, aber sie und selbst der root können die Datei nicht löschen. (Lediglich der Root kann dieses Bit durch chattr -i ... wieder entziehen und dann löschen).

Soweit so gut...fertig für einen ersten Testlauf?
Code:
php /usr/local/bin/confixx_fcgi.php
/etc/init.d/apache2 force-reload
(oder halt neustarten, wenn er zuvor beendet wurde).

Jetzt sollte alles wieder laufen. Wenn dem so ist, müssen wir jetzt nur noch sicherstellen, dass bei der Erstellung eines neuen Users, auch die Wrapperscripte angelegt werden etc.

Das macht man am besten, indem man das Script per Cronjob aufruft. Sollte jemand hier an diesem Punkt einen besseren Vorschlag haben: Bitte immer her damit. Eigentlich braucht das Script ja lediglich bei dem Ereignis "on new confixx user" laufen :)

Anmerkung: Wir müssen das Script umändern, so dass die Wrapperscripte unterhalb des jeweiligen Confixxusers liegen, weil es sonst zu dem suEXEC Fehler kommt: "cannot get docroot information (/var/www)", da /var/www und andere Sachen nicht dem jeweiligen User gehören die gerade das Script ausführen wollen sondern root oder sonst wem.

Anmerkung 2: Sollte ich das vllt. in der Howto Sektion posten? Weil im Web gibts keine vergleichbare Anleitung zum Thema fcgi und Confixx. Allerdings würde ich das ganze dann vorher noch mit den Experten hier im Board abgleichen ob ich irgendwo in meinem Howto vllt. einen Fehler gemacht hab oder ob man noch was besser machen könnte.
 
Last edited by a moderator:

liberation

Blog Benutzer
Was passiert wenn ein Kunde gelöscht wird?

Hallo,
ich habe das How-to mit ein paar änderungen und suexec innerhalb von Debian (Lenny) eingebunden.

Leider stehe ich bisher noch vor dem Problem das Confixx die mit imunable Bit gesetzten Datein nicht mehr löschen kann wenn ein Kunde gelöscht wird.

Das ist ein großes Problem!

Hat vielleicht jemand eine lösung parat?
 
Anzeige:
Top