Fabian St.: Bash Befehle in Perl, z.B. system

Beitrag lesen

Hi!

#!/usr/bin/perl -w
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";
}
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!

Unter welcher Benutzerkennung läuft denn der Apache? CGI-Programme werden nämlich - sofern man nicht sowas wie suexec einsetzt - auch unter der Kennung des Apache-Benutzers ausgeführt. Dieser ist mit großer Sicherheit nicht der Besitzer des Ordners /home/gruppen, sodass dein Unterfangen bereits aufgrund fehlender Rechte fehlschlägt.

Rufe ich das gleiche Programm jedoch über die Bash-Befehlszeile auf, dann funktioniert es.

linux:/srv/www/cgi-bin # /usr/bin/perl -w ./bs4.pl
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Test-Ausgabe</title></head><body>
0
Alles in Ordnung!
</body></html>

Soweit ich mich erinnern kann, ist das oben der Standard-Prompt für den User »root« unter SuSE - insofern ist es auch nicht verwunderlich, dass ein entsprechendes chmod dann auch klappt.

Grüße,
Fabian St.