Gerhard: Attribute von mit PHP geschriebenen Dateien

Hallo,
ein Blick in meine log-Datei hat mich überrascht.
Dateien bis zu einem bestimmten Datum hatten (in fireftp angezeigt) folgende Eigenschaft: -rw-r--r--.
Ab diesem Datum aber plötzlich: -rw-rw-rw.
Da das Datum schon länger zurückliegt, weiß ich nicht mehr, ob ich etwas bzw. was ich geändert habe.
Daher die Frage: Wie kann man steuern, welche Eigenschaft eine über php geschriebene Datei haben soll?
Gruß
Gerhard

  1. Daher die Frage: Wie kann man steuern, welche Eigenschaft eine über php geschriebene Datei haben soll?

    Mit chmod.

    1. Tach,

      Daher die Frage: Wie kann man steuern, welche Eigenschaft eine über php geschriebene Datei haben soll?

      Mit chmod.

      das ist keine gute Lösung, weil man dann im Zweifelsfall die Daten erstmal mit zuviel Zugriffsrechten anlegt und diese dann nachher ändert; was, wenn beim erstellen ein Fehler auftritt und die Daten schon halb geschrieben sind ider ein Angreifer einfach schnell genug ist? Falls man nicht an der umask manipulieren möchte ist der Standardweg dann üblicherweise:

      1. Datei leer erstellen
      2. Dateirechte anpassen
      3. Daten in Datei schreiben

      mfg
      Woodfighter

      1. das ist keine gute Lösung, weil man dann im Zweifelsfall die Daten erstmal mit zuviel Zugriffsrechten anlegt und diese dann nachher ändert; was, wenn beim erstellen ein Fehler auftritt und die Daten schon halb geschrieben sind ider ein Angreifer einfach schnell genug ist?

        Danke für die Erläuterung.

  2. Tach,

    Daher die Frage: Wie kann man steuern, welche Eigenschaft eine über php geschriebene Datei haben soll?

    das steuert die umask, soweit ich mich entsinne gab es auch eine PHP-interne Funktion, um sie zu setzen.

    mfg
    Woodfighter

    1. Tach!

      Wie kann man steuern, welche Eigenschaft eine über php geschriebene Datei haben soll?
      das steuert die umask, soweit ich mich entsinne gab es auch eine PHP-interne Funktion, um sie zu setzen.

      Ja, es gibt eine PHP-Funktion umask(). Und genauer gesagt: umask steuert, welche Eigenschaften eine Datei oder Verzeichnis _nicht_ haben soll. Unabhängig von umask kann man immer noch mit chmod die Eigenschaften explizit nach eigenem Gusto setzen.

      Ursache der Änderung kann eine Anpassung der umask für den Webserver (oder das Gesamtsystem oder auch nur die PHP-Prozesse) beim Hoster sein.

      dedlfix.

      1. Hallo,
        Jens Holzkämper hat geschrieben:

        
        > Mit chmod.  
        
        das ist keine gute Lösung, .....
        

        jetzt habe ich zu umask() folgendes gefunden:
        Sie sollten diese Funktion nicht in Multithreaded-Webservern nutzen. Der bessere Weg ist, die Dateiberechtigungen mit chmod() zu ändern nachdem die Datei erstellt wurde. Die Nutzung von umask() kann zu unerwartetem Verhalten von gleichzeitig ausgeführten Skripten und des Webservers führen, weil die gleiche umask genutzt wird.

        Und Jens Holzkämper hat weiter geschrieben:

        ... ist der Standardweg dann üblicherweise:  
          
        1\. Datei leer erstellen  
        2\. Dateirechte anpassen  
        3\. Daten in Datei schreiben  
        
        

        Ist dies nicht recht kompliziert.
        Auch da kann doch eine parallel laufende Anwendung Unheil anrichten.

        Gibt es nicht den Königsweg, dass man im open-Kommando der Datei schon die gewünschten Eigenschaften mitgibt?

        1. Hi,

          Jens Holzkämper hat geschrieben:

          Mit chmod.  
          das ist keine gute Lösung, .....
          
            
          bitte lass die Zitatmarkierungen so, wie sie sind. Du beeinträchtigst sonst massiv die Lesbarkeit für andere Forennutzer. Insbesondere ist nicht nachvollziehbar, wieso du ein Zitat als CSS-Code markierst.  
            
          Ciao,  
           Martin  
          
          -- 
          Gibst du dem Opi Opium, haut Opium den Opi um.  
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          
        2. h,

          Gibt es nicht den Königsweg, dass man im open-Kommando der Datei schon die gewünschten Eigenschaften mitgibt?

          Hmm, mit Perl geht das ;)
          Komm 'rüber, Gerhard ;)

          Hotti

          1. Tach,

            Hmm, mit Perl geht das ;)

            wie?

            mfg
            Woodfighter

            1. Tach,

              Hmm, mit Perl geht das ;)

              wie?

              Z.B. mit IO::File
              open( FILENAME [,MODE [,PERMS]] )

                
              my $fh = new IO::File;  
              $fh->open('myfile', O_CREAT, 0644);  
              
              

              Hotti

              1. Tach,

                Z.B. mit IO::File
                open( FILENAME [,MODE [,PERMS]] )

                was dann intern https://forum.selfhtml.org/?t=212013&m=1447535 ausführt; hinzu kommt übrigens noch, auch das, was du dort übergibst, wird erst noch mit der umask verundet, im konkreten Fall nicht schlimm, weil die umask zu klein ist.

                mfg
                Woodfighter

          2. Hmm, mit Perl geht das ;)
            Komm 'rüber, Gerhard ;)

            Wieso habe ich mich nur überreden lassen, von Perl auf PHP umzusteigen?

            1. Hi,

              Hmm, mit Perl geht das ;)
              Komm 'rüber, Gerhard ;)

              Wieso habe ich mich nur überreden lassen, von Perl auf PHP umzusteigen?

              Vorschlag: Mach doch einfach Beides ;)

              Hotti

        3. Tach,

          Mit chmod.
          das ist keine gute Lösung, .....

          ich erweitere das mal zu: das ist keine gute allgemeine Lösung; wenn es keine rolle spielt, dass jemand die Daten leesn/überschreiben könnte, bevor man die Rechte geändert hat, dann kann man das machen.

          jetzt habe ich zu umask() folgendes gefunden:
          "Sie sollten diese Funktion nicht in Multithreaded-Webservern nutzen. Der bessere Weg ist, die Dateiberechtigungen mit      chmod()      zu ändern nachdem die Datei erstellt wurde. Die Nutzung von umask() kann zu unerwartetem Verhalten von gleichzeitig ausgeführten Skripten und des Webservers führen, weil die gleiche umask genutzt wird."

          Das ist nur die Warungn davor, dass nicht nur das aktuelle Script in dem die Funktion aufgerufen wird, sondern alle Scripte, die vom selben Prozess ausgeführt werden, davon betroffen sind

          ... ist der Standardweg dann üblicherweise:

          1. Datei leer erstellen
          2. Dateirechte anpassen
          3. Daten in Datei schreiben

          Ist dies nicht recht kompliziert.
          Auch da kann doch eine parallel laufende Anwendung Unheil anrichten.

          Sie kann aber keinesfalls meine Daten überschreiben oder lesen; schlimmstenfalls kann ich meine Daten nicht mehr schreiben.

          Gibt es nicht den Königsweg, dass man im open-Kommando der Datei schon die gewünschten Eigenschaften mitgibt?

          Nein, dafür ist die umask ja da, es gibt dafür keinen weiteren Systemhandle.

          In deinem Falle würde ich mich an den Provider wenden und ihn bitten diese offensichtliche Fehlkonfiguration rückgängig zu machen; die gewählte umask ergibt für den Einsatzzweck keinen Sinn.

          mfg
          Woodfighter

        4. Tach!

          jetzt habe ich zu umask() folgendes gefunden:
          Sie sollten diese Funktion nicht in Multithreaded-Webservern nutzen. Der bessere Weg ist, die Dateiberechtigungen mit chmod() zu ändern nachdem die Datei erstellt wurde. Die Nutzung von umask() kann zu unerwartetem Verhalten von gleichzeitig ausgeführten Skripten und des Webservers führen, weil die gleiche umask genutzt wird.

          Die Frage an der Stelle ist: Hast du PHP als Apache-Modul laufen? Nur dann betrifft es dich. Wenn PHP als (F)CGI läuft, sollte es so konfiguriert sein, dass jeder Request seinen eigenen Prozess bekommt. Und dann kommt sich die umask des einen nicht in die Quere mit dem anderen.

          Nächste Frage wäre, wenn PHP als Apache-Modul läuft, dann hast du ein generelles Problem, wenn irgendein Mithostling in seinem Script die umask ändert, denn dann betrifft es dich auch. PHP als Apache-Modul ist in einer Massenhosting-Umgebung generell keine gute Idee. Wenn du hingegen einen eigenen Server hast, also das PHP-Apache-Modul nur für dich selbst hast, dann sollte das Problem dich auch nur dann stören, wenn du für mehrere Anwendungen (oder auch nur eine) unterschiedliche umask-Einstellungen benötigst. - Vermutlich muss man beim Apache-Modul auch noch in Betracht ziehen, welches Multi-Processing Module im Einsatz ist, denn diese trennen auch noch nach Prozessen auf oder auch nicht.

          dedlfix.