FraFu: Dateien werden mit mod 600 erstellt

Hallo!

Auf meinem Debian System mit Apache2 und php 5.1 (suPHP) werden alle Dateien die über PHP erzeugt werden (Uploads als auch fopen) mit den Rechten 600 erzeugt. Das wäre ja prinzipell gar nicht blöd. Aber mein System ist darauf angewiesen, dass die Dateien im Modus 644 erstellt werden.

Ich finde einfach nicht raus wo ich das einstellen kann.

Das Problem: Ich erstelle mit php einen SQL Dump und lege den als dump.sql in ein Verzeichnis. Diese Datei möchte ich dann ganz normal runterladen. Da aber die Datei die Rechte 600 hat, kann der Webserver nicht darauf zugreifen.
Auf meinem alten Server wurden die Datein eben mit 644 erstellt.

mfg
  frafu

  1. Hallo frafu!

    Das Problem: Ich erstelle mit php einen SQL Dump und lege den als dump.sql in ein Verzeichnis. Diese Datei möchte ich dann ganz normal runterladen. Da aber die Datei die Rechte 600 hat, kann der Webserver nicht darauf zugreifen.
    Auf meinem alten Server wurden die Datein eben mit 644 erstellt.

    Dann lass Dein Script, das die Dateien erstellt doch einfach mittels chmod die Rechte setzen. Dann müsste es klappen.

    Schönen Gruß

    1. Hallo!

      Dann lass Dein Script, das die Dateien erstellt doch einfach mittels chmod die Rechte setzen. Dann müsste es klappen.

      Sicher, das würde funtionieren. Ich sehe es aber nur als Workaround. Irgendwo muss man doch einstellen können, mit welchen Rechten php Dateien erstellt.

      Es geht auch darum, dass Dateien hochgeladen werden die dann öffentlich zum Download angeboten werden. Hier müsste ich auch überall noch mal mit einem chmod drüberfahren. Das möchte ich aber nicht.

      mfg
        frafu

      1. Hallo frafu!

        Sicher, das würde funtionieren. Ich sehe es aber nur als Workaround. Irgendwo muss man doch einstellen können, mit welchen Rechten php Dateien erstellt.

        Du möchtest also, dass alle Aktionen die Dein Script ausführt mit den Rechten für _alle_ ausgeführt werden? Viel Spaß mit dieser Sicherheitslücke.

        Es geht auch darum, dass Dateien hochgeladen werden die dann öffentlich zum Download angeboten werden. Hier müsste ich auch überall noch mal mit einem chmod drüberfahren. Das möchte ich aber nicht.

        Wieso "immer" wenn Du das doch einfach (und das meine ich so wie es da steht) an das Ende des Uploads hängen könntest?

        Schönen Gruß

        Afra

        1. Hallo!

          Sicher, das würde funtionieren. Ich sehe es aber nur als Workaround. Irgendwo muss man doch einstellen können, mit welchen Rechten php Dateien erstellt.

          Du möchtest also, dass alle Aktionen die Dein Script ausführt mit den Rechten für _alle_ ausgeführt werden? Viel Spaß mit dieser Sicherheitslücke.

          Das verstehe ich jetzt nicht. Wenn ich in PHP ein
          $fh=fopen("datei.txt", "w"); fputs($fh, "test"); fclose($fh)
          mache und die Datei "datei.txt" existiert noch nicht, dann wird im Moment auf meinem Server die Datei mit den file access permissions 600 erstellt. Ich möchte aber, dass sie mit 644 erstellt wird.
          Wo das eine Sicherheitslücke aufreißt, sehe ich nicht.

          mfg
            frafu

          1. Hallo frafu!

            Wo das eine Sicherheitslücke aufreißt, sehe ich nicht.

            Du hast durch weglassen den Sinn meiner Antwort entstellt. Anscheinend willst Du Dir nicht helfen lassen. Schönen Abennd noch.

            1. Hallo!

              Wo das eine Sicherheitslücke aufreißt, sehe ich nicht.

              Du hast durch weglassen den Sinn meiner Antwort entstellt. Anscheinend willst Du Dir nicht helfen lassen. Schönen Abennd noch.

              Folgendes hab ich weggelassen, da ich dachte es hätte keine Relevanz mit der Sicherheitslücke.

              Es geht auch darum, dass Dateien hochgeladen werden die dann öffentlich zum Download angeboten werden. Hier müsste ich auch überall noch mal mit einem chmod drüberfahren. Das möchte ich aber nicht.

              Wieso "immer" wenn Du das doch einfach (und das meine ich so wie es da steht) an das Ende des Uploads hängen könntest?

              Ja, ich könnte nach dem Fileupload ein chmod durchführen.

              Bei meinem anderen Provider ist es jedoch so, dass Dateien grundsätzlich mit mod 644 erstellt werden.
              Warum das so ist hab ich schon erfahren. Wo das eine Sicherheitslücke aufreißt, sehe ich nach wie vor nicht.

              mfg
                frafu

              1. Hallo frafr!

                Bei meinem anderen Provider ist es jedoch so, dass Dateien grundsätzlich mit mod 644 erstellt werden.
                Warum das so ist hab ich schon erfahren. Wo das eine Sicherheitslücke aufreißt, sehe ich nach wie vor nicht.

                Ich sagte auch nicht, dass _dies_ alleine eine Sicherheitslücke wäre. Wenn aber jede Aktion von PHP auf dem Server mit den Rechten aller ausgeführt wird, kann damit auch jeder beliebige User bei seinen Aktionen (wenn denn irgend ein Script diese Option bietet) etwas kritisches ausführen, oder auch nur anzeigen lassen. Auch wenn dies nur die Anzeige von an sich gesperrten Dateien o.ä. wäre. Daher ist es mehr als recht, dass ein Script welches Dateien manipuliert nur mit den Rechten des Servers läuft. Wenn diese manipulierten Dateien dann freigegeben werden _können_ dann tut man dies im Script. Ich gebe zu, es ist velleicht etwas paranoid.

                Schönen Gruß

                Afra

  2. echo $begrüßung;

    Auf meinem Debian System mit Apache2 und php 5.1 (suPHP) werden alle Dateien die über PHP erzeugt werden (Uploads als auch fopen) mit den Rechten 600 erzeugt. Das wäre ja prinzipell gar nicht blöd. Aber mein System ist darauf angewiesen, dass die Dateien im Modus 644 erstellt werden.

    Das ist eine Einstellung, die PHP vom aufrufenden Prozess geerbt hat. Normalerweise werden die Dateien mit rw-rw-rw- erstellt. Mit umask kann man der aktuellen Sitzung eine andere file mode creation mask geben. Der Parameter sorgt dafür, dass die darin gesetzten Bits beim Erstellen der Berechtigung gelöscht werden. Die Dateien bekommen bei einer umask von 0022 (oktal) also nur noch rw-r--r--.

    Ich finde einfach nicht raus wo ich das einstellen kann.

    Setze den umask-Wert entsprechend. Das könntest du in dem Prozess einstellen, der PHP aufruft, oder mit der PHP-Funktion umask(). Wie im Handbuch zu lesen ist, ist das aber nicht immer eine gute Idee. Damit du dich nicht auf irgendwelche eingestellten Werte verlassen musst, ist es besser, du vergibst die Berechtigung selbst, und zwar genau so wie du sie benötigst.

    echo "$verabschiedung $name";