Zum Inhalt springen

Bash-Script mit Perl ausführen - was mache ich falsch?


Empfohlene Beiträge

Hi,

ich versuche auf einem openSUSE 11.3 Server ein Bash-Script mittels Perl/CGI auszuführen. Leider funktioniert das nicht so wie ich es gerne hätte. Nämlich gar nicht.

Mein Perl-Script:

#!/usr/bin/perl -w


use strict;

use CGI::Carp qw(fatalsToBrowser);


print "Content-type: text/html\n\n";


$SIG{CHLD} = 'IGNORE';

unless ( fork () ) {

    exec ('/bin/test.sh');

    exit ( 0 );

}
Die letzten fünf Zeilen habe ich hier im Forum gefunden, da der normale Aufruf mit exec(), system() und qx() nicht funktioniert hat. Die Datei test.sh sieht so aus:
#!/bin/bash


touch /test

echo "ein Test" >> /test

mv /test /srv/www/test

cat /srv/www/test

Das sind nur Test-Scripts. Wenn die funktionieren, kommen die richtigen zum Einsatz. Diese sollen die smb.conf durch eine andere ersetzen und dann den Samba-Dienst neustarten.

Liegt das irgendwie an den Berechtigungen? Und wenn ja, wo muss ich was setzen?

Das Script test.sh lässt sich über die Konsole fehlerfrei ausführen. Und das Perl-Script meldet keine Fehler.

Danke im Voraus.

mfG

Madman-Maniac

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Datei /test wird nicht erstellt, somit wird der Rest des Scripts auch nicht ausgeführt.

In der Konsole rufe ich das Script so auf:

sh /bin/test.sh

Es funzt aber auch ohne vorangestelltes sh

Ich habe an den Berechtigungen bislang nichts geändert. Das Perl-Script hat 755 als Berechtigung, um ausgeführt werden zu können. Mit 777 gibt's keine Veränderung im Bezug auf das Shell-Script.

Das Shell-Script hat ebenfalls 755 als Berechtigung.

//edit:

Gerade noch einen Test durchgeführt:

Habe die Datei /test händisch angelegt und dann das Perl-Script aufgerufen. Nichts passiert.

Der Datei /test die Rechte 777 gegeben und nochmal versucht. Der Text ein Test wurde in die Datei geschrieben.

Also müsste ich dem Perl-Script Schreibrechte auf die betroffenen Ordern/Dateien geben. Aber wie mache ich das? Ist das überhaupt möglich?

Bearbeitet von Madman-Maniac
Link zu diesem Kommentar
Auf anderen Seiten teilen

Und noch eine elementare Frage ... wieso überhaupt bash benutzen?! Du kannst und solltest ALLES mit einer Sprache machen und systemcalls vermeiden.

Ansonsten ist meine Vermutung, dass dein apache mit einer Berechtigung läuft die dein perlscript respektive dein bash script nicht korrekt ausführen kann. Debugge doch am besten mal in der shell, d.h. führe dein perlscript per hand und nicht via Browser aus.

Also müsste ich dem Perl-Script Schreibrechte auf die betroffenen Ordern/Dateien geben. Aber wie mache ich das? Ist das überhaupt möglich?

chown der betroffenen Ordner/Dateien, so das es mit dem httpd-prozess passt.

Bearbeitet von bigvic
Link zu diesem Kommentar
Auf anderen Seiten teilen

Liegt das irgendwie an den Berechtigungen? Und wenn ja, wo muss ich was setzen?

ich hoffe mal das es die berechtigungen sind, denn warum sollte irgendein user nach / schreiben dürfen?

versuchs mal mit /tmp/ statt /

aber prinzipiell stimme ich bicvic zu, das kann perl auch ganz prima selbst machen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ganze ist für den Einsatz in einem Schulungsraum gedacht. Dort ist ein openSUSE 11.2 mit Samba.

Die Benutzer sollen während des Unterrichts ihre gewohnten Laufwerke benutzen können, aber während der Prüfungen sollen die Laufwerke anders vergeben werden. Daher die änderung der smb.conf.

Nach der Prüfung sollen wieder die alten Freigaben hergestellt werden (also wieder Änderung der smb.conf) und zusätzlich sollen alle Dateien aus den Prüfungsordnern in einen neuen Ordner kopiert werden.

Die dazu erstellten Shell-Scripte funzen prima. Aber ich kann den Dozenten dieses Raumes keinen Zugriff auf den Server erlauben. Daher wollte ich die Scripte remote über den Browser ausführen lassen. Eine andere Möglichkeit habe ich bisher nicht gefunden.

Oder ist es vielleicht möglich, das ganze über Webmin zu realisieren? Es soll mit einem Klick ausgeführt werden können (nachdem man sich mit einem Passwort eingeloggt hat), so dass ich da keine für die Dozenten zu komplizierten Kommandozeilen-Befehle hinterlegen muss.

Und wie setze ich das ganze ohne System-Befehle nur in Perl um?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und wie setze ich das ganze ohne System-Befehle nur in Perl um?

Indem du deine Bashscripte in Perl portierts. Ein copy Befehl gibt es auch in Perl, genauso wie man dort Dateien erstellen und löschen kann.

Prinzipiell ändert es aber nichts daran, dass dein Webserverprozess unter einem bestimmten User läuft. Meist einem unpriveligiertem um keine Sicherheitslücken aufzureissen. Und dieser User führt dein Perlscript aus, natürlich mit den Rechten des Webserverprozesses. Du musst also diesem User das Rechte geben deine smb.conf zu editieren. Dazu gibt es mehrere Möglichkeiten, z.B. smb.conf Rechte anpassen, SETUID, SUDO, ...

Und webmin ist afaik nichts anderes als ein eigener webserver der mit root berechtigung läuft.

Bearbeitet von bigvic
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...