Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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?

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

Danke sehr. Werde mal sehen, ob ich das so hinbekomme :)

Falls nicht, melde ich mich wieder.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.