Madman-Maniac Geschrieben 9. August 2010 Geschrieben 9. August 2010 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 Zitieren
etreu Geschrieben 9. August 2010 Geschrieben 9. August 2010 Wird denn die Datei /touch angepasst? Wie rufst du das Skript aus der Konsole auf? Wie sehen die Berechtigungen des Skripts bisher aus? Zitieren
Madman-Maniac Geschrieben 9. August 2010 Autor Geschrieben 9. August 2010 (bearbeitet) 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 9. August 2010 von Madman-Maniac Zitieren
bigvic Geschrieben 9. August 2010 Geschrieben 9. August 2010 (bearbeitet) 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 9. August 2010 von bigvic Zitieren
_n4p_ Geschrieben 9. August 2010 Geschrieben 9. August 2010 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 Zitieren
Madman-Maniac Geschrieben 9. August 2010 Autor Geschrieben 9. August 2010 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? Zitieren
bigvic Geschrieben 9. August 2010 Geschrieben 9. August 2010 (bearbeitet) 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 9. August 2010 von bigvic Zitieren
Madman-Maniac Geschrieben 9. August 2010 Autor Geschrieben 9. August 2010 Danke sehr. Werde mal sehen, ob ich das so hinbekomme Falls nicht, melde ich mich wieder. Zitieren
Empfohlene Beiträge
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.