• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Wie kann man in perl root werden?

framp

Moderator
Teammitglied
Ich versuche jetzt schon länger in einem Perl Script, welches als normaler User aufgerufen wird, root Rechte zu bekommen. Der Aufrufer wird nach dem Root PW gefragt und das Script läuft dann als root weiter bzw ruft sich selbst noch einmal als root auf.

In der bash geht es ganz einfach so:
Code:
  su -c "$0 $*"
   exit $?

In Perl habe ich schon diverse Dinge ausprobiert, aber ich komme nicht zum Ziel. Hat jemand einen Tip wie das am elegantesten in Perl zu berwerkstelligen ist?
 

abgdf

Guru
Ich glaube, "su" ist nicht Aufgabe von Perl. Warum nicht:
Code:
su -c "script.pl $*"
   exit $?

Vielleicht auch:

http://search.cpan.org/~landman/Sudo-0.32/lib/Sudo.pm

Oder "suidperl"? Weiß nicht ...

Gruß
 
OP
framp

framp

Moderator
Teammitglied
abgdf schrieb:
Ich glaube, "su" ist nicht Aufgabe von Perl. Warum nicht:
Code:
su -c "script.pl $*"
   exit $?
Das PerlScript soll von Linux noobs von dem Desktop aufgerufen werden können. Das funktioniert für das bash Script hervorragend. Und genauso möchte ich es auch für Perl haben.
Vielleicht auch:

http://search.cpan.org/~landman/Sudo-0.32/lib/Sudo.pm
Da habe ich mich auch schon durchgelesen. sudo ist sicherlich die bessere Variante. Dann aber muss sudo aber so konfiguriert werden, dass das perlscript per sudo aufrufbar ist. Wie gesagt - das Script soll von Noobs aufrufbar sein und keine Änderungen am System vornhemen bzw erfordern.
Oder "suidperl"? Weiß nicht ...
Ich auch nicht ;-) suid ist unsicher und das Script soll kein ja Trojaner bei den Noobs werden.

Das verrückte ist dass
Code:
#!/usr/bin/perl

use strict;
use warnings;

print "Starting ...\n";

if ($> != 0) {
        print "Becoming root ... \n";
        `su - -c \"$0 @ARGV\"`;
        exit $?;
}

`iptables -L -vn`
was ja das Aquivalent zum bash code ist - nicht funktioniert :???:
 
A

Anonymous

Gast
framp schrieb:
was ja das Aquivalent zum bash code ist - nicht funktioniert :???:
Code:
        `su - -c \"$0 @ARGV\"`;
ich bin hab zwar von Perl keinen blanken Schimmer , ( @abgdf noch nicht )
aber ich glaube das funktionier in keiner Script- oder Programmiersprache zuverlässig, aus dem einfachen Grund. Hierbei wird das Aktuelle Verzeichnis gewechselt, und zwar in diesem Fall auf das HOME von root. ( Eventuell sind dann sogar alle Variablen weg ? müsste man versuchen. ) Wurde das Script mit absolutem Path angegeben, sollte es wohl eventuell noch funktionieren wurde es aber mit relativen Path angegeben ist es unwahrscheinlich das die Datei existiert.

hinter su das erste "-" weglassen und weiter probieren. ;) ;) ;)

robi
 

abgdf

Guru
Doch, geht :cool:. Aber schlimm zusammengehackt:
Code:
#!/usr/bin/perl

use FindBin;

system("whoami"); 

if ($#ARGV == -1 || $ARGV[0] ne "--calledbyscript") {

    # Call me again once as 'root':

    system("su -c '" . $FindBin::Bin . "/" . $FindBin::Script . " --calledbyscript " . join(" ", @ARGV) . "'");
    exit;
}
So wie DAS UNIVERSUM:

http://xkcd.com/224/

:lol:

Gruß
 
OP
framp

framp

Moderator
Teammitglied
abgdf schrieb:
Doch, geht :cool:. Aber schlimm zusammengehackt:
Congratulations!
Ich habe den Code per Copy und Paste ins Eclipse kopiert - das Script gestartet - und ALLES hat funktioniert. Selbst die Perl Klassen, die ja auch im selben Verzeichnis stehen wurden gefunden. Auch damit hatte ich bei meinen diversen Versuchen vorher Probleme.

Mag ein Hack sein - aber er funktioniert!
 
OP
framp

framp

Moderator
Teammitglied
robi schrieb:
hinter su das erste "-" weglassen und weiter probieren. ;) ;) ;)
robi
Habe ich natürlich auch probiert. ;) Dann wurde zwar das Script als Root aufgerufen - aber er hat die im Script benutzen Perlklassen, die sich im selben Verzeichnis wie das Script befinden, nicht gefunden :-(.
 
Oben