Dateiupload Sicherheit
nefi
- php
Hallo,
ich habe ein Hosting mit PHP 4 und Safe Mode. Gibt es eine Möglichkeit dass die Berechtigung für ein Verzeichnis in das per move_uploaded_file Funktion, Dateien geschrieben werden nicht 777 sein muss?
Das Skript gehört einem user user123 der der Gruppe gruppe123 angehört und der Apache läuft unter einem User ww123 der Gruppe www234.
Gruß nefi
Hello,
der Apache sollte immer schreiben dürfen, wenn Du das Verzeichnis mittels Apache (PHP) erstellt hast und nicht mittels FTP. Das Script muss natürlich auch dem Apachen gehören. Das kannst Du z.B. erreichen, indem Du ein mit FTP hochgeladenes Script durch ein PHP-Script kopieren lässt.
Das kopierte gehört dann auch dem Apachen.
Das Dumme an der ganzen Sache ist nur, dass Du mit FTP nachher nicht mer an die Files im Upload-Verzeichnis herankommst.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hi,
das Problem daran ist dann nur wieder der Safe Mode der dann dann Fehlermeldungen um sich wirft das der Apache User die Skripte nicht ausführen darf. Ich werde mal versuchen dem Apache und dem FTP User
eine gemeinsame Gruppe zuzuweisen und per 775 in das Verzeichnis zu schreiben das müsste doch auch gehen oder ??
Gruß
Matthias
Hello,
Hi,
das Problem daran ist dann nur wieder der Safe Mode der dann dann Fehlermeldungen um sich wirft das der Apache User die Skripte nicht ausführen darf.
Ich versuch nochmal knapp zu umreißen, wo das Problem liegt:
Scripte dürfen immer ausgeführt werden, wenn der WebserverUser sie lesen darf. Dafür stehen alle drei Rechtegruppen: Owner, Gruppe, Others zur Verfügung, das herzustellen.
Die Scripte dürfen auf Verzeichnisse und Dateien zugreifen, wenn
Verzeichnis/Datei denselben Owner haben, wie das Script
oder
Das Verzeichnis/die Datei in einem Verzeichnis mit demselben Owner wie der des Scriptes liegen
Bei einer "Normaleinrichtung" passiert folgendes:
Die Document-Root gehört dem FTP-User
Die hochgeladenen Scripte gehören dem FTP-User
Wird nun mittels PHP-Script eine Datei angelegt, gehört die dem WebserverUser
Da die Datei aber in einem Verzeichnis liegt, dass demsleben Owner wie das Script gehört, darf das Script noch damit arbeiten.
Wenn man nun in diesem Unterverzeichnis Dateien mittels PHP erzeugt, gehören die dem WebserverUser.
Es gehören nun also weder die Datei noch das Verzeichnis, in dem sie liegt demselben Owner wie dem vom Script. Das Script hat einen anderen Owner, als die Datei und ihr Verzeichnis. Nun kneift Dich der Safemode.
Dasselbe gilt natürlich auch für die hochgeladenen und mittels PHP-Script verschobenen Dateien. Entweder Du legst die Unterverzeichnisse alle mittels FTP an, damit sie dieselben Owner haben, wie die Scripte, oder aber du wendest einen Trick an:
Nach dem Hochladen der Scripte kopierst Du diese mittels ebenfalls hochgeladenem (und auth-geschütztem) Script auf dem Webserver. Nun gehören die Scripte demselben User, wie die hochgeladenen Dateien und alles wird gut.
Per FTP hannst Du auf die mittels PHP-Script hochgeladenen Dateien dann allerdings meistens nicht mehr zugreifen. Das musst Du dann mittels PHP-Script und HTTP machen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo,
wie sicherheitskritisch ist denn der Einsatz eines 777
Verzeichnisses das dem FTP User gehört überhaupt?
Wie sehen die Möglichkeiten für einen "Angreifer" aus
dort Dateien einzuspielen?
Gruß
Matthias
Hello,
wie sicherheitskritisch ist denn der Einsatz eines 777
Verzeichnisses das dem FTP User gehört überhaupt?
Wie sehen die Möglichkeiten für einen "Angreifer" aus
dort Dateien einzuspielen?
Das Problem sind andere Dienste, die schlampig eingerichet worden sind. PHP z.B. kann als Webserver-User in einem "normalen" shared System erstmal auf alle Verzeichnisse des Servers zugreifen, auf dei der Webserver eben auch zugreifen kann. Da jeder User nun aber gerne seine Document-Root für sich behalten möchte, muss es für jeden Virtual Host auch entsprechend konfiguriert werden.
Jeder VirtHost benötigt:
open_basedir auf eigene Document Root bzw. FTP-Verzeichnisse außerhalb der DocRoot
eigenes tmp-dir
eigenes Session-Verzeichnis!
eigenes include-dir
nur Leserechte auf alle gemeinsamen files, wie z.B. wohlselektierte PEAR-Pakete
leider müssen auch die Shellfunktionen (exec() & Co.) ausgeschaltet werden. (macht der SM)
Die Zugriffsbeschränkungen des Safemode hätte man sich mMn schenken können, da sie eigentlich nur greifen, wenn der User die Dateien grundsätzlich unter seinem Namen als Owner anlegt, was ja aber bei Upload-Dateien gar nicht geht.
Das bezieht sich jetzt nur auf die Modulversion, genauso wie der Safemode.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo nefi.
ich habe ein Hosting mit PHP 4 und Safe Mode. Gibt es eine Möglichkeit dass die Berechtigung für ein Verzeichnis in das per move_uploaded_file Funktion, Dateien geschrieben werden nicht 777 sein muss?
Das Skript gehört einem user user123 der der Gruppe gruppe123 angehört und der Apache läuft unter einem User ww123 der Gruppe www234.
Günstig wäre es, wenn du eine neue Gruppe erzeugen würdest und dieser nur diesen User und den httpd hinzu fügen würdest.
Damit könntest du Lese-, Schreib- und Ausführungrechte auf diese eine Gruppe (und damit den Usern, die dieser Gruppe angehören) beschränken und 0770 (User inbegriffen) bzw. 0070 (nur die Gruppe) würde ausreichen.
Einen schönen Mittwoch noch.
Gruß, Ashura