Robert Bienert: Bash Befehle in Perl, z.B. system

Beitrag lesen

Moin!

Folgendes Perl-Script habe ich - leicht abgewandelt - abgetippt:

Perl-CGI-Skripte einfach abzutippen, ohne ansatzweise zu wissen, was dort vorgeht, birgt Risiken, was du hoffentlich weißt.

#!/usr/bin/perl -w

Du möchtest hier lieber #! /usr/bin/perl -Tw schreiben, wo auch schon Benne darauf hinweist.

use strict;

use CGI::Carp qw(fatalsToBrowser);

my $Vergleich = system("chmod 0777 /home/gruppen/");

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body>\n";
print $Vergleich."\n";
if($Vergleich == 0) {
  print "Alles in Ordnung!\n";
}
else {
  print "Nix gudd!\n";

  
Wenn du wissen willst, was hier genau schiefgegangen ist, kannst du die vordefinierte Variable $! auswerten, die die Meldung des zuletzt aufgetretenen Fehlers enthält, z.B.  
  
`print "Nix gudd: $!\n";`{:.language-perl}  
  

> ~~~perl

}  

> print "</body></html>\n";

Bei Ausführung mit einem Browser hat der Perl-Interpreter den system-Befehl nicht ausgeführt, anstatt dessen erhalte ich folgende Meldung am Bildschirm:

256 Nix gudd!

Du weißt hier nur, dass chmod nicht geklappt hat (system wurde ausgeführt, es schlug nur fehl) und den Fehlercode 256 zurückgibt. Wenn du den Fehlercode um 8 Bit verschiebst $err = $Vergleich >> 8 (kann auch nach links sein) erhältst du den Fehlercode von chmod, wie in dessen Manpage angegeben.

Ich muss dazu sagen, dass der system-Befehl auf viele Bash-Befehle nicht reagiert.

Er reagiert schon darauf, nur wahrscheinlich schlägt deren Ausführung mangelnder Rechte fehl.

Mein eigentliches Ansinnen ist die Integration von Befehlen wie “useradd”, “userdel” usw.. in Perl-Scripte.

Darf man fragen, was du damit vorhast? Ich hoffe, du schützt deine Perlskripte gegen unberechtigten Zugriff, sonst darfst du dich nicht wundern, wenn dir dein Rechner bald zwar noch physisch gehört, aber du nicht mehr die Gewalt darüber hast.

Viele Grüße,
Robert