hawkmaster: safe_mode = Off ?? Wie macht ihr es?

Hallo zusammen,
ich hatte heute die Gelegenheit einen Einblick in eine Software Ausschreibung für Web Anwendungen zu bekommen.

Unter anderem war eine Bedingung (von sehr vielen anderen) das der
safe_mode = on
sein muß.

Ich hatte den bisher immer auf Off.

Laut Doku kann es im "on" Betrieb Probleme mit "fopen" und "mkdir" bzw. "exec", "passthru" geben.
Ich habe es mal auf meinem Testserver (XAMPP unter Win XP Prof) aktiviert und hatte aber keine Probleme mit "fopen" und "mkdir". Verzeichnisse wurden trotzdem angelegt.
Habe ich da was falsch verstanden oder wirkt sich das eher unter Linux aus?

Mich würde nur mal interessieren, wie ihr das bei euren Projekten macht mit safe_mode?

vielen Dank und viele Grüße
hawk

  1. Hallo,
    meine Meinung: Wenn du den safe mode auf off benötigt, hast du höchstwahrscheinlich etwas falsch gemacht.

    Naja, lies dir doch die Doku durch:
    http://de3.php.net/manual/de/features.safe-mode.php

    und
    http://de3.php.net/manual/en/features.safe-mode.functions.php

    mkdir()
    Überprüft ob das Verzeichnis in dem das Skript ausgeführt werden soll, die gleiche UID (Eigentümer) hat wie das Skript selbst.

    exec()
    Ausführbare Dateien können nur innerhalb des durch safe_mode_exec_dir angegebenen Verzeichnisses ausgeführt werden. Aus praktischen Gründen ist es momentan nicht erlaubt, ..  im Pfad zu den ausführbaren Datein anzugeben.

    fopen()
    Checks whether the directory in which you are about to operate has the same UID (owner) as the script that is being executed.

    Wie gesagt, wenn du unbedingt safe mode auf off benötigst, hast du sehr wahrscheinlich etwas falsch gemacht.
    Ansonsten, wenn man vernünftig programmiert, sind die Beeinträchtigungen die man durch den Safe Mode erfährt eher gering (nicht bemerkenswert) und betreffen in vielen Dingen den Schutz von anderen Usern (vor dir) auf dem Server.

    MFG

    1. Hallo Klaus,

      vielen Dank für deine Erklärung und Hilfe.
      Ich habe mich ehrlich gesagt bisher noch nicht um den safe_mode gekümmert, da es bei meiner Anwednung nur um eine ganz kleine lokale Intranet Anwendung handelt.
      Ich wollte nur mal nachfragen wie es andere handhaben.

      Bei mir kommen an ein paar Stellen im Code Aufrufe mit "exec(test.bat)" oder 1-2 andere Exe Dateien (gswin32c.exe) vor. Daher vermutlich auch das "Off".

      wenn ich dich richtig verstanden habe, müssen dann alle verwendeten Exe Dateien in der php.ini bei "safe_mode_exec_dir =" angegeben werden?

      Kann man dort dann auch mehrere Verzeichnisse definieren?
      Kannst du mir mal ein Beispiel geben wie das auszusehen hätte?

      vielen Dank und viele Grüße
      hawk

      1. Hallo,

        Bei mir kommen an ein paar Stellen im Code Aufrufe mit "exec(test.bat)" oder 1-2 andere Exe Dateien (gswin32c.exe) vor. Daher vermutlich auch das "Off".

        Das ist schon evil.
        Was willst du denn mal mit der Anwendung machen, wenn diese später mal auf einem richtigem Server läuft?
        Die meisten Server laufen unter Linux (bzw. eines Unix-Derivates), womit du das Ausführen einer .exe schonmal vergessen kannst.
        Auch ein echter Windows Server (sofern du keine root/admin Rechte hast) wird dir wohl kaum erlauben, beliebige Programme zu starten.

        wenn ich dich richtig verstanden habe, müssen dann alle verwendeten Exe Dateien in der php.ini bei "safe_mode_exec_dir =" angegeben werden?

        Ja, das ist richtig.
        Allerdings hast du das viel größere Problem damit gar nicht behoben (was passiert unter Linux & Co.).
        Außerdem ist es meistens sehr sehr unschön, wenn deine Applikation auf fremde ausfürbare Programme zugreifen muss, da dies bei fast jedem Server nicht möglich ist.
        Persönlich habe ich in x-tausend Codezeilen noch nie wirklich exec benötigt, da wenn es sich vermeiden lässt, es auch vermieden werden sollte.

        Was du mit gsview machst, kann ich nicht genau beurteilen, eine schönere Lösungen erhälst du vermutlich wenn du die Postscript Funktionen von PHP verwendest:
        http://de3.php.net/manual/de/ref.ps.php

        Wobei das auch nicht auf allen Server zur Verfügung steht.

        MFG

        1. Hallo Klaus,
          vielen Dank für deine Erklärungen.

          Was willst du denn mal mit der Anwendung machen, wenn diese später mal auf einem richtigem Server läuft?
          Die meisten Server laufen unter Linux (bzw. eines Unix-Derivates), womit du das Ausführen einer .exe schonmal vergessen kannst.

          Das ist mir schon klar. Daher hatte ich ja auch eingangs geschrieben das es sich um eine ganz spezielle Anwendung handelt die rein in einem Intranet läuft. Auch wird sie (vorerst) immer auf einem Windows Apache Webserver laufen.
          Falls je einmal die Entscheidung kommen sollte das das Ganze auch unter Linux laufen soll, muss natürlich einiges geändert oder angepasst werden.

          Es werden eigentlich nur 3 Exe Dateien verwendet.
          (Setx.exe um Registry Einträge zu lesen, Gsview um PS Dateien in JPG umzuwandeln und eine Exe die eine Zip Datei in eine ausführbare Exe Datei umwandelt.)
          Ich glaube nicht das man dies alles mit reinem PHP Code machen könnte.
          Klar, unter Linux könnte man auch GSScript verwenden.

          Was du mit gsview machst, kann ich nicht genau beurteilen, eine schönere Lösungen erhälst du vermutlich wenn du die Postscript Funktionen von PHP verwendest:

          Das ist ein guter Hinweis. Werde ich mir mal anschauen.

          vielen Dank und viele Grüße
          hawk

          1. Hallo hawk,

            (Setx.exe um Registry Einträge zu lesen, Gsview um PS Dateien in JPG umzuwandeln und eine Exe die eine Zip Datei in eine ausführbare Exe Datei umwandelt.)
            Ich glaube nicht das man dies alles mit reinem PHP Code machen könnte.

            Wenn Du unter Windows die Registry mit PHP auslesen willst und die COM-Erweiterung installiert hast, dann kannst Du folgendes machen:

            $wscript = new COM('WScript.Shell');  
            $inhalt = $wscript->RegRead ('HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\sonstwas');
            

            Das verwendet im Endeffekt das WScript.Shell-Objekt, das im Windows Scripting Host enthalten ist. Doku dazu findest Du auf der MSDN-Seite von Microsoft.

            Unter Linux würde das natürlich entfallen, da Du unter Linux keine Registry hast, wie es sie unter Windows gibt.

            Selbstentpackende Exe-Dateien erstellen ist in meinen Augen auch relativ einfach machbar. Zumindest noch zu der Zeit, als ich mich damit mal beschäftigt habe (ist etwas her) waren selbstextrahierende Exe-Dateien unter Windows nichts anderes als eine normale Exe-Datei, an die hinter den Exe-Teil (der in der Software enthalten war, mit der man diese Dateien erstellt hat) einfach das Archiv (z.B. ZIP) angefügt hat, d.h. im Endeffekt reicht es aus, wenn Du folgendes machst:

            $template = file_get_contents ('selbstentpacker_vorlage.exe');  
            $zip = file_get_contents ('zipdatei.zip');  
            file_put_contents ('ausgabedatei.exe', $template . $zip);
            

            Wie Du an die Roh-Exe-Datei ohne bereits vorhandenes Archiv rankommst, wäre dann allerdings die zweite Frage. Hängt halt alles von der bisherigen Software ab, die diese Exe-Dateien erzeugt, eventuell funktioniert die auch nach einem ganz anderem Schema, als das einfache Schema, das ich kenne, dann würde die Methode von mir natürlich versagen. Aber vielleicht gibt Dir das einen Hinweis, wonach Du für sowas suchen musst.

            Zwei von den drei Punkten kann man also mit PHP alleine mit vertretbarem Aufwand realisieren.

            Nur mit dem Postscript-Gedöns wirst Du Probleme haben - es ist zwar prinzipiell möglich (PHP ist ja schließlich eine Programmiersprache) einen PS-Interpreter in PHP zu schreiben, mit dem Du dann JPGs generieren kannst, allerdings müsstest Du dann Postscript komplett in PHP implementieren - und das wäre vmtl. zum einen langsam und zum anderen extrem aufwändig.

            Viele Grüße,
            Christian

      2. Ich wollte nur mal nachfragen wie es andere handhaben.

        Ich handhabe es so, dass meine Scripte mit minimalen Berechtigungen auch noch laufen. Das heisst, short_opentags = Off, safemode = On, register_globals = Off um nur einige zu nennen.

        Dadurch laufen diese Scripte auf praktisch jedem Webspace ohne Einschränkungen.

    2. Hallo Klaus,

      Wie gesagt, wenn du unbedingt safe mode auf off benötigst, hast du sehr wahrscheinlich etwas falsch gemacht.

      Diese Aussage ist so pauschal schlichtweg falsch!

      Der Safemode macht immer dann Probleme, wenn die Rechtevergabe auf dem Server (Dateirechte, Owner und Groups) eigentlich vernünftig, also sehr restriktiv, geregelt werden, UND gleichzeitig Datenaustausch auf unterschiedlichen Wegen stattfinden soll. Gemeint ist damit FTP versa HTTP (Uploads)

      Dann haben die Dateien und Verzeichnisse meistens unterschiedliche Owner und Groups und passen eben nicht mehr in das Schema des Safe-Mode.

      Der Safe-Mode ist aber deshalb immer noch so beliebt, weil er auf bequeme Weise alle "gefährlichen" Funktionen (isnbesondere die Systemfunktionen) von PHP deaktiviert. Das könnte man natürlich auch explizit machen über "functions_disabled", ist aber aufwändiger und die Gefahr, eine zu vergessen, ist eben riesig.

      Der Safe-Mode spielt im Prinzip nur auf shared Hosting Systemen eine Rolle, auf denen alle Nutzer denselben PHP-Parser (als Modul) verwenden. Wenn man den PHP-User gezielt zuweisen kann, benötigt man auch keinen Safe-Mode mehr.

      LG
      Chris©

      1. Hallo,

        Wie gesagt, wenn du unbedingt safe mode auf off benötigst, hast du sehr wahrscheinlich etwas falsch gemacht.

        Diese Aussage ist so pauschal schlichtweg falsch!

        Der Safemode macht immer dann Probleme, wenn die Rechtevergabe auf dem Server (Dateirechte, Owner und Groups) eigentlich vernünftig, also sehr restriktiv, geregelt werden, UND gleichzeitig Datenaustausch auf unterschiedlichen Wegen stattfinden soll. Gemeint ist damit FTP versa HTTP (Uploads)

        Naja ob dieses Problem unbedingt beim Script anzusiedeln ist ist fraglich.
        Wie gesagt, wenn das Script _unbedingt_ safe-mode=off braucht, bei dem dir geschilderten Fall kann es tatsächlich zu Komplikationen kommen, welche sicher aber mit nicht ganz so restriktiven Dateirechten beheben lassen, was zwar nicht die schönste Lösung wäre, aber es der Script funktioniert dann tadellos oder es wurde etwas falsch gemacht ;)

        Aber die großen Komplikationen mit safe mode gibt es beim Hochladen mit FTP und HTTP auch nicht.
        Wenn du eine Datei hochlädst, dann ist, wenn mich nicht alles täuscht, der Owner der Datei der User der den Script ausführt, also meistens nicht der FTP User.
        D.h., du kannst in dem Script mit der Datei alles weitere machen, verändern, verschieben, löschen oder aber auch die Rechte hochsetzen.
        Was nur nicht funktioniert, ist der umgekehrte Weg, wenn eine per HTTP hochgeladene Datei eine per FTP hochgeladene Datei manipulieren möchte, erhält man eine Fehlermeldung.

        Aber auch hier wieder meine Statement dazu:
        Wer per HTTP hochgeladene Dateien ausführen lässt, hat vermutlich etwas falsch gemacht.
        Denn dies ist eine potenziell enorme Sicherheitslücke, wenn man beliebigen Code hochladen kann, der dann auch noch ausgeführt wird.

        Naja, ich lasse mich gerne eines besseren belehrens, wenn du mir also etwas detailierte Schildern könntest wann es wie zu Problemen mit den Rechten kommt, sprich was muss ich wie hochladen, welche Datei wird ausgeführt und führt zu Problemen bei den Rechten?

        MFG

        1. Hallo!

          Naja, ich lasse mich gerne eines besseren belehrens, wenn du mir also etwas detailierte Schildern könntest wann es wie zu Problemen mit den Rechten kommt, sprich was muss ich wie hochladen, welche Datei wird ausgeführt und führt zu Problemen bei den Rechten?

          Der Safe-Mode ist deprecated, er ist nicht ohne Grund in PHP 6 nicht mehr enthalten. Der Hintergrund ist nämlich folgender: Der Safe-Mode versucht ein Problem zu lösen, dessen Aufgabe es eigentlich nicht ist, von PHP gelöst zu werden.

          Das Problem ist nämlich folgendes: Wenn man PHP als Modul installiert, dann läuft es mit den Rechten des Webserver-Users - und der ist in der Regel der gleiche für jeden virtuellen Host (es gibt zwar einige experimentelle MPMs für den Apache, die den ganzen Apache für verschiedene Hosts laufen lassen, aber produktionsreif sind die allesamt nicht - zudem bringen die noch andere Probleme mit sich). Wenn jetzt aber in einer Shared-Hosting-Umgebung Scripte von verschiedenen Kunden unter dem gleichen Benutzer laufen, dann können die sich ja auch gegenseitig in die Quere kommen. Das ist selbstverständlich schlecht, sehr schlecht. Andererseits war aber PHP als Modul lange Zeit die einzige performante Alternative zur reinen CGI-Ausführung. Bei CGI wird ein anderer Prozess gestartet, der dann natürlich unter einem anderen User laufen kann, als der Webserverprozess selbst (nennt sich beim Apache suexec).

          Was macht nun also der Safe-Mode? Mal abgesehen davon, dass einige potentiell gefährliche Funktionen deaktiviert werden, wird folgendes überprüft: Wenn auf eine Datei zugegriffen werden soll, wird verglichen, ob der Eigentümer der Datei mit dem Eigentümer des Scripts, das gerade ausgeführt wird, übereinstimmt. Wenn nicht, gibt's eine Fehlermeldung und die Operation wird verboten.

          Dies führt zu folgendem Problem: Das Anlegen eines Verzeichnisses funktioniert noch problemlos, da das Verzeichnis, in dem man das Unterverzeichnis anlegt, noch dem User des Scripts gehört. Auch der Zugriff auf das Unterverzeichnis funktioniert noch. Will man aber in dem Unterverzeichnis eine Datei anlegen, dann versagt das - weil das Verzeichnis, das die Datei enthalten soll, NICHT mehr dem Eigentümer des Scripts gehört. Man kann also im Safe-Mode nicht mit Unterverzeichnissen arbeiten! Es gibt *etliche* Anwendungsfälle, in denen die Verwendung von dynamisch generierten Unterverzeichnissen enorm (!) praktisch ist.

          Zudem bietet der Safe-Mode keine wirkliche Sicherheit vor Leuten, die wirklich etwas anstellen wollen. Es gibt immer irgend welche Möglichkeiten, den Safe-Mode zu umgehen, weil die Checks eben nur in PHP selbst durchgeführt werden, nicht aber im Betriebssystem. Der Hosting-Betreiber gewinnt also ein vermeintliches Sicherheitsgefühl, ohne dass die Sicherheit tatsächlich vorhanden ist!

          Zum Beispiel gibt es etliche PHP-Erweiterungen, die auch installiert sind. Es sind etliche Beispiele denkbar, wie man mit Erweiterungen den Safe-Mode umgehen kann. Zum Beispiel wurde jüngst entdeckt, dass man mit der curl-Erweiterung den Safe-Mode umgehen kann, eine gepatchte PHP-Version ist noch nicht veröffentlicht worden (einen Patch gibt es aber glaube ich bereits). Außerdem: Wenn man Fremdsoftware ausführt mittels system() o.ä., dann gelten die Safe-Mode-Limitierungen von PHP selbstverständlich nicht mehr! Klar, im Safe-Mode kann der Admin einschränken, dass nur Software aus einem bestimmten Verzeichnis ausgeführt werden können darf. Damit kann der Admin kontrollieren, dass nur Software, die er zulässt, ausgeführt werden darf. Problem dabei ist nur, dass der Admin dann sicherstellen müsste, dass die Software es nicht zulässt, die Safe-Mode-Limitierungen von PHP zu umgehen. Das *kann* er aber nicht wirklich - und eine derartige Möglichkeit ist im Normafall keine Sicherheitslücke in der Software selbst, sondern meist nur ein zusätzliches Feature (der Autor der Fremdsoftware hat die ja idR. nicht primär zur Verwendung innerhalb von PHP mit Safe-Mode geschrieben, sondern als Tool, das unter einem bestimmten User ausgeführt wird und dem User innerhalb der Limitierungen, die der Kernel bietet, das maximum an Features anbietet).

          Es gibt außerdem noch einige weitere Einschränkungen des Safe-Modes, die im Endeffekt legitime Features stark einschränken, ohne dabei wirklich Sicherheit zu schaffen.

          Die PHP-Entwickler haben dies auch eingesehen und entfernen den Safe-Mode aus PHP ab Version 6. Es gibt ihn dort also nicht mehr. Die Entwickler stellen sich inzwischen dankenswerterweise auf den Standpunkt: Der Kernel soll Einschränkungen forcieren.

          Das heißt aber auch, dass PHP als Modul für Shared Hosting keine dauerhafte Lösung ist. Zum Glück gibt es im Gegensatz zur Anfangszeit von PHP nun auch eine brauchbare Alternative zur Modul-Variante von PHP: FastCGI. Mittels FastCGI ist es möglich, eine vergleichbare Performance wie PHP als Modul zu erreichen, die PHP-Scripte jedoch dennoch in separaten Prozessen ausführen zu lassen und somit unter einem anderen User (idR. der User, dem das Script gehört) in Erscheinung treten zu können. Damit braucht man irgendwelche Krücken wie den Safe-Mode nicht mehr und erreicht außerdem eine wirkliche Sicherheit, die mit dem Safe-Mode nicht erreichbar ist.

          Viele Grüße,
          Christian

          1. Hallo Christian,
            ich habe selten so eine ausführliche und gute Erklärung hier gelesen.
            Vielen Dank dafür.

            Gruss
            hawk

        2. Hallo Klaus,

          Wie gesagt, wenn das Script _unbedingt_ safe-mode=off braucht, bei dem dir geschilderten Fall kann es tatsächlich zu Komplikationen kommen, welche sicher aber mit nicht ganz so restriktiven Dateirechten beheben lassen, was zwar nicht die schönste Lösung wäre, aber es der Script funktioniert dann tadellos oder es wurde etwas falsch gemacht ;)

          Das ist nicht richtig.
          Entscheidend ist hier die UID oder bei gelockertem Safe-Mode die UID oder die GID.
          Die müssen zusammenpassen.

          Wenn der FTP-Server aber die UID des FTP-Users einsetzt und der Webserver (das PHP-Modul) die UID des Webserver-Users, dann klappt da gar nichts mehr.

          Das Script selber kann durchaus lauffähig sein, abe die von ihm angesprochenen Dateien sind dann nicht zugänglich, weil vom eigenen Safe-Mode geblockt.

          Bekanntester Fall ist das Anlegen einer Datei in einem Verzeichnis, dass duech FTP angelegt wurde. Das Script wurde ebenfalls durch FTP hochgeladen. Das Anlegen einesr Datei klappt noch, da hier nur die Rechte aus dem Verzeichnis gelten (Skript und Verzeichnis habe denselben Owner) aber das Ändern oder Löschen der Datei klappt dann nicht mehr, weil hier plötzlich der Owner der Datei (zB. WWWRUN) nicht mehr übereinstimmt mit dem des Scriptes oder des übergeordneten Verzeichnisses.

          LG
          Chris©

          1. Hallo,

            Bekanntester Fall ist das Anlegen einer Datei in einem Verzeichnis, dass duech FTP angelegt wurde. Das Script wurde ebenfalls durch FTP hochgeladen. Das Anlegen einesr Datei klappt noch, da hier nur die Rechte aus dem Verzeichnis gelten (Skript und Verzeichnis habe denselben Owner) aber das Ändern oder Löschen der Datei klappt dann nicht mehr, weil hier plötzlich der Owner der Datei (zB. WWWRUN) nicht mehr übereinstimmt mit dem des Scriptes oder des übergeordneten Verzeichnisses.

            Also wenn man mit PHP eine Datei anlegt, dann hat dieses afaik den Owner wie der User der PHP ausführt.
            Dementsprechend kann der PHP Script diese selbst angelegte Datei beliebig verändern.

            Bekannt ist soetwas bei Template Engines, diese legen die fertig geparsten Templates in einem Cache Ordner und können diese natürlich auch entsprechend verändern oder löschen.
            Ein Problem welches auftreten kann, ist dass die Template Engine keine Rechte für den Cache Ordner hat (auch mittels FTP hochgeladen), allerdings ein gut geschriebenes Script überprüft dieses und bittet den User die Rechte für den Ordner entsprechend zu setzen, z.B. 0777, schon läuft das Script.

            Evt. hab ich dich auch missverstanden, wo der safe mode etwas nervig ist, wenn ein PHP Script eine per FTP hochgeladene Datei verändern möchte, z.B. in eine Config-Datei die Zugangsdaten für die MySQL Verbindung eintragen möchte.
            Aber auch hier wieder, solch ein Script sollte vorher die Schreibrechte prüfen (is_writeable) und ggf. den Nutzer bitten, die Rechte hochzuseten.

            Wie gesagt, gut geschriebene Scripts überprüfen diese und nach Änderung der Rechte laufen diese auch einwandfrei.

            Persönlich finde ich es auch gut, wenn man erst explizit die Rechte für solche Dateien ändern muss.
            Oftmals lädt man auch fremden Code hoch, z.B. ein Board (oder Forum), Gästebuch, Newsletterscript, CMS oder was auch immer, und dort finde ich es schon okay, dass solche Scripts nicht beliebig andere Dateien überschreiben können, sondern ich erst explizit Schreibrechte vergeben muss.

            Auch ist dies ein gewisser Schutz vor Code-Injections, so kann afaik eine erfolgreiche Code injection nicht den Admin-Login so manipulieren, dass die Passwörter irgendwo in Klartext gelogt werden, natürlich solange in die admin login Datei nicht irgendwelche Dateien mit den Rechten 777 eingebunden werden.

            MFG

            1. Hallo,

              Bekanntester Fall ist das Anlegen einer Datei in einem Verzeichnis, dass duech FTP angelegt wurde. Das Script wurde ebenfalls durch FTP hochgeladen. Das Anlegen einesr Datei klappt noch, da hier nur die Rechte aus dem Verzeichnis gelten (Skript und Verzeichnis habe denselben Owner) aber das Ändern oder Löschen der Datei klappt dann nicht mehr, weil hier plötzlich der Owner der Datei (zB. WWWRUN) nicht mehr übereinstimmt mit dem des Scriptes oder des übergeordneten Verzeichnisses.
              Also wenn man mit PHP eine Datei anlegt, dann hat dieses afaik den Owner wie der User der PHP ausführt.
              Dementsprechend kann der PHP Script diese selbst angelegte Datei beliebig verändern.

              Nein, leider nicht, wenn der Safe-Mode eingeschaltet ist.
              In obigem Fall sollte der Owner des Scriptes und der Owner des Verzeichnisses (1), in dem die Datei angelegt werden sollte, der FTP-User sein.

              Dann kann man nun ein Unter-Verzeichnis (2) anlegen. das bekommt dann den Owner des Webservers (Modulvariante). In diesem Unterverzeichnis (2) kann man mWn jetzt sogar noch eine Datei anlegen, da hierzu nur Veränderungen am Verzeichnis (2) notwendig sind. Dieses gehört zwar sem Owner des Webservers, steht aber in einem Verzeichnis (1), dass dem FTP-User == Script-Owner gehört. Damit ist die Regel für den Safe-Mode erfüllt. Es müssen die Owner (des Scriptes) und (des Files oder seines übergeordneten Verzeichnisses) übereinstimmen.

              Die Datei kann nun aber nicht mehr manipuliert werden, da sie weder selber dem Owner des Scriptes gehört, noch ihr Verzeichnis (2) dem Owner des Scriptes gehört.

              CMS-Systeme werden daher meistens durch ein Upload-Modul installiert. Das stellt sicher, dass alle Scripte und von diesem Modul angelegten Verzeichnisse dem Webserver-User gehören. Damit darf er auch damit arbeiten.

              LG
              Chris©

              1. Hallo,

                Bekanntester Fall ist das Anlegen einer Datei in einem Verzeichnis, dass duech FTP angelegt wurde. Das Script wurde ebenfalls durch FTP hochgeladen. Das Anlegen einesr Datei klappt noch, da hier nur die Rechte aus dem Verzeichnis gelten (Skript und Verzeichnis habe denselben Owner) aber das Ändern oder Löschen der Datei klappt dann nicht mehr, weil hier plötzlich der Owner der Datei (zB. WWWRUN) nicht mehr übereinstimmt mit dem des Scriptes oder des übergeordneten Verzeichnisses.
                Also wenn man mit PHP eine Datei anlegt, dann hat dieses afaik den Owner wie der User der PHP ausführt.
                Dementsprechend kann der PHP Script diese selbst angelegte Datei beliebig verändern.

                Nein, leider nicht, wenn der Safe-Mode eingeschaltet ist.

                also persönlich vertreibe ich auch ein kleines Script, mit einer selbstgeschrieben Template-Engine.
                Diese legt in einem Cache-Ordner die erstellen PHP Dateien ab um sie per include dann ins Script zu laden.
                Dort funktioniert das alles einwandfrei, wenn man ein Template ändert, überschreibt die Template Engine automatisch die entsprechende Datei im Cache.

                Dabei wird das Script für die Template-Engine, der leere Cache-Ordner als auch die Templates per FTP hochgeladen.
                Auch mit Safe Mode = on läuft das tadellos, das einzige was der User machen muss, ist dem Cache-Ordner die Rechte 777 zu geben (bzw. sicherzustellen, dass ein PHP Script Dateien in diesem Ordner erstellen darf).

                CMS-Systeme werden daher meistens durch ein Upload-Modul installiert. Das stellt sicher, dass alle Scripte und von diesem Modul angelegten Verzeichnisse dem Webserver-User gehören. Damit darf er auch damit arbeiten.

                Das ist mir wirklich neu.
                Also größere Boardsysteme, wie das wbb2, phpBB2, vBulletin3 werden normal per FTP hochgeladen, und zwar alle PHP Dateien.

                Anschließend ruft man eine install.php/setup.php o.ä. auf. Diese überprüft einmal, ob die Schreibrechte richtig gesetzt sind, einmal für den cache/tmp Ordner der für die Templates benötigt wird, das Verzeichnis in dem HTTP Uploads der User landen, die Datei mit den Config Daten etc.
                Anschließend fragt diese install.php einfach nur die Datenbankverbindungsdaten ab, passt die config Datei entsprechend an, erstellt die entsprechenden Tabellen und das Board läuft, egal ob Safe Mode on oder off.

                Gut, wie sich das alles nun verhält wenn man noch Unterverzeichnisse usw. per PHP erstellen muss, kann ich nicht sagen.
                Aber wie gesagt, diese doch sehr großen Board-Systeme haben keine Probleme in einem (cache)-Ordner Dateien zu schreiben, ändern, löschen.

                MFG

                1. Hallo zusammen,

                  mal eine Frage zwischendurch:
                  Wenn in der kommenden Version 6 der Safe_mode ganz wegfällt:
                  Ist das dann wie wenn er auf OFF steht?

                  vielen Dank und viele Grüße
                  hawk

                  1. echo $begrüßung;

                    Wenn in der kommenden Version 6 der Safe_mode ganz wegfällt:
                    Ist das dann wie wenn er auf OFF steht?

                    Ja, ebenso wie bei register_globals und magic_quotes_gpc.

                    echo "$verabschiedung $name";

                    1. Hallo,

                      Wenn in der kommenden Version 6 der Safe_mode ganz wegfällt:
                      Ist das dann wie wenn er auf OFF steht?

                      Ja, ebenso wie bei register_globals und magic_quotes_gpc.

                      Gibt es dann eine Ersatzfunktion/Einstellung, um alle Systemfunktionen auf einmal ausschalten zu können? Das wäre dann doch zweckmäßig.

                      LG
                      Chris©