PHP vs FTP workaround

spy15

Grünschnabel
Hallo Community
Ich entwickle derzeit ein kleines CMS, und habe ein Problem bezüglich Rechten und Nutzern.
Wenn ich einen Ordner per FTP erstelle, kann ich nur mit Berechtigung 0777 Daten die vom PHP Script kommen bez. erstellt werden speichern.
Diese von PHP erstellten Dateien können wiederum von allen gelesen werden, auch wenn die Datei 0600 hat.
Daraus lässt sich schliessen das der PHP User, und der "normale" Webbenutzer der selbe Benutzer ist, sehe ich das richtig?

Nun habe ich einige Dateien, die ausschliesslich vom PHP Interpreter gelesen werden sollen.(z.b. die connect.php welche die Datenbankverbindung enthält.)
Erstelle ich also eine Datei mit PHP und setze die Rechte auf 0600 kann diese per Browser aufgerufen werden, also auch in einem Fremden Script includiert werden, oder?

Was mich ausserdem auch noch verwirrt;
Wenn ich folgende Ordner Struktur habe, kann ich in den Ordner test2 keine Daten mit PHP speichern, bez. dort hin verschieben, obwohl beide die Berechtigung 0777 haben...

test(user:ftp,0777)->test2(user:PHP, 0777).

Nur wenn beim Ordner test UND test2 der User ftp ist, kann ich eine Datei per PHP speichern.
Ausserdem kann ich bez. PHP im Document-root Verzeichnis keinen Ordner erstellen, wodurch der 1. Ordner immer den User FTP hat.
Ordner Struktur auf der Server: (aufs wesentliche reduziert.)
PHP:
root|
     -httpdocs(Document-root, hier kommen meine Scripte rein.)(User:FTP, 0750)
	|
	-test
	    |
	     -test2

Bitte keine antworten wie "Sag dem Provider er soll den Save-Mode = off" u.s.w.
Ziel ist das das CMS auf verschiedenen Server mit verschiedenen Konfigurationen und maximaler Sicherheit läuft.

Also:
  1. Wie kann ich das lesen einer Datei auf MEIN Script beschränken?
  2. Wie kann ich Dateien mit PHP speichern, wenn der Pfad unterschiedliche User hat ( test(user:ftp,0777)->test2(user:PHP, 0777)->fileFromPHP.txt )?
  3. Wie kann ich Daten/Ordner mit PHP im Document-root erstellen.
  4. Kann ein Badboy meine connect.php includen und missbrauchen, bez. was muss gegeben sein, damit das funktioniert?

Danke schon mal
gruss daniel
 
...
Also:
  1. Wie kann ich das lesen einer Datei auf MEIN Script beschränken?
  2. Wie kann ich Dateien mit PHP speichern, wenn der Pfad unterschiedliche User hat ( test(user:ftp,0777)->test2(user:PHP, 0777)->fileFromPHP.txt )?
  3. Wie kann ich Daten/Ordner mit PHP im Document-root erstellen.
  4. Kann ein Badboy meine connect.php includen und missbrauchen, bez. was muss gegeben sein, damit das funktioniert?
...

1) Was meinst du bitte mit lesen einer Datei auf DEIN Script beschränken?
Das der User nur in seinem Verzeichnis arbeiten darf? Du könntest die Dateien dem Nutzer zuweisen. So hätte er keinen Zugriff auf dateien von anderen Usern. Könnte da also keine Verzeichnisse oder Dateien öffnen

2) Versteh ich leider gar nicht.. Wenn der Pfad unterschiedliche User hat..? Hö..?

3) Dateien im Document-Root? fopen("datei.txt","w+"); -> schon erstellt er sie im gleichen Verzeichnis

4) Ein Badboy deine Datei includen? Sobald er die Rechte dazu hat (z.b. chmod 0777 auf die Datei connect.php) dann kann sie jeder nutzen.

paD
 
1) Was meinst du bitte mit lesen einer Datei auf DEIN Script beschränken?
Das der User nur in seinem Verzeichnis arbeiten darf? Du könntest die Dateien dem Nutzer zuweisen. So hätte er keinen Zugriff auf dateien von anderen Usern. Könnte da also keine Verzeichnisse oder Dateien öffnen

2) Versteh ich leider gar nicht.. Wenn der Pfad unterschiedliche User hat..? Hö..?

3) Dateien im Document-Root? fopen("datei.txt","w+"); -> schon erstellt er sie im gleichen Verzeichnis

4) Ein Badboy deine Datei includen? Sobald er die Rechte dazu hat (z.b. chmod 0777 auf die Datei connect.php) dann kann sie jeder nutzen.

paD

Wenn ich eine Datei über PHP erstelle, die chmod 0600 hat, sollte doch beim Aufruf im Browser der Zugriff verweigert werden, dies passiert aber nicht.

2. Wenn ich einen 2 Ordner habe, die so aussehen;
test(user:ftp,0777)->test2(user:PHP, 0777);
Kann ich keine Datei per PHP in "test2" reinschreiben, in "test" klappts.

3. No, klappt bei mir nicht, weil ich kein Schreibrecht habe (doc-root = 0750)
 
Ich glaube, dass du da etwas ganz falsch verstehst. Die Zugriffsrechte gelten nur über das Dateisystem, also existieren sie nicht, wenn die Dateien über einen Browser geöffnet werden. Du könntest die Dateien dadurch schützen, dass du beispielsweise die Dateien in ein Verzeichnis verschiebst, auf welchem der PHP-Interpreter Zugriff hat, aber der Webserver nicht. Oder du löst es mit .htaccess und versteckst sie entweder oder du wirfst den HTTP-Statuscode 403.

Und jemand, der behauptet, dass jeder deine Dateien in seine Skripte einladen kann, hat das Prinzip nicht verstanden. PHP arbeitet serverseitig und das was der Klient bekommt ist nur das, was PHP erstellt hat. Wenn jemand also per include 'connect.php' deine Verbindungsdaten ausspähen will, dann muss er entweder Zugriff darauf haben über ein FTP-Konto oder der PHP-Interpreter muss ausgeschaltet sein, damit die PHP-Skripte nicht ausgeführt werden, sondern direkt ihr Quelltext an den Klient geschickt wird. Ansonsten ist es nicht möglich!
 
Aso, dann ist das mit den rechten nur Problematisch, bez. gilt nur, wenn jemand zugriff per FTP hat!?

Wäre da noch Problem 2;
Wenn ich einen 2 Ordner habe, die so aussehen;
test(user:ftp,0777)->test2(user:PHP, 0777);
Kann ich keine Datei per PHP in "test2" reinschreiben, in "test" klappts.

Wie kann das sein, da ich ja das schreibrecht habe, oder?
gruss daniel
 
Es wäre gut möglich, dass der PHP-Interpreter den Nutzer PHP zugewiesen bekam und somit nur unter dieser Identität handeln kann. Soll heißen, dass du dich mit PHP erst über FTP als Nutzer ftp anmelden musst um dann als solcher Verzeichnisse zu erstellen.
 
aso, dann ist es eigentlich gut so?
Und dann wäre es also am besten, wenn ich Dateien mit ftp_put() erstelle/speichere?
Danke an alle für die gute Hilfe.
 
Zurück