perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 25
Click for quality!




10.02.2012 / 21:23

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragCGI Skripte mit root rechten ausführen?
Seitenanfang
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>";

Datum: 02.05.2007-11:03

Beitragre: CGI Skripte mit root rechten ausführen?
Seitenanfang
Schlechte Idee! Du solltest so gut es geht vermeiden Skripte mit mehr Rechten laufen zu lassen als notwendig.

Empfehlenswert sind 2 Skripte. Das erste Skript, welches kein CGI ist und mit mehr Berechtigung laeuft, wird regelmaeszig von einen Cronjob aufgerufen. Es sammelt die Informationen ueber die Dienste und schreibt sie in eine Datenbank oder Textdatei.
Das CGI-Script benoetigt dann keine Sonderberechtigung fuer die Ausfuehrung, nur Zugriff auf die Datenbank bzw. Textdatei um die Informationen auszulesen. So hast du beides sauber voneinander getrennt und damit das Sicherheitsrisiko minimiert.

Datum: 02.05.2007-13:25

Beitragre: CGI Skripte mit root rechten ausführen?
Seitenanfang

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

Die Anfuehrungszeichen um '$service' sind voellig unnoetig und mit dem Anfuehrungszeichen als Begrenzer fuer das Regex-Muster waere ich vorsichtig, denn wenn du irgendwann einmal Escapesequenzen verwendest kommt es zu einen Fehler.

$service =~ "S[0-9]*\w+"

So funktioniert es wieder


$service =~ m"S[0-9]*\w+"

Datum: 02.05.2007-14:17

Beitragre: CGI Skripte mit root rechten ausführen?
Seitenanfang
Hab deinen Code mal ein wenig gekuerzt, vielleicht gefaellt's dir ja und willst es uebernehmen


#!/usr/bin/perl

use strict;
use warnings;

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

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

# auszuschlieszende Dienste
my @exclude_srv = qw(
bigbrother
hwscan
fbset
rpmconfigcheck
smbfs
nfs
nfsboot
splash_early
running-kernel
kbd
splash
ITCAM
rebootmail
custstart
);

opendir(DH, $ServicesDirectory) or die $!;

foreach my $service ( readdir(DH) ) {
next if $service =~ /^\.\.?$/;

$service =~ s/S\d{2}//;

next if grep($service eq $_, @exclude_srv);

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

# ...

}
closedir(DH);

In '@exclude_srv' stehen die Dienste die uebersprungen werden sollen, so lassen sich leicht weitere Dienste der Liste hinzufuegen und es ist nicht mehr so ineffizient wie die ganzen Regexps.

Datum: 02.05.2007-14:23

Beitragre: CGI Skripte mit root rechten ausführen?
Seitenanfang
Sorry, da ist noch 'n kleiner Fehler, diese Zeile benoetigt eine Korrektur

next if $service =~ /^\.\.?$/;

->

next if $service =~ /^\.\.?$|^K/;

damit auch Eintraege mit einen 'K' am Anfang ausgeschlossen werden.

Datum: 02.05.2007-14:29

Beitragre: CGI Skripte mit root rechten ausführen?
Seitenanfang
Hi,

danke für deine Hilfe.
Ich denke ich werde das Problem wohl so lösen müssen. Ich werde das Skript und die HTML Seite trennen.
Danke für die kürzung des Codes, arbeite noch nicht so lange mit Perl.

Gruß

Marcus

Datum: 02.05.2007-16:15

-






-
-