Sebastian: Dateiupload im Safe Mode

Hi,

ich wollte einen Dateiupload in meine Website einbauen mit dem man pdf-Dateien hochladen kann.
Mit move_uploaded_file bekomme ich folgende Fehlermeldung:
Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 1049 is not allowed to access /srv/www/htdocs/web222 owned by uid 0 in /srv/www/htdocs/web222/html/Probeseite/admin/new_protokolle.php

Kann ich die Prüfung der UID irgendwie umgehen? Lässt sich das Problem vielleicht mit ftp-Funktionen lösen? Wenn ja, wie?

Gruß
Sebastian

  1. Kann ich die Prüfung der UID irgendwie umgehen? Lässt sich das Problem vielleicht mit ftp-Funktionen lösen? Wenn ja, wie?

    Die Prüfung umgehen kannst du nicht - du kannst aber ggf. die Dateirechte[1] per CHMOD verändern.

    Alterantiv kannst du, sofern du über ssh-Zugriff verfügst, den Owner ändern (chown)

    [1] bzw. die Verzeichnisrechte der betroffenen Verzeichnisse, unter Linux/Unix muss ist create/move/rename eine Operation auf Verzeichnisebene - die Rechte der Datei zu ändern, sollte keinen Effekt haben, wenn ich nicht falsch liege.

  2. Lieber Sebastian,

    unabhängig von suits Lösungsvorschlägen kann ich Dir nur dringend raten, entweder Deinen Hoster davon zu überzeugen, dass er Dir den Safe-Mode in PHP abstellt, oder dass Du eben einen vernünftigen Hoster findest.

    Auch ich habe den Safe-Mode hinter mir. Und ich habe den Providerwechsel nie bereut! Dieses lästige Feature wird in PHP6 ohnehin aussterben, daher ist seine Verwendung wirklich zu hinterfragen. Fähige Hoster haben es nicht nötig, ihren Kunden diese Geißel aufzuerlegen!

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  3. Hello,

    bisschen mehr info bitte.

    Wo liegt das hochgeladene File? Was steht als effektives Upload-Dir in der php.ini?

    ich wollte einen Dateiupload in meine Website einbauen mit dem man pdf-Dateien hochladen kann.
    Mit move_uploaded_file bekomme ich folgende Fehlermeldung:
    Warning: move_uploaded_file(): SAFE MODE Restriction in effect.

    The script whose uid is 1049 is not allowed to access

    /srv/www/htdocs/web222 owned by uid 0 in

    Ist das das Zielverzeichnis, in das Du das File verschieben willst?

    /srv/www/htdocs/web222/html/Probeseite/admin/new_protokolle.php

    Ist ja sowieso etwas merkwürdig aufgebaut...

    /srv/www/web222/htdocs/

    wäre irgendwie logischer. Aber das hat ja der Provider verbockt...

    Wenn denn /srv/www/htdocs/web222/ das Zielverzeichnis ist und root gehört, dann hast Du nur eine Chance. Du kannst mit PHP nicht direkt in dieses Verzeichnis hineinkopieren, sondern nur in ein Unterverzeichnis darin, dass Du mit FTP angelegt hast. Der FTP-User wird dann hoffentlich Nr 1049 sein.

    Liebe Grüße aus Syburg

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Lieber Tom,

      wäre irgendwie logischer. Aber das hat ja der Provider verbockt...

      Wenn ... dann hast Du nur eine Chance. Du kannst ... Der FTP-User wird dann
      hoffentlich Nr 1049 sein.

      das klingt alles sehr nach vielleicht, unter Umständen und möglicherweise. Würdest Du dem OP vor diesem Hintergrund nicht auch zu einem Providerwechsel raten? Immerhin ist der Safe-Mode nur nervig - sonst nichts. Und wenn Provider den noch immer benutzen, und - wie Du festgestellt hast - wenn sie dabei dann noch einen etwas ungewöhnlich konfigurierten Server haben, dann ist der Ratschlag zum Wechsel sicherlich umso angebrachter.

      Stimmst Du mir zu?

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Hello,

        Stimmst Du mir zu?

        Nein. Ich kenne die Umstände nicht und kann diesbezüglich auch nicht pauschal zu einem Wechsel raten.
        Ich würde aber den Provider bitten, den Safemode auszuschalten und stattdessen eine ordentliche Einrichtung von open_basedir und disable_functions vorzunehmen.

        Es geht ja beim safe_mode darum, dass man mit einem "click" alle "gefährlichen" Funktionen ausschaltet. Die Geschichte mit den UIDs und GIDs ist dabei nur nebensächlich, wenn auch lästig.

        Liebe Grüße aus Syburg

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
    2. Hello Sebastian,

      ich habe das jetzt extra nochmal nachgebaut für Dich auf meinem Testserver.
      Ist schon länger her, dass ich mich mit dem Safe_Mode auseinandergesetzt hatte:
      http://selfhtml.bitworks.de/ -> Wie funktioniert der Safe Mode

      Aber es ist so, wie ich sagte:
      Lege ein Unterverzeichnis für Deine Uploads mit deinem FTP-Programm an.
      Dieses Verzeichnis sollte dann dem User gehören, dem auch die Scripte gehören, denn die hast Du ja auch mittels FTP hochgeladen. Leider wirst Du dieses Verzeichnis mit dem Recht o+rwx (also ??7) versehen müssen, damit der PHP-Prozess darin schreiben darf.

      Besser wäre es, wenn es eine gemeinsame Gruppe für die PHP-Prozesse und den User gäbe, dann könntest Du die mit chgrp einstellen und für die Gruppe rwx setzen. Aber das wird wohl auf deinem
      Server nicht zu erwarten sein.

      Die Dateien, die Du dann in das Unterverzeichnis hochlädst gehören dann dem PHP-User. Du kannst sie also mit FTP vermutlich nicht wieder löschen. Dazu müsstest Du per PHP die Rechte für die Files auch vorher auf ??7 stellen.

      Wenn es möglich ist, sollte man das Verzeichnis, in dem sich Upload-Files befinden, für HTTP-Zugriff sperren oder zumindest die Ausführung von PHP in diesem Verzeichnis unterbinden.

      Das geht meistens mit einer .htaccess-Datei. Besser wäre es natürlich auch hier, das fest in die Serverkonfiguration einzubauen.

      Ich kann eigentlich jedem Massenhoster nur empfehlen, für seien Kunden ein derartiges Upload-Verzeichnis schon vorzubereiten, besser natürlich noch, es liegt gleich außerhalb der Document Root.

      Liebe Grüße aus Syburg

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hello,

        das mit dem nicht löschen können nehme ich zurück, denn auf einem Linux-Server ist dafür ja das Recht verantwortlich, was fürs Verzeichnis eingestellt ist, in dem das File liegt.

        Liebe Grüße aus Syburg

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
      2. Hello Sebastian,

        Wenn es möglich ist, sollte man das Verzeichnis, in dem sich Upload-Files befinden, für HTTP-Zugriff sperren oder zumindest die Ausführung von PHP in diesem Verzeichnis unterbinden.

        Wenn AllowOverride entsprechend eingestellt ist, kannst Du das mit einer .htaccess-Datei tun:

        ### .htaccess
           php_value engine off

        Dann würden PHP-Files in diesem Verzeichnis nicht geparst werden.
        Das ist sicherer, falls Dir doch mal jemand eine PHP-Datei hochladen sollte!

        Liebe Grüße aus Syburg

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de