Fast CGI auf Server einrichten

Hoggel

New Member
Hallo,

mir qualmt schon der Kopf.

Ich möchte euch erst einmal kurz das Problem was ich habe schildern.

Ich habe einen V-Server mit Ubuntu als Betriebsystem. Darauf läuft Plesk 10.4.4. Vorher hatte ich Linux drauf und Plesk 9.5. Dort hatte mein Script noch funktioniert. Nach der Neuinstallation auf Ubuntu und Plesk 10.4.4 funkrioniert auch mein Script nicht mehr.

Ich möchte das User auf meiner Seite ein kleines Bild hochladen können. Dazu setzte ich kurz die Rechte mit chmod auf 777. Jetzt haut das aber nicht mehr hin. Nur wenn ich manuell die Rechte auf 777 setzte, dann funktioniert es wieder, verständlich. Das möchte ich aber so nicht habe, wegen der Sicherheit ;)

Jetzt hab ich herraus gefunden das der Server Standartmäßig auf Apache eingestellt ist. Apache hat ja aus Sicherheitsgründen den User www-data. Damit kann man aber die Rechte nicht per Script ändern.

Jetzt sagte man mir, das ich PHP mit Fast CGI ausführen lassen soll. Dann klappt das. Ich kann das auch umstellen, kein Problem. Aber wenn ich es umstelle und PHP wird mit Fast CGI verwendet, dann wird mir auf meiner HP nicht mehr viel angezeigt, außer die Grafik. Sonst kann ich nichts mehr bedienen oder machen. Stelle ich es wieder auf PHP soll mit Apache verwendet werden zurück, dann funktioniert die HP auch wieder. Außer der chmod nicht. bei beiden einstellungen.

Ich hoffe es kann mir hier jemand helfen. Ich bin echt am verzweifeln.

Vielen, vielen Dank schon einmal im vorraus für eure Hilfe.

Übrigens ich bin noch nicht sehr gut mit den Befehlen was Ubuntu über die Konsole angeht. Also habt etwas Nachsicht mit mir.

MfG
Hoggel
 
Hey,

wie siehts mit dem safe_mode aus?

Weil hier ein kleiner auszug ausm PHP-Doc

Note:
When safe mode is enabled, PHP checks whether the files or directories you are about to operate on have the same UID (owner) as the script that is being executed. In addition, you cannot set the SUID, SGID and sticky bits.
Heisst, wenn dem Webserver die Datei nicht wirklich selbst gehört. klappt das so auch nicht.
 
Also in der phpinfo steht der safe_mod im Local Value auf off. Aber im Master Value steht er auf on.

Sollte der nicht generell auf aus sein ?

MfG
Hoggel
 
An der Tatsache, dass er generell aktiv ist, sehe ich eigendlich keine Nachteile.

Wie sieht dein dein Aufruf der Funktion aus?

Hier mal ein kleines beispiel:

PHP:
$status = chmod('index.php', 0777);
var_dump($status);
Wobei du vielleicht noch einmal darauf achten kannst, dass du wirklich die Notation '0777' also die Octale nutzt.

Grüße
Sammy
 
Da bekomm ich als Antwort: bool(false) zurück.

Das bezieht sich auf den Ordner.

Wenn ich das auf die Datei anwende, dann bekomme ich NULL als Wert zurück.

Ich benutzte 2 mal chmod. Einmal auf ein Verzeichnis und dann auf eine Datei.
 
Last edited by a moderator:
Es muss irgend etwas mit den Benutzern zu tun haben. Wenn ich Manuell im Filezille den chmod auf 777 setzte, dann funktioniert es ja. Und auch da gibt er dann bool(false) und NULL zurück. Aber es klappt.

Aber der Benutzer ist ein anderer. Bei Filezilla sehe ich für Benutzer und Gruppen nur zahlen. Aber daran merke ich, das es 2 unterschiedliche sind. Im Putty sehe ich dann das es einmal der Benutzer ist, den ich angelegt habe. Und bei dem hochgeladenen Bild ist es dann dieser www-data, der ja glaube keine Rechte besitzt für das ändern des chmod.
 
Erklär doch mal warum du Dateirechte auf 0777 setzen musst?
Was für Benutzer? Wo und wie legst du die an?

//EDIT:
Wenn ich PHP mit FastCGI aktiviere, läuft PHP unter dem Nutzer, der die Domain angelegt hat (bspw. test123432) und der Gruppe psacln.
Mit PHP erzeugte Dateien haben dann folgende Rechte rw-r-r

Wenn dein PHP nicht unter FastCGI läuft ist es nicht sauber programmiert.
 
Last edited by a moderator:
Also die Rechte muss ich kurz setzen, damit User ein Bild auf den Server laden können. Danach wird es ja wieder geschlossen.

Also unter Plesk hab ich einen Benutzer angelegt. Mit dem mache ich eigentlich alles. Wenn ich die Rechte manuell ändere, dann klappt das ja mit dem Bild hochladen. Aber es ist dann nicht der Benutzter den ich angelegt habe. Sondern der Standart von Apache www-data.

Man sagte mir beim Support von meinem Anbieter das ich dafür nur Fast CGI einschalten sollte, damit das dann funktioniert. Sobald ich das an habe, wird der Benutzter vom Plesk genommen. Den ich ja angelegt habe und benutzte und nicht mehr der standart www-data von Apache.

Ich habe eventuell schon fehler beim anlegen gemacht. Vorher lief das alles, nach der Neuinstallation nicht mehr.
 
Womöglich hast du unsauber programmierte php Skripte die mit der neuen php.ini nicht klarkommen. Beliebte fehler sind bestimmt Short Tags, Register globals und magic quotes z. B. . Vergleich mal die alte mit der neuen phpinfo und auch die php Versionen ansich.
 
Also register_globals sind alle auf off sowie auch die magic_quotes. Short Tags verwende ich ebenso nicht.

Weiß jetzt nicht wie ich die alte phpinfo einsehen kann, um sie mit der neuen zu vergleichen.

Denke ich werde mir mal eine schritt für schritt Anleitung suchen, wo ich nochmal alles neu mache. Also Server neuinstallieren und dann Benutzer anlegen, Domain anlegen usw. Dann werde ich nochmal schaun.

Eventuell kann ich das auch ohne Fast CGI lösen. Man kann doch bestimmt unter Putty den Benutzer www-data auf den angelegten Benutzer bei Plesk legen. Also nur für einen bestimmten Ordner.

Weil unter Putty ist sonst alles auf den Benutzter bei Plesk. Außer wenn eine Datei hochgeladen wurde, dann ist es wieder www-data. Oder gibt es einen Befehl, womit man sagen kann wenn datei hochgeladen wird, dann nimm den Benutzer und nicht www-data ?
 
Wieso muss du das Ganze in deiner Domain mit dem PHP-Apache-Modul laufen lassen? Dann haben die erzeugten Dateien immer die Rechte des Webservers und du kannst nicht darauf zugreifen.

Nimm FastCGI und dein Problem existiert wahrscheinlich nicht mehr.
Sollte es auf FastCGI nicht laufen, ist dein Skript nicht solide programmiert.
 
Ich verstehe bei der ganzen Übung auch nicht, wieso 777 angesagt ist. Eigentlich ist es immer so, dass wenn 777 gemacht wird, hat man mit Sicherheit Mist gebaut und eine Sicherheitslücke.

Der Apache läuft als www-data. Die User sollen Bilder hochladen. Also machst du einen Ordner für die Bilder, weist dann diesen Ordner dem User www-data zu und vergibst die Rechte 755 oder sogar 700. Fertig.

Wenn du dann im Nachhinein einen Schreibschutz realisieren willst, hat ein PHP-Script, welches unter der Kennung www-data läuft, auch die Rechte die Dateien auf 444 oder sogar 400 zu setzen.
 
Du hast ja recht. Es ist ja auch Resourcen schonender und auch schneller. Aber die ganzen Seiten jetzt noch einmal durchschauen, puuh. Aber gut, ist besser wenn die ganzen Scripte sauber gecodet sind. Validieren muss ich sie ja eh noch.

Kann es sein das ich nachdem ich das auf Fast CGI umgestellt habe, noch etwas machen muss ? Also eventuell wegen der DB ? Oder wegen dem Benutzer ? Weil ich habe das gefühl das die Daten aus der DB nicht ankommen. Sonst sieht man alles, außer die Daten aus der DB.

*EDIT
@PapaBaer

Ja sowas meinte ich eigentlich auch. Bloß umgekehrt. Aber das ist was ich gesucht hatte. Aber das mit dem zuweisen weiß ich nicht wie das geht. Das ist doch glaube unter Putty mit chown -R www-data:www-data >Verzeichnis> oder ?

Aber das mit dem Fast CGI werde ich trotzdem machen.

*EDIT
 
Last edited by a moderator:
Du solltest es schon allein aus Sicherheitsgründen ändern. Ich habe dein Script nicht gesehen, aber ich gehe jede Wette ein, dass ich in dem Zustand eine Lücke finde, dein System zu kompromitieren und gegen die Wand zu fahren.

Es gibt nämlich mindestens einen Weg, als Benutzer A an Prozessen rumzuspielen, die durch Benutzer B abgesichert sind und so diese Sicherheitsschranke zu überwinden.
 
Also ich habe es nicht manuell für jeden zugänglich auf 777 offen.

Aber wenn das mit der zuweisung mit www-data zu diesem einen Ordner geht und ich dann nicht mehr auf machen muss, ist das auf jedenfall besser vorallem sicherer.

Nur weiß ich nicht genau ob das so gemacht wird, wie ich es oben geschrieben hab mit dem shown... befehl in Putty.

Möchte es natürlich so sicher haben wie es geht. Bin über jede hilfe in dieser Richtung dankbar.
 
Back
Top