Ich++: user dynamisch wechseln und commandos ausführen

hallo,

ich stehe vor folgender Problemstellung! (sorry, bin ein bissel schlecht im Erklären)
Ich habe zunächst eine Start-html-seite.
Der user  muss sich einloggen (über .htaccess, Name und verschlüsselte passwörter der User sind in einer gesonderten Datei gespeichert)
Nach dem Einloggen öffnet sich im Browser mein perl-skript:
Es erzeugt eine Webseite und Formulare für den user.
In diesem Skript will ich nun zum user wechseln, der sich angemeldet hatte und einige System-Befehle ausführen (u. a. Dateien mit dem Inhalt aus diesen Web-formularen im Home-Verzeichnis dieses users zu erzeugen). Die erzeugten Dateien sollen genau mit den Rechten versehen sein, als hätte der user sie tatsächlich selber erzeugt.
Meine erste Frage: Ist der Befehl "su " ausreichend sicher für sowas? Wie ich verstanden habe, ist sudo eher dafür da, Rechte zu vergeben, die man normalerweise nicht hat (also nicht ganz das was ich will)
Meine zweite Frage: Wie komme ich an den namen des users, der sich gerade angemeldet hat, ran?

Danke für jeden kleinen Hinweis

  1. Moin Moin!

    hallo,

    ich stehe vor folgender Problemstellung! (sorry, bin ein bissel schlecht im Erklären)
    Ich habe zunächst eine Start-html-seite.
    Der user  muss sich einloggen (über .htaccess, Name und verschlüsselte passwörter der User sind in einer gesonderten Datei gespeichert)

    D.h. Web-User und System-User haben miteinander nichts zu tun.

    Nach dem Einloggen öffnet sich im Browser mein perl-skript:
    Es erzeugt eine Webseite und Formulare für den user.
    In diesem Skript will ich nun zum user wechseln, der sich angemeldet hatte und einige System-Befehle ausführen (u. a. Dateien mit dem Inhalt aus diesen Web-formularen im Home-Verzeichnis dieses users zu erzeugen). Die erzeugten Dateien sollen genau mit den Rechten versehen sein, als hätte der user sie tatsächlich selber erzeugt.

    Suchst Du suEXEC?

    Innerhalb Perl kannst Du den User nur wechseln, wenn das Script mit Root-Rechten läuft (das ist eine Einschränkung von Unix, nicht von Perl). Und das ist eine katastrophal schlechte Idee.

    Meine erste Frage: Ist der Befehl "su " ausreichend sicher für sowas?

    Nein. Laß das Script direkt mit den Rechten des Users laufen. Siehe suEXEC.

    Wie ich verstanden habe, ist sudo eher dafür da, Rechte zu vergeben, die man normalerweise nicht hat (also nicht ganz das was ich will)

    Nö, su und sudo sind zwei ähnliche Dinge. Große Unterschiede:

    • su verlangt das root-Passwort, sudo das des Users
    • su erlaubt alles, sudo kann sehr fein dosiert Rechte vergeben
    • su braucht zwingend ein Passwort, sudo kann darauf verzichten
    • su loggt wenn überhaupt nur minimal, sudo kann sehr detailiert loggen

    Meine zweite Frage: Wie komme ich an den namen des users, der sich gerade angemeldet hat, ran?

    Diese Information gibt Dir der Webserver mit. Wenn Du mit CGIs arbeitest, im Environment.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Ok, danke :)
      Dann versinke ich mal in der Doku von suexec.. .

    2. Moin,
      Zu SuExec.
      Ich hab mir die Doku angeschaut und versucht über weitere Beiträge (googlen) den roten Faden zu finden.
      Leider war es für Anfänger nicht besonders hilfreich..
      Z.B. habe ich immernoch nicht verstanden,wo ich die suEXEC configuration options einrichten soll bzw. was ich alles neu (in den Configs) eingeben soll.
      Hast du evtl. noch einen anderen Link, der weiterhelefn könnte.

      tausend Dank

      1. Moin Moin!

        Zu SuExec.
        Ich hab mir die Doku angeschaut und versucht über weitere Beiträge (googlen) den roten Faden zu finden.
        Leider war es für Anfänger nicht besonders hilfreich..
        Z.B. habe ich immernoch nicht verstanden,wo ich die suEXEC configuration options einrichten soll bzw. was ich alles neu (in den Configs) eingeben soll.
        Hast du evtl. noch einen anderen Link, der weiterhelefn könnte.

        Außer der Apache-Doku und http://www.google.com/search?q=suexec? Nein.

        Die suEXEC-Doku geht davon aus, dass Du den Apachen selbst einrichtest, sprich: configure, make, make install statt rpm install oder apt-get. Schlicht und ergreifend deswegen, weil suEXEC in der Standardinstallation nicht aktiv ist, und nicht sinnvoll aktiv sein kann. Denn viele Einstellungen für suEXEC hängen von Deinem Server ab.

        Die suEXEC-Dokumentation hat sieben Unterpunkte:

        * Before we begin

        Beschreibt die grundlegenden Voraussetzungen, um suEXEC nutzen zu können: Unix-Server, grundlegendes Verständnis von Unix, unverbastelter Apache-Code.

        * suEXEC Security Model

        Erklärt, wie paranoid suEXEC ist, und warum es so paranoid sein muß. Das muß Dich im ersten Anlauf nicht zwingend interessieren.

        * Configuring & Installing suEXEC

        Beschreibt, wie Du suEXEC in Deinem eigenen Apachen einrichtest. Alle Optionen beziehen sich auf das configure-Programm, dass Du in der obersten Ebene des Quelltext-Archives des Apachen findest. Dieses kleine Detail steht tatsächlich nicht in dem Dokument. Nach configure müssen make und make install wie dokumentiert laufen.

        * Enabling & Disabling suEXEC

        Eigentlich offensichtlich. Interessant ist vor allem die notice-Meldung im Error-Log, die Dir mitteilt, dass Dein Apache suEXEC nicht nur unterstützt, sondern tatsächlich nutzt.

        * Using suEXEC

        Zeigt, wie Du suEXEC in Deinem Apachen nutzen kannst. Folge den Links. RTFM.

        * Debugging suEXEC

        Wenn sich suEXEC nicht so benimmt, wie Du es erwartest.

        * Beware the Jabberwock: Warnings & Examples

        Ein paar Warnungen: suEXEC setzt eine bestimmte Verzeichnishierarchie voraus, PATH sollte auf einen sicheren Wert gesetzt werden, und am suEXEC-Code herumzupfuschen ist eine extrem dämliche Idee.

        Wenn Du noch nie einen Apachen compiliert hast, finde heraus, mit welchen Optionen die Hersteller Deines Unix-Derivates den Apachen konfiguriert haben, sprich welche Kommandozeilen-Optionen an configure übergeben wurden. Solche Informationen findest Du typischerweise in Source Packages. Nimm die Optionen, so wie sie sind, und füge die notwendigen Optionen für suEXEC hinzu, d.h. --enable-suexec und die diversen --with-suexec-xxxx-Optionen. Dann läßt Du configure mit den Optionen laufen, anschließend make, schließlich sudo make install. Den vorhandenen Apachen solltest Du vor make install deinstalliert haben, sonst kommt die Paketverwaltung durcheinander.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".