Jump to content
Froxlor Forum
  • 0

FCGID php5 und apach2


froxfox

Question

Hallo,

php l?uft bei mir unter fcgid. Alle PHP-Skripte werden unter den im vhost angegebenen suexec benutzer und gruppe gestartet.

Allerdings werden statische Dateien, also die nicht durch den FCGIWrapper gehen, unter dem apache2 hauptnutzer gelesen (www-data).

 

Beispiel:

chmod 740 test.html, kann der apache2 nicht lesen.

 

Wie kann ich auch statische Dateien unter apache2 mit den entsprechendem Nutzer/Gruppe lesen lassen?

Link to comment
Share on other sites

24 answers to this question

Recommended Posts

Hallo,

php l?uft bei mir unter fcgid. Alle PHP-Skripte werden unter den im vhost angegebenen suexec benutzer und gruppe gestartet.

Allerdings werden statische Dateien, also die nicht durch den FCGIWrapper gehen, unter dem apache2 hauptnutzer gelesen (www-data).

 

Beispiel:

chmod 740 test.html, kann der apache2 nicht lesen.

 

Wie kann ich auch statische Dateien unter apache2 mit den entsprechendem Nutzer/Gruppe lesen lassen?

 

Garnicht, zumindest nicht mit froxlor Hausmitteln, dazu br?uchtest du schon f?r jeden vhost einen eigenen Apache und darauf ist froxlor (momentan) nicht ausgelegt. Du musst die Dateien also entweder others readable machen oder sie auf den apache2 Nutzer (www-data z.B.) chownen.

Alternativ k?nntest du auch jede Datei ?ber mod_rewrite ?ber ein Skript ausgeben lassen, das w?re aber ziemlich crazy und unklug.

Link to comment
Share on other sites

Naja, man muss dann aber die ordner und Dateien f?r alle lesbar machen (da unterscheidet ja auch keiner mehr zwischen php oder html Dateien). Bei shared-Hosting halte ich das schon f?r ein Sicherheitsrisiko.

 

Eine Idee:

Dem Webserver - User ordnet man einfach die Gruppen der Kunden zu.

Link to comment
Share on other sites

Leider funktioniert das mit Froxlor nicht so einfach. Die Variante ohne NSS und MySQL funktioniert nicht, weil der Nutzer nicht in den /etc/passwd steht. Umgekehrt ist in der SQL-Struktur von Froxlor die Zuweisung mehrerer User zu einer Gruppe nicht vorgesehen. hmpf.

 

Hi, ich h?ng mich hier mal mit dran :)

 

Deute ich das richtig, dass es also an der NSS-Config von Froxlor liegt, dass ich meinen Webserver-User (www-data) nicht der Gruppe eines Users aus der Datenbank hinzuf?gen kann?

 

gpasswd -a wanja testgruppe
Unbekannte Gruppe: testgruppe 
gpasswd: Zugriff verweigert.)

 

Welchen Weg schl?gt Froxlor denn vor, dem Webserver-User den zugriff auf statische Dateien zu erm?glichen, wenn man mit php ?ber FCGID arbeitet und die via FTP hochgeladenen Dateien dem jeweiligen FTP-User geh?ren?

Link to comment
Share on other sites

Welchen Weg schl?gt Froxlor denn vor, dem Webserver-User den zugriff auf statische Dateien zu erm?glichen, wenn man mit php ?ber FCGID arbeitet und die via FTP hochgeladenen Dateien dem jeweiligen FTP-User geh?ren?

 

So etwas ist nicht vorgesehen. Entweder Webserver-User ?ber mod_php oder eigene User mittels FCGID/php-fpm

Link to comment
Share on other sites

Danke f?r die schnelle Antwort. php-fpm kannte ich noch gar nicht. Sieht eigentlich ganz nett aus.

 

Dennoch denke ich, ich werde lieber versuchen die DB und die nss-mysql.conf so zu ?ndern, dass man einen User in mehrere Gruppen schubsen kann. Rechte auf Betriebssystem-Ebene sind mir lieber als PHP-Tricks :)

Link to comment
Share on other sites

Dem Webserver - User ordnet man einfach die Gruppen der Kunden zu.

 

Ja, das ist die Methode der Wahl. Ich bin etwas ?berrascht, dass das nicht zu den Standardfeatures geh?rt, weil genau diese Trennung von Nutzern geh?rt ja zu den wichtigsten Gr?nden, FCGI zu benutzen. Ich habe ein paar anderen Gedanken zum Thema Sicherheit in einem anderem Thread gemacht.

 

Leider funktioniert das mit Froxlor nicht so einfach. Die Variante ohne NSS und MySQL funktioniert nicht, weil der Nutzer nicht in den /etc/passwd steht. Umgekehrt ist in der SQL-Struktur von Froxlor die Zuweisung mehrerer User zu einer Gruppe nicht vorgesehen. hmpf.

Link to comment
Share on other sites

Ich finds sinnlos...ich habe seit 2 Jahren ein FCGID setup und kein Kunde hat sich jemals beschwert das irgendwas nicht ging oder sonstwas. Wozu denn statischen Inhalt als Webserver-User ausgeben? Wenn alles im Kunden-Docroot liegt (was es ja tun sollte, da der Kunde sonst nicht rankommt) ist doch alles in Ordnung...

Link to comment
Share on other sites

Mein Gedanke ist eher ein anderer, als dieser Eingangs hier. Im Moment kann der User dank openbasedir nicht in die Verzeichnisse der anderen User zugreifen. Aber wie sieht das ganze denn aus, wenn diese z. B. Perl nutzen? Dann w?ren restriktivere Verzeichnissrechte sinnvoll, oder? Aber wenn diese restriktiver sind, dann sollte das Verzeichniss die Rechte 750 haben und der Webserver User in der web-User Gruppe sein oder aber, dass die Gruppe des Verzeichnisses nicht webX sein, sondern "apache".

Link to comment
Share on other sites

Ich verstehe nicht worauf du hinaus willst, Perl funktioniert bei mir auch wunderbar ohne "apache"-user oder Rechtemurks

 

Ich glaube auch, du verstehst etwas falsch? Ich glaube er meint das selbe, was ich unter http://bugs.froxlor.org/view.php?id=518 f?r den Froxlor-VHost gemeldet hatte:

Gehen wir von einer ganz einfachen Seite des Kunden "bernd" aus: Eine index.php mit $magic und dazu zwei Bilder. Wird nun fcgi genutzt stellt der Webserver folgendes an:

 

index.php -> wird als php per suexec/fcgi als "bernd" ausgef?hrt

bild1.png -> wird vom Apache als www-user geladen und ausgeliefert

bild2.png -> wird vom Apache als www-user geladen und ausgeliefert

 

Das ganze funktioniert, so lange "others" Leserechte haben. Das hat nat?rlich den Nachteil, dass andere Kunden - sofern sie nicht ?ber Kr?cken ala php-openbasedir eingeschr?nkt sind (exec, andere sprachen, ...) - die Dateien von bernd lesen k?nnen. Potentiell also auch php-Quellcodes incl. Passw?rtern etc. Da wir ja cgi nutzen w?re es am einfachsten others zu killen, also alle Dateien z.B. auf

-rwxr-x--- 2 bernd bernd

(User/Group werden vom proftpd afair so gesetzt)

 

Nun kommt es aber zu einem Problem:

 

index.php -> wird als php per suexec/fcgi als "bernd" ausgef?hrt

bild1.png -> wird vom Apache als www-user geladen - da er keine Rechte hat gibts 403

bild2.png -> wird vom Apache als www-user geladen - da er keine Rechte hat gibts 403

 

Man k?nnte jetzt nat?rlich per Hand nacharbeiten, also die Gruppe auf www-data ?ndern oder nur php-scripte auf 760 setzen. Das ist f?r gr??ere Scripte nat?rlich riesiges pita und Usern schwer beizubringen.

 

Ich hoffe das Problem ist jetzt klarer ;)

 

Eine Idee steht ja schon oben: Dem Apache-User alle Kunden-Gruppen verpassen - oder andersrum die Kundendaten per default der Webserver-Gruppe zuordnen. Anderer Ansatz w?re mpm_peruser (http://forum.froxlor.org/index.php?/topic/324-apache-mpm-peruser-integration/page__gopid__3282) bzw mpm_itk(?) welche apache komplett auf den Kunden umbiegen und daher auch statische Dateien als bernd lesen.

Link to comment
Share on other sites

http://bugs.froxlor.org/view.php?id=518 hat damit null zu tun, das is ne ganz andere geschichte und hat mit unterschiedlichen Benutzern nichts zu tun.

 

Was ich bei eurem Setup nicht verstehe: Wieso sollte bild1.png und bild2.png vom www-user ausgeliefert werden? Sowas wird ja wenn nur interessant, wenn du statischen content irgendwie per proxy an nen zweiten webserver (lighty z.B.) ?bergibst um Lasten zu verteilen...aber so sehe ich irgendwie keinen Sinn da grad...gib mir doch mal ein Fallbeispiel mit PFADANGABEN und entsprechenden Vhosts...ich weiss echt nicht wo das PRoblem sein soll, bzw. warum 'a' mit 'bernd' und 'b' mit 'www-user' ausgef?hrt werden m?sste

Link to comment
Share on other sites

Das verstehe ich nun wiederum nicht. Wenn ich ne Webseite via FTP hochlade, geh?ren s?mtliche Dateien dem FTP-User, bei den PHP Scripts, die ja mit suexec durch FCGID flutschen, funktioniert das wunderbar. Die statischen Dateien (Bilder, CSS, JS etc.) werden aber vom Apache direkt ausgeliefert und der l?uft als User www-data und hat somit kein Leserecht -> 403. Wie schon gesagt. Wer sollte den statischen Kontent sonst ausliefern? Der FTP-User? Dann m?sste ja jeder Kunde nen eigenen Apache am laufen haben oder man m?sste tricksen.

 

Ich das ganze nun so umgesetzt das ich die Froxlor-DB um eine Tabelle (unr zwei Trigger) erweitert habe und die nss-mysql.conf leicht abge?ndert habe. So wird der user www-data automatisch in jede neue Gruppe eingetragen, die beim anlegen neuer Kunden durch Froxlor entsteht. Funktioniert bisher wunderbar, sollte sicher sein und hat bisher keine Probleme bereitet.

 

Bei bedarf kann ich meine ?nderungen gerne hier posten, viel wars nicht.

Link to comment
Share on other sites

Ach jetzt versteh ich das Problem. Wobei ich nicht so ganz nachvollziehen kann, woher das kommen soll. Bei mir ist wie gesagt auch alles auf FCGID eingerichtet und alle Dateien geh?ren dem Customer, habe absolut keine Probleme mit 403ern

Link to comment
Share on other sites

Mir geht es eher um ein kleines Sicherheitsproblem und geht auch ein klein wenig an dem Hauptthema vorbei.

 

Nehmen wir an, man user web1 darf Perl-Skripte ausf?hren und f?hrt angehangenes Perl-Skript in seinem Doc-Root aus. Damit ist es ihm m?glich die Verzeichnisse und Dateien von allen anderen Usern auszulesen (im Beispiel web2). Vielleicht habe ich auch nur einen Denkfehler oder Fehler in meiner Configuration, aber eigentlich sollte das nicht gew?nscht sein.

 

#!/usr/bin/perl

print "Content-type:text/html\n\n";

opendir(HU, "./../web2"); # <--- VERZEICHNIS-PFAD ANPASSEN
@hu=readdir(HU);
closedir(HU);

foreach $hu(@hu) {
print "$hu<br>";
}

exit;

Link to comment
Share on other sites

Ach jetzt versteh ich das Problem. Wobei ich nicht so ganz nachvollziehen kann, woher das kommen soll. Bei mir ist wie gesagt auch alles auf FCGID eingerichtet und alle Dateien geh?ren dem Customer, habe absolut keine Probleme mit 403ern

 

Das h?ngt nat?rlich auch von der umask ab, also davon mit welchen Rechten Dateien auf dem Server landen. Wenn Du statischen Dateien ein Leserecht f?r Alle einr?umst, tritt das Problem nicht auf, aber ich finde es sch?ner wenn nur Eigent?mer und Gruppenmitglieder Lesezugriff haben und daf?r muss der www-data eben Mitglied in allen Gruppen der FTP-User sein. Vieleicht bin ich auch n bisschen paranoid ;)

Link to comment
Share on other sites

http://bugs.froxlor.org/view.php?id=518 hat damit null zu tun, das is ne ganz andere geschichte und hat mit unterschiedlichen Benutzern nichts zu tun.

 

518 hatte ich vielleicht etwas ungl?cklich formuliert da ich zur Erstellungszeit das mit den unterschiedlichen Usern f?r statisch/dynamisch nicht ganz durchschaut hatte. Im Prinzip ist der Gro?teil des Tickets aber schon die selbe Ursache wie hier: Die Dateien geh?ren einem User (froxlor), others hatte nach emerge --config keine Rechte weswegen Apache (=user apache) nicht an die Dateien (in dem Fall Ordner) dran kommt und mit 403 aussteigt. Gibt man others die Rechte funktionierts wie ich im Bug schon steht "I guess giving read-access to others could allow customers to read froxlor-config (mysql-pw, etc) when open_basedir is disabled" was im Endeffekt das selbe Problem wie hier geschildert, allerdings statt user<->user-vhost den Zugriff user<->froxlor-vhost.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...