Lese- und Schreibrechte (Sicherheitsrisiko 0755?)
Karl
- php
0 Sönke Tesch0 small-step0 Christian Seiler0 Karl0 Sönke Tesch0 Karl
0 Michael Neubert
0 Andreas Korthaus
Hallo zusammen,
wenn ich mittels PhP Dateien lesen/schreiben/uploaden will muss ich ja für die jeweilige Datei (bzw. Verzeichnis) die Rechte auf 0755 setzten.
Das ist doch eigentlich ein Sicherheitsrisiko wenn ich der ganzen Welt Lese- und Schreibrechte auf meinen Server gebe. Ich habe schon einiges versucht (chmod funktioniert irgendwie nicht - auch als system command aus PhP heraus). Wenn ich CGI/Perl dafür benutzte funktioniert die ganze Rechteverwaltung einwandfrei - jedoch würde ich gerne eine reine PhP Lösung dafür haben.
Hat jemand von Euch dafür eine Lösung? (Also wie man Uploads/Dateien per PhP administrieren kann ohne 0755 benutzen zu müssen.) Ich komm da irgenwie nicht weiter...
Vielen Dank im vorraus,
Karl
Hat jemand von Euch dafür eine Lösung? (Also wie man Uploads/Dateien per PhP administrieren kann ohne 0755 benutzen zu müssen.) Ich komm da irgenwie nicht weiter...
Das Problem ist, daß PHP standardmäßig als Modul im Webserver läuft, also Teil des Webserverprogramms ist, und somit auch jedes Skript bei der Ausführung die Identität des Webservers hat. Mit einem PHP-Skript erstellte Dateien und Verzeichnisse gehören deshalb dem Webserver, nicht demjenigen, dem die Skriptdatei gehört.
PHP muß entweder (wie es wiederum bei Perl standardmäßig der Fall ist) über die CGI-Schnittstelle laufen (aufwändig, nur bei sehr großen Hostern IIRC), es müssen Vorkehrungen im Betriebssystem getroffen werden (extrem selten, weil sowas nicht aus der Susi-Schachtel zu bekommen ist) oder es muß jeder Benutzer seinen eigenen Webserver am Laufen haben (gegen Null tendierend, gibt's nicht nur nicht aus der Susi-Schachtel, akzeptable Software ist AFAIK auch noch erst im Entwicklungsstadium).
Gruß,
soenk.e
Hallo soenk.e,
PHP muß entweder (wie es wiederum bei Perl standardmäßig der Fall ist) über die CGI-Schnittstelle laufen (aufwändig, nur bei sehr großen Hostern IIRC), es müssen Vorkehrungen im Betriebssystem getroffen werden (extrem selten, weil sowas nicht aus der Susi-Schachtel zu bekommen ist) oder es muß jeder Benutzer seinen eigenen Webserver am Laufen haben (gegen Null tendierend, gibt's nicht nur nicht aus der Susi-Schachtel, akzeptable Software ist AFAIK auch noch erst im Entwicklungsstadium).
Wie sieht's aus wenn ich das Script dem Webserver unterstelle? Also ich meine dem Benutzer zuweise? Würde das klappen?
Gruß,
small-step
Wie sieht's aus wenn ich das Script dem Webserver unterstelle? Also ich meine dem Benutzer zuweise? Würde das klappen?
Das ist a) nicht möglich, weil man als Otto Normaluser zumindest unter Linux & Co. nicht einfach irgendwem Dateien schenken (lies: unterjubeln) kann, b) nicht praktikabel, denn wenn Du die Skriptdatei erstmal verschenkt hast, ist sie für Deine Änderungswünsche gestorben und c) im vorliegenden Fall möglicherweise schlichtweg zwecklos, je nachdem, von welcher Hürde wir gerade sprechen, safe_mode oder die Rechte des Dateisystems.
Gruß,
soenk.e
Hallo Sönke,
es müssen Vorkehrungen im Betriebssystem getroffen werden (extrem selten, weil sowas nicht aus der Susi-Schachtel zu bekommen ist)
Es gibt auch noch oben_basepath, das bei den meisten Hostern aktiviert ist.
Viele Grüße,
Christian
Hallo,
erstmal Danke für deine Antwort - aber irgendwie bin ich jetzt noch nicht weiter - soll das heißen, daß das per PhP grundsätzlich nicht geht wenn man nicht die geeignete Umgebung hat?
Wie machen das grössere open source Projekte (die ja so gut wie überall installiert werden können)?
Ist 755 ein hohes Sicherheitsrisiko oder kann man das vernachlässigen (ich oute mich mal als 'nichtsahnender' Windows user)?
Irgendwie steh' ich da auf dem Schlauch - wäre nett wenn mir wer helfen könnte.
Gruß,
Karl
erstmal Danke für deine Antwort - aber irgendwie bin ich jetzt noch nicht weiter - soll das heißen, daß das per PhP grundsätzlich nicht geht wenn man nicht die geeignete Umgebung hat?
Sagen wir mal so: Murks in der Konfiguration lässt sich nicht durch anderen Murks wieder wettmachen.
Ist 755 ein hohes Sicherheitsrisiko oder kann man das vernachlässigen (ich oute mich mal als 'nichtsahnender' Windows user)?
Aha, Windows. Vielleicht liegt da eher ein grundsätzliches Mißverständnis vor: Du schriebst eingangs "der ganzen Welt Lese- und Schreibrechte auf meinen Server gebe", das ist aber eigentlich falsch.
Es gibt drei Rechtegruppen, die Gruppe für den Eigentümer ("user"), die Gruppe für den angegebenen Benutzerkreis ("group") sowie die für alle anderen ("others"). "Alle anderen" bedeutet aber nicht wortwörtlich "die ganze Welt", sondern einfach alle anderen _eingetragenen_ Benutzer dieses einen Rechners (gewissermaßen alle Kunden, die der Hoster auf diesem Server hat). Der Kreis der Mißbrauchskandidaten ist also doch eher begrenzt, zumal nicht jeder weiß, das man auf die eine oder andere Weise fremde Daten begucken und/oder bearbeiten kann.
Zusätzlich gibt es in PHP noch ein, zwei Einstellungen, die Fremdzugriffe verhindern sollen, so daß man eigentlich schon eher sagen kann, das Risiko geht nicht so sehr von PHP aus, sondern von CGI-Anwendungen.
Bevor das jetzt ausartet: Welches Problem hast Du denn _genau_, d.h. welche Fehlermeldung, wo wirst Du blockiert?
Gruß,
soenk.e
Bevor das jetzt ausartet: Welches Problem hast Du denn _genau_, d.h. welche Fehlermeldung, wo wirst Du blockiert?
Dankeschön!
Deine Erklärung hat es genau getroffen - ich als Windows Nutzer dachte immer es bestehen Schreibrechte bei 755 für 'die Welt'. Wenn Schreibrechte nur für die Gruppen/User die am Server registriert sind bestehen hat sich mein Problem/Bedenken erledigt, da das Risiko in meinem Falle dann gen 0 geht. Danke für die Aufklärung.
Moin!
Deine Erklärung hat es genau getroffen - ich als Windows Nutzer dachte immer es bestehen Schreibrechte bei 755 für 'die Welt'. Wenn Schreibrechte nur für die Gruppen/User die am Server registriert sind bestehen hat sich mein Problem/Bedenken erledigt, da das Risiko in meinem Falle dann gen 0 geht. Danke für die Aufklärung.
Bei "755" bestehen sowieso nur Schreibrechte für den DateiBESITZER. Die Gruppen- und "Welt"-Rechte erlauben nur Lesen und Ausführen, aber nicht schreiben.
- Sven Rautenberg
Hi,
ich habe mir vor geraumer Zeit genau dieselbe Frage gestellt. Am Ende habe ich mich für die (meines Erachtens sicherste Lösung ;-) entschieden:
Nach dem Upload benutze ich zum Abspeichern der Dateien die ftp Befehle von PHP. Ich habe mir vorher ein extra Unterverzeichnis mit separatem ftp Zugang auf meinem Webspace eingerichtet. Da die Zugangsdaten für den ftp Zugang ebenfalls auf dem Server im Script liegen müssen, habe ich dieses zusätzlich als include File in einem anderen Verzeichnis mit Verzeichnisschutz abgelegt.
Sicherheitsgrenzen:
Client: hat keine Möglicheit an die Daten zu gelangen
andere Nutzer des Servers: leider schon, abhängig von den Einstellungen des PHP Moduls auf dem Server...
Beste Grüße
Michael
Nach dem Upload benutze ich zum Abspeichern der Dateien die ftp Befehle von PHP.
Hi,
das hört sich recht interresant an - hättest du evtl. ein kleines Beispiel für mich?
Hi,
Null problemo:
also wie bereits bekannt vorher das Formular:
...
<input name="bild" type="file">
...
und dann nach der Übertragung vom Client:
// Herstellen der Basis-Verbindung
$conn_id = ftp_connect("www.abc.de");
// Einloggen mit Benutzername und Kennwort
$login_result = ftp_login($conn_id, $ftp_user, $ftp_password);
// Verbindung überprüfen
if (!$conn_id || !$login_result)
die("Fehler beim Upload");
// Upload der Datei
$upload = ftp_put($conn_id, "irgendwas.jpg", $bild, FTP_BINARY);
// Upload-Status überprüfen
if (!$upload)
die("Fehler beim Upload");
// Schließen des FTP-Streams
ftp_quit($conn_id);
Man kopiert sozusagen das Bild aus dem Temp Verzeichnis des PHP Moduls per ftp in ein Verzeichnis des Servers...
Gruß
Michael
Hi,
...und bevor ich es vergesse: Diese Vorgehensweise hat auch den Vorteil, dass man später bequem mit seinem ftp-Programm die Dateien herunterladen kann, ohne irgendwelche Rechte erneut ändern zu müssen (CHMODE über PHP Befehle!). Das war beim umkopieren mit den PHP file Befehlen immer das Problem. Danach konnte ich nie einfach mal so eine Kopie von den Files machen....
Übrigens den ganzen Aufwasch kann man sich ersparen, wenn man ein eigenen dedicated Server hat.... ;-)
MfG
Michael
Hi!
Hat jemand von Euch dafür eine Lösung? (Also wie man Uploads/Dateien per PhP administrieren kann ohne 0755 benutzen zu müssen.) Ich komm da irgenwie nicht weiter...
Du könntest einmalig das Upload-Verzeichnis dem User des Webservers zuordnen, dann müsstest Du eigentlich mit 0600 auskommen. Dann kann aber nur der Webserver die Dateien lesen und beschreiben, kein FTP und sonst was. Es kommt aber drauf an welche Rechte Du auf dem Server hast, ob Du das überhaupt machen kannst.
Grüße
Andreas