Christian Heiss: Suche Michael Schröpl -> Verzeichnis auslesen!!!

Hallo Michael,

sorry, bin erst jetzt wieder zurück.
Das ganze hat etwas gedauert!

Du scheinst mir der einzige zu sein, der mich versteht, zumindest es versucht!!!

Also, nochmal zurück zu dem Problem:

Bin mitlerweile schon etwas weiter:
Ich mounte auf der Linux Büchse die Windows-Freigabe mit:
Auf der shell: 'mount -t smbfs -o  credentials=/root/mount.txt //<windows/freigabe/ /<mount>/<point>'
Oder via fstab: '//<windows>/<freigabe>/ /<mount>/<point> smbfs credentials=/root/mount.txt'
Das funktioniert wunderbar, ich kann das Verzeichnis auslesen so wie ich will!!!

Nächstes Problem:
Ich will über mein Perlscript jetzt:
Über die %ENV mitgelieferten Daten (z.B. verzeichnis=//server1/verzeichnis1&...) ein Verzeichnis entsprechend /remote/server1/verzeichnis1 anlegen, das Verzeichnis nach /remote/server1/verzeichnis1 mounten, dann auslesen, dann unmounten und dann wieder löschen!

(alles klar?)
Der Hintergrund dafür ist:
Es existieren ca 500 Freigaben, täglich kommen welche weg, andere hinzu, das kann man nicht alles in die fstab eintragen.

Verschiedene Mitarbeiter pflegen die Links entsprechend.
Und die die in der %ENV mitkommen die stimmen!

Mein Problem ist jetzt:
Das Perlscript darf nicht mounten ...
Hab das mit sudo auch schon versucht:
sudo -u root mount -t smbfs -o credentials=/root/mount.txt '//<windows>/<freigabe>/ /<mount>/<point>/;
Mit sudo klappt das in der shell als user, aber nicht im Perlscript,
???

Kennst dich mit sowas aus?

  1. Hallo,

    [... Mounten und unmounten ...]

    (alles klar?)

    Ja!!1

    Mein Problem ist jetzt:
    Das Perlscript darf nicht mounten ...

    Oh, das Perlscript darf es sicherlich. Aber der User, der das
    Perlscript ausfuehrt, darf das wohl eher nicht.

    Hab das mit sudo auch schon versucht:
    sudo -u root mount -t smbfs -o credentials=/root/mount.txt '//<windows>/<freigabe>/ /<mount>/<point>/;

    Na guck, der richtige Weg.

    Mit sudo klappt das in der shell als user, aber nicht im
    Perlscript???

    Das liegt wohl daran, dass der Webserver unter einer anderen
    Benutzerkennung laeuft. Was du also zu tun hast, ist folgendes:
    zuerst musst du die Benutzerkennung herausfinden. Das ist oft
    'wwwrun' oder einfach schlicht 'www'. Diesen User musst du in die
    /etc/sudoers eintragen. Und dann kannst du das Script weiter
    schreiben.

    Alternativ kannst du dem Perl-Script auch das "Sticky User Bit"
    geben -- dann laeuft das ganze Perlscript mit root-Rechten. Dazu
    musst du ein 'chmod u+s perlscript' machen und in der Shebang-Zeile
    den Interpreter von '/usr/bin/perl' auf '/usr/sbin/suidperl' (wo
    genau suidperl liegt, weiss ich jetzt nicht aus dem Kopf -- wirst du
    aber sicher herausfinden) aendern. Ich wuerde mir das aber genau
    ueberlegen. Denn wenn dein Script dann eine Sicherheitsluecke hat,
    ist gleich alles inne Buechs. Ich halte "sudo" fuer die bessere Wahl.

    Gruesse,
     CK

    1. Hallo,

      Das liegt wohl daran, dass der Webserver unter einer anderen
      Benutzerkennung laeuft. Was du also zu tun hast, ist folgendes:
      zuerst musst du die Benutzerkennung herausfinden. Das ist oft
      'wwwrun' oder einfach schlicht 'www'. Diesen User musst du in die
      /etc/sudoers eintragen. Und dann kannst du das Script weiter
      schreiben.

      Alternativ kannst du dem Perl-Script auch das "Sticky User Bit"
      geben -- dann laeuft das ganze Perlscript mit root-Rechten. Dazu
      musst du ein 'chmod u+s perlscript' machen und in der Shebang-Zeile
      den Interpreter von '/usr/bin/perl' auf '/usr/sbin/suidperl' (wo
      genau suidperl liegt, weiss ich jetzt nicht aus dem Kopf -- wirst du
      aber sicher herausfinden) aendern. Ich wuerde mir das aber genau
      ueberlegen. Denn wenn dein Script dann eine Sicherheitsluecke hat,
      ist gleich alles inne Buechs. Ich halte "sudo" fuer die bessere Wahl.

      Hab das schon versucht,
      apache läuft mit: user: wwwrun, group: nogroup
      in der sudo steht der wwwrun drin,

      der verlangt aber trotzdem beim erstenmal das root passwort???

      Grüsse

      Christian

      1. Hoi,

        Hab das schon versucht,
        apache läuft mit: user: wwwrun, group: nogroup
        in der sudo steht der wwwrun drin,

        Wie genau lautet der Eintrag?

        der verlangt aber trotzdem beim erstenmal das root passwort???

        Aus 'sudoers(5)':

        authenticate
            If set, users must authenticate themselves via a password (or
            other means of authentication) before they may run commands. This
            default may be overridden via the PASSWD and NOPASSWD tags. This
            flag is on by default.

        Weiterhin:

        NOPASSWD and PASSWD

        By default, sudo requires that a user authenticate him or herself
        before running a command. This behavior can be modified via the
        NOPASSWD tag. Like a Runas_Spec, the NOPASSWD tag sets a default for
        the commands that follow it in the Cmnd_Spec_List. Conversely, the
        PASSWD tag can be used to reverse things. For example:

        ray    rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm

        would allow the user ray to run /bin/kill, /bin/ls, and /usr/bin/lprm
        as root on the machine rushmore as root without authenticating
        himself.

        Mit anderen Worten mit dem Tag 'NOPASSWD' kannst du die
        Passwort-Abfrage abschalten:

        wwwrun  localhost = NOPASSWD: /sbin/mount

        Gruesse,
         CK

        1. Hoi,

          Hab das schon versucht,
          apache läuft mit: user: wwwrun, group: nogroup
          in der sudo steht der wwwrun drin,

          Wie genau lautet der Eintrag?

          Hab /etc/sudoers mit visudo editiert und den Eintrag:
          root            ALL=(ALL) ALL
          <b>wwwrun          ALL=(ALL) ALL<b>
          hinzugefügt!

          Jetzt schnall ich gar nix mehr?

          Wie soll ich den Eintrag:
          wwwrun  localhost = NOPASSWD: /sbin/mount
          hinzuadden?

          Gruß
          Christian

          1. Hallo,

            Hab /etc/sudoers mit visudo editiert

            Kenn ich nicht.

            und den Eintrag:
            root            ALL=(ALL) ALL
            <b>wwwrun          ALL=(ALL) ALL<b>
            hinzugefügt!

            Das '<b>' und '</b>' sind falsch. Der Eintrag mit 'wwwrun ALL=(ALL)
            ALL' ist ueberigens genau so, als wuerdest du auf deiner
            Internet-Seite eine Einladung fuer alle Cracker machen, die da besagt
            'Crackt mich!'.

            Wie soll ich den Eintrag:
            wwwrun  localhost = NOPASSWD: /sbin/mount
            hinzuadden?

            Du sollst ihn gar nicht hinzufuegen, sondern du sollst deinen
            'wwwrun ALL=(ALL) ALL' entfernen und durch meinen Eintrag ersetzen.
            Aber das 'localhost' musst du noch durch deinen FQDN ersetzen.

            Gruesse,
             CK

            1. Hola,

              Hab /etc/sudoers mit visudo editiert

              Kenn ich nicht.

              Ist der empfolene Editor für die sudoers

              und den Eintrag:
              root            ALL=(ALL) ALL
              <b>wwwrun          ALL=(ALL) ALL<b>
              hinzugefügt!

              Das <b> hat sich auf den Text bezogen, wollte den Eintrag nur als bold markieren!

              Das '<b>' und '</b>' sind falsch. Der Eintrag mit 'wwwrun ALL=(ALL)
              ALL' ist ueberigens genau so, als wuerdest du auf deiner
              Internet-Seite eine Einladung fuer alle Cracker machen, die da besagt
              'Crackt mich!'.

              Egal, war ja nur zum test, ob da überhaupt was geht!

              Wie soll ich den Eintrag:
              wwwrun  localhost = NOPASSWD: /sbin/mount
              hinzuadden?

              Du sollst ihn gar nicht hinzufuegen, sondern du sollst deinen
              'wwwrun ALL=(ALL) ALL' entfernen und durch meinen Eintrag ersetzen.
              Aber das 'localhost' musst du noch durch deinen FQDN ersetzen.

              Ok, gemacht,
              da steht jetzt drin:
              root            ALL=(ALL) ALL
              wwwrun          asterix.datentechnik-moll.de=NOPASSWD: /sbin/mount

              Aber in der error log des Apache kommt trotzdem: password, und das mounten geht nicht!

              Und wenn ich in der shell als wwwrun ausführe, dann kommt:
              wwwrun is not allowed to run sudo on asterix.  This incident will be reported.
              ???

              Gruß

              Christian

              1. Hallo,

                Hab /etc/sudoers mit visudo editiert

                Kenn ich nicht.

                Ist der empfolene Editor für die sudoers

                Empfohlen? Von wem?

                Ok, gemacht,
                da steht jetzt drin:
                root            ALL=(ALL) ALL
                wwwrun          asterix.datentechnik-moll.de=NOPASSWD: /sbin/mount

                Aber in der error log des Apache kommt trotzdem: password, und das
                mounten geht nicht!

                Sicher, dass der FQDN 'asterix.datentechnik-moll.de' ist?

                Und wenn ich in der shell als wwwrun ausführe, dann kommt:
                wwwrun is not allowed to run sudo on asterix.  This incident will
                be reported.
                ???

                Denn hier sagt sudo, der FQDN sei 'asterix'. Ansonsten musst du mal
                ein wenig mit den Gruppenzugehoerigkeiten rumspielen, kann sein, dass
                das sich das bei den Distributionen etwas unterscheidet. Genaueres
                kann ich jetzt aber auch nicht sagen -- ich habe hier leider kein
                UNIX- oder Linux-System zum testen.

                Gruesse,
                 CK

                1. Hallo,

                  also, soweit klappt das mit dem mounten jetzt! Mit dem sudors Eintrag!
                  Musste Ihn allerdings etwas ab ändern auf:
                  unix-mount      ALL=NOPASSWD:   /bin/mount, /bin/umount

                  Den umount brauch ich ebenfalls, da ich den Share ja nur brauche um auszulesen was da drin ist!

                  Leider wird das Verzeichnis nicht immer gemountet, warum auch immer.
                  Bekomme Fehlermeldung: smb connection failed

                  Gruß

                  Christian

                  1. Hallo,

                    Musste Ihn allerdings etwas ab ändern auf:
                    unix-mount      ALL=NOPASSWD:   /bin/mount, /bin/umount

                    Wie ich ja schon sagte: du musst den richtigen FQDN nehmen.

                    Leider wird das Verzeichnis nicht immer gemountet, warum auch immer.
                    Bekomme Fehlermeldung: smb connection failed

                    Steht doch da: die Verbindung zu dem entsprechenden Share ist
                    fehlgeschlagen.

                    Gruesse,
                     CK