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.

CGI Skripte mit root rechten ausführen

Empfohlene Antworten

Veröffentlicht

Hi @all,

ich bin gerade dabei ein paar Skripte zu Enwickeln, die den Status bestimmter dienste abfragen. Jetzt habe ich das Problem, dass wenn ein Skript aufgerunfen wird mit dem wwwrun User ausgefürht wird.

Wie kann ich die Skripte mit root-Rechten laufen lassen?

Das Skript sieht wie folgt aus:

#!/usr/bin/perl



use strict;


# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Variablen ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


my $ServicesDirectory="/etc/init.d/rc3.d";		# Verzeichnis in dem sich die zu Startenden Dienste befinden



# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Hauptprogramm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


print"<table border=1 align=center>";

print"<center><h1>Auswertung Dienste</h1></center>";


my @service = <$ServicesDirectory/S*>;

foreach my $service (@service){

        $service=~s/$ServicesDirectory\///;

        next if "$service" =~ "S[0-9]*bigbrother" 		|| 

        "$service" =~ "S[0-9]*hwscan" 			|| 

        "$service" =~ "S[0-9]*learnvipa" 		||

        "$service" =~ "S[0-9]*fbset" 			|| 

        "$service" =~ "S[0-9]*rpmconfigcheck" 	|| 

        "$service" =~ "S[0-9]*smbfs" 			|| 

        "$service" =~ "S[0-9]*nfs" 				|| 

        "$service" =~ "S[0-9]*nfsboot" 			|| 

        "$service" =~ "S[0-9]*splash_early" 	|| 

        "$service" =~ "S[0-9]*running-kernel" 	|| 

        "$service" =~ "S[0-9]*kbd"				|| 

        "$service" =~ "S[0-9]*splash" 			|| 

        "$service" =~ "S[0-9]*ITCAM" 			||

        "$service" =~ "S[0-9]*rebootmail"		||

        "$service" =~ "S[0-9]*dsmcad"			||

        "$service" =~ "S[0-9]*custstart";



        $service=~s/S[0-9]*/rc/; 	# Sxx nach rc wandeln (z.B. S016apache --> rcapache)


        my $ServiceStatus=`$service status >/dev/null && echo OK || echo FEHLER`;


        #print "$service ==> $ServiceStatus\n";


        #print "<br>";



        if ($ServiceStatus eq "OK"){  

                $service=~s/rc//;

                print "<tr>

                <td>$service</td>  	

                <td bgcolor=#00FF00>ok</td>


                </tr>";	

        }

        elsif($ServiceStatus eq "FEHLER"){

                $service=~s/rc//;

                print "<tr>

                <td>$service</td>  	

                <td bgcolor=#ff0000>FEHLER</td>


                </tr>";	


        }

}

print "</table>";

1) denke drüber nach, ob du das wirklich willst
Warum sollte ich das nicht wollen?

2) wenn du zu dem Schluss kommst, dass du das willst, dann hast du nicht richtig nachgedacht

Kannst du mir das näher begründen? Hast du vielleicht eine andere oder bessere Lösung?

3) falls du es dennoch willst ist SUID root dein Freund (siehe chown & chmod). Aendere die Rechte deines Perl-Scriptes.
Werde ich mir mal anschauen, danke für den Tipp.

CGI-Scripten root-Rechte zu geben ist ein Security-Deasaster.

Es braucht nur einen Fehler zu enthalten und dein gesamtes System kann kompromitiert werden. Daher solltest du das wirklich vermeiden.

SUID-Root ist übrigens auch nicht wirklich besser :rolleyes:

Wenn du unbedingt eine bestimmte Aktion als root ausführen willst solltest du sudo verwenden.

Hi,

Warum sollte ich das nicht wollen?

Enormes Sicherheitsrisiko. (siehe Setuid - Wikipedia)

Wenn es im Intranet steht und du es mit htaccess absicherst und nochmal mit scriptbasierter PW-Eingabe schützt, würde ich es unter normalen Umständen auch nicht machen - aber das könnte man in einer Testumgebungen vllt. noch hinnehmen. Aber im Internet oder auch nur annährend produktiv ist das schon fahrlässig.

Hast du vielleicht eine andere oder bessere Lösung?

Ja. Wenn du solche Aktionen machen willst, dann log dich via ssh ein und nehm ne Shell bzw. dann dort dein script dafür.

Du solltest solche Systemveränderungen nicht via Web vornehmen - m. E. auch nicht mit sudo.

ciao,

victorinox

Hi,

also das mit der Shell und dem Skript, wäre mir eigentlich auch lieber, aber das geht aus verschidenen gründen leider nicht.

Was ich mir überlegt, habe ist, vielleicht die Dienste über die Prozessliste abzufragen, dass dürfte der wwwrun denke ich und da müsste ich nichts freigeben.

Nur wie kann ich das für jedes System machen und das vorallem Dynamisch?

Also was du machen willst müsste auch ohne root rechte gehen. Den Status einen Services kannst du auch mit dem wwwrun abfragen. das einzige was net geht ist das du die Dinger über "rcapache status" abfragst sondern du musst das direkt über "/etc/init.d/apache status" machen da die "rcXXX" links unter /sbin liegen und das net direkt im Pfad des wwwruns liegt.

Sprich nur zum abfragen brauchst du garnix zu machen außer deine aufrufe ein wenig zu modifizieren:

$service=~s/S[0-9]*/rc/;
wird sowas wie
$service=~s/S[0-9]*/\/etc\/init.d\//;

vielleicht musst du den . noch escapen (bin net so der perl Experte *G*)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

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.