Max: chmod nur für Datein die dem User gehören???

Hallo,
Meine Frage bei mir geht chmod nur per ftp program auf die Files die ich mit ftp hochgeladen habe. Also die User und Group "ftponly" haben.
Wenn ich mit einem Perl program aber eine Datei erzeuge, diese hat dann als User und Group "nobody", so kann ich mit dem ftp program nicht mit chmod Zugriffe verändern. ABER mit einen perl script.

Deshalb meine Frage muß dem "Ausführer" die Datei gehören um chmod benutzen zu können?
Wie kann ich mit chown (in einem perl script) User und Group von "ftponly" auf "nobody" setzen? Muß auch für chown den "Ausführer" die Datei gehören?

Ich bin für jede Hilfe Dankbar Tschüss..

  1. Deshalb meine Frage muß dem "Ausführer" die Datei gehören um chmod benutzen zu können?

    Überlege mal kurz: Würdest Du es gut finden, wenn fremde Leute an Deinen Dateien rumspielen könnten? Nein? Warum sollst Du dann an den Dateien anderer Leute rumspielen dürfen?

    Daß Du das Skript geschrieben hast, ist dem Dateisystem egal, es achtet nur darauf, wer das Skript gerade benutzt. In Deinem Falle der Webserver, nicht Du selbst.

    Wie kann ich mit chown (in einem perl script) User und Group von "ftponly" auf "nobody" setzen?

    Garnicht. Wenn Du schon (aus sicher verständlichen Gründen) die Rechte an fremden Dateien nicht ändern kannst, kannst Du erst recht nicht den Eigentümer fremder Dateien ändern (und ihm somit die Dateien "klauen").

    Variante 1: Lade die betreffende Datei vorher leer mit FTP hoch, damit Du Eigentümer der Datei bist, und gebe "allen" Schreib- und/oder Leserechte, damit auch der Webserver bzw. Dein Skript auf die Datei zugreifen dürfen.

    Variante 2: Wechsel' den Hoster und gehe zu einem, der CGI-Anwendungen im Namen des jeweiligen Skriptdateibesitzers ausführen lässt, nicht im Namen des Webservers ("suexec" ist das Stichwort für den Apache).

    Gruß,
      soenk.e

    1. Danke für deine Antwort.
      Ich will natürlich keine fremden Datein irgendwie verändern. Nur die, die ich mit ftp hochgeladen habe. Auf diese sollten dann mit einem Perl programm chmod möglich sein.

      Variante 1: Lade die betreffende Datei vorher leer mit FTP hoch, damit Du Eigentümer der Datei bist, und gebe "allen" Schreib- und/oder Leserechte, damit auch der Webserver bzw. Dein Skript auf die Datei zugreifen dürfen.

      Interessant Datein mit ftp leer hochladen. Muß ich das im ftp program einstellen (ich habe WSFTP)?

      1. Ich will natürlich keine fremden Datein irgendwie verändern. Nur die, die ich mit ftp hochgeladen habe. Auf diese sollten dann mit einem Perl programm chmod möglich sein.

        chmod wird Dir bei unten genannter Variante nicht viel bringen. Um überhaupt mit Deinem Perl Zugriff auf die Datei zu haben, muß sie _allen_ Benutzern des Rechners offen stehen (eben weil Dein Skript nicht in Deinem Namen läuft). Wenn Du mit dem Skript die Zugriffsrechte ändern würdest, sägst Du Dir automatisch den Ast ab, auf dem Du sitzt.
        Kurz: Du kannst nur einmal per Skript die Rechte ändern. Und ich bin mir nicht einmal sicher, ob das überhaupt möglich ist.

        Variante 1: Lade die betreffende Datei vorher leer mit FTP hoch, damit Du Eigentümer der Datei bist, und gebe "allen" Schreib- und/oder Leserechte, damit auch der Webserver bzw. Dein Skript auf die Datei zugreifen dürfen.

        Interessant Datein mit ftp leer hochladen. Muß ich das im ftp program einstellen (ich habe WSFTP)?

        Nein, einfach eine leere Datei erzeugen (meinetwegen mit notepad) und wie üblich hochladen.

        Gruß,
          soenk.e

    2. Hallo Sönke,

      Variante 2: Wechsel' den Hoster und gehe zu einem, der CGI-Anwendungen im Namen des jeweiligen Skriptdateibesitzers ausführen lässt, nicht im Namen des Webservers ("suexec" ist das Stichwort für den Apache).

      Da hatte ich neulich schon mal auf einen Thread reagiert und rückgefragt, ob es die Möglichkeit mit suexec oder eben eine vergleichbare auch für PHP im API-Mode, also als Apache-Modul gibt?

      Wenn Du das was wüsstest, würde ich mich seeehr über Info freuen.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
      1. Moin!

        Da hatte ich neulich schon mal auf einen Thread reagiert und rückgefragt, ob es die Möglichkeit mit suexec oder eben eine vergleichbare auch für PHP im API-Mode, also als Apache-Modul gibt?

        Nicht, dass ich wüßte. PHP als Modul läuft immer unter der Apache-UID/GID.

        - Sven Rautenberg

        --
        "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
        1. Da hatte ich neulich schon mal auf einen Thread reagiert und rückgefragt, ob es die Möglichkeit mit suexec oder eben eine vergleichbare auch für PHP im API-Mode, also als Apache-Modul gibt?

          Nicht, dass ich wüßte. PHP als Modul läuft immer unter der Apache-UID/GID.

          ..denn "als Modul" bedeutet technisch gesehen nichts anderes, als daß das Modul fester Bestandteil des Apache-Programms ist. Ein laufendes Programm kann aber zum einen immer nur eine Identität zur Zeit haben und zum zweiten sowieso nicht fröhlich die Identität wechseln (zumindest nicht ohne das jeweilige Passwort), weshalb ein Identitätswechsel bei Modulen prinzipiell nicht möglich ist.
          Einzige Ausnahme ist der Superuser root, der alles darf, inklusive fremde Dateien bearbeiten, die Identität wechseln und Festplatten formatieren. Aber da er halt alles darf, ist es eine _sehr_ schlechte Idee, den Webserver (sprich: ein Programm, auf das von außen weitestgehend unkontrolliert zugegriffen werden kann) als root laufen zu lassen.

          In der CGI-Variante ist das etwas anders, da der Webserver hier ein externes Programm aufruft. Über einen kleinen Umweg (besagtes suexec) ist es möglich, dieses Programm im Namen des Programmdateibesitzers zu starten.

          Gruß,
            soenk.e

  2. Hallo,

    Das ist doch ganz, ganz einfach. Wenn Du nicht Eigentümer/Autor einer Datei (oder root) bist, dann kannst Du die nicht verschenken und auch keinem Dritten (oder Dir selbst) Zugriff verschaffen.

    Ersetze Datei durch Haus und den Root durch die Polizei:

    --> Das ist doch ganz, ganz einfach. Wenn Du nicht Eigentümer eines Hauses (oder "die Polizei") bist, dann kannst Du das Haus nicht verschenken und auch keinem Dritten (oder Dir selbst) Zutritt verschaffen.

    Wenn jetzt Dein Serverbetreiber meint, es sei eine gute Idee per ftp eingehende Dateien einem bestimmten Benutzer zuzuordnen, dann wird er wissen, warum. Vermutlich will er ein Sicherheitsloch vermeiden.

    Ansonsten: Solange Du user "nobody" bist kannst Du die Dateirechte einstellen. Du brauchts also ein FTP-Programm, welches diese Möglichkeit hat. Versuch es mal mit wsftp(le).

    Wenn es wsftp nicht kann (arbeitest Du lokal unter windows?), dann wird es halt nicht gehen. Irgendeine Serverdirektive sorgt dafür, daß dieser Dir sofort das Eigentum/die Autorenschaft entzieht. Und sei es nur um z.B. einem Virenscanner die Möglichkeit zu verschaffen, die Datei zu lesen und ggf. zu löschen oder um Skripte erst zu lesen und dann freizugeben - oder eben um zu verhindern, daß Kunden, die für den Service nicht zahlen CGI's benutzen. Ich kann nur spekulieren.

    Klär das mit dem Kundenservice oder dem root des Servers.

    fastix

    1. Ansonsten: Solange Du user "nobody" bist kannst Du die Dateirechte einstellen. Du brauchts also ein FTP-Programm, welches diese Möglichkeit hat. Versuch es mal mit wsftp(le).

      Danke für die Antwort!
      Ich habe eine File Upload perl script gesrieben. Wenn ich mit diesem eine Datei hochlade so hat die user "nobody". Heist das, das es gennerell möglich ist beim Meinem Provider (Hosteurope), die Datein als "nobody" hochzuladen?
      Ich teste mal ob ich mit WSFTP das einstellen kann.

      1. Ich teste mal ob ich mit WSFTP das einstellen kann.

        Du kannst mit wsftp die Datei für jeden user zum lesen, schreiben und ausführen freigeben.

        Ich weiss jetzt gar nicht, ob Du ein "chown" durchführen kannst. Aber, wenn Du Dich via FTP einloggst, dann solltest Du (normalerweise...) der Autor der Datei(en) sein, die Du via ftp überträgst. Als solcher hast Du (normalerweise) alle Rechte an der Datei. Du kannst also mit wsftp Rechte einstellen. So nicht der Server eine der beschriebenen Direktiven hat.

        Du wirst aber nicht Dateien ändern können, die einem "anderen" User gehören. Zum Beispiel den, unter dem das Skript läuft. Deren Rechte musst Du scheinbar genau so per Perl-Skript ändern. Insgesamt eine dünne Lösung Deines Providers.

        fastix

        1. Insgesamt eine dünne Lösung Deines Providers.

          Kennst du vielleicht einen Provider der die perl/cgi pg's unter der gleichen Kennung wie im ftp Zugang ausführt?

          1. Moin!

            Kennst du vielleicht einen Provider der die perl/cgi pg's unter der gleichen Kennung wie im ftp Zugang ausführt?

            CGIs laufen typischerweise unter der User-ID des Apache-Servers. Also gehören erstellte Dateien diesem Benutzer.

            Wenn du direkt nach dem Erstellen die Datei per CHOWN auf deine FTP-User-ID umstellst, kannst du mit FTP auch ordentlich zugreifen. Insofern ist es eigentlich völlig unnötig, Dateien deiner CGI-Skripte deiner User-ID zuzuordnen.

            Bedenke aber, dass du dein Perl-Skript nicht selbst aussperrst: Es kann nach CHOWN die Datei nicht mehr als Besitzer lesen und schreiben, sondern nur noch als Gruppenmitglied. Die Gruppen-Rechte müssen also ebenfalls passen.

            - Sven Rautenberg

            --
            "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
            1. Hallo Sven,

              Bedenke aber, dass du dein Perl-Skript nicht selbst aussperrst: Es kann nach CHOWN die Datei nicht mehr als Besitzer lesen und schreiben, sondern nur noch als Gruppenmitglied. Die Gruppen-Rechte müssen also ebenfalls passen.

              Falls man das vergessen haben sollte, ist das ja dann wiederum kein Problem für ein gutes FTP-Programm, denn als Eigentümer kann man ja die Lese/Schreibreche entsprechend ändern.

              Grüße aus Darmstadt,
              Benjamin

          2. Einen typischen Massenprovider sogar.

            Dr. Schlund und Partner -> Puretec -> 1und1.

            Ein whoami, von einem Perlscript aus durchgeführt, sagt mir, ich hätte denselben Useraccount wie beim FTP und beim einloogen im Kundenbereich.

            Ich hab das Premium Paket 3.0.

            fastix

    2. Moin!

      Wenn jetzt Dein Serverbetreiber meint, es sei eine gute Idee per ftp eingehende Dateien einem bestimmten Benutzer zuzuordnen, dann wird er wissen, warum. Vermutlich will er ein Sicherheitsloch vermeiden.

      Üblicherweise werden die per FTP hochgeladenen Dateien mit der Userzugehörigkeit auf dem Server abgelegt, mit dem man sich beim FTP-Server eingeloggt hat. Das ist Standardverhalten und keine besondere Eigenschaft des Providers.

      Ansonsten: Solange Du user "nobody" bist kannst Du die Dateirechte einstellen. Du brauchts also ein FTP-Programm, welches diese Möglichkeit hat. Versuch es mal mit wsftp(le).

      Es braucht kein spezielles FTP-Programm dafür. Man muß sich einfach nur als der entsprechende User einloggen, um die Dateien des entsprechenden Users ändern zu können. Wenn man sich per FTP nicht als nobody einloggen kann, weil man das Passwort dafür nicht hat, dann kann WSFTP auch nichts dran ändern.

      Wenn es wsftp nicht kann (arbeitest Du lokal unter windows?), dann wird es halt nicht gehen. Irgendeine Serverdirektive sorgt dafür, daß dieser Dir sofort das Eigentum/die Autorenschaft entzieht.

      Nein, daran liegt es nicht.

      Eigentümer der Datei wird immer der User, der die Datei anlegt. Wenn man sich über FTP einloggt, startet der FTP-Server einen Subprozess, der die User-ID auf die des eingeloggten Users ändert - damit werden alle Zugriffsbeschränkungen wirksam, die für diesen Account gelten. Hochgeladene Dateien werden von diesem Prozess einfach auf Festplatte geschrieben - unter der User-ID. Logisch, dass man dann die Dateirechte auch mit chmod ändern kann.

      Wenn ein Perl-Skript arbeitet, läuft dieses unter einer ganz anderen User-ID. Üblicherweise unter der, die auch der Apache-Server verwendet. Und das ist zum Beispiel der Account "nobody". Wenn das Perl-Skript jetzt Dateien anlegt, gehören sie "nobody". Logisch, dass nur das Perl-Skript diese Dateien chmodden darf. CHMOD darf nur der Besitzer anwenden - ansonsten wäre es problemlos möglich, dass man sich auch für Dateien, die man nicht selbst besitzt, Leserechte verschaffen kann.

      Das Perl-Skript kann allerdings nicht nur die Rechte mit chmod ändern, sondern auch den Besitzer mit chown umändern - wenn der Besitzer auf den FTP-Account verändert wird, kann man mit FTP die Rechte ändern.

      Und sei es nur um z.B. einem Virenscanner die Möglichkeit zu verschaffen, die Datei zu lesen und ggf. zu löschen oder um Skripte erst zu lesen und dann freizugeben - oder eben um zu verhindern, daß Kunden, die für den Service nicht zahlen CGI's benutzen. Ich kann nur spekulieren.

      Wilde, blödsinnige Spekulation - weils nicht so ist.

      - Sven Rautenberg

      --
      "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
      1. Danke für die ausführliche Antwort
        Wie ich gerade mitbekommen habe führt mein Provider wohl die Perl pg's unter einer anderen user id aus als die id im ftp.
        Gibt es einen Provider der die Perl pg's unter der gleichen user id ausführt wie im ftp?