Linux System Befehl via CGI skript

hallo leuts

hab da mal ne frage

Ich habe mit Linux nicht viel am hut und möchte mich auch nicht allzu gross damit beschäftigen.

Es ist so, das wir eine Smoothwall (linux kernel 2.2.20) im betrieb haben. Diese Firewall kann man mit einem Webinterface konfigurien und administrieren.

Ich möchte nun ein kleines zusatzskript in das Webinterface integrieren und habe damit so meine Probleme.

ich habe einen befehl den ich via ssh eingeben muss um ICMP anfragen zu ignorieren.

ICMP anhemen:
echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all

ICMP ignorieren:
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

Gibt es nun eine möglichkeit, diesen Befehl in ein CGI skript zu verpacken ?
Ich möchte eignetlich ein Form mit einer Checkbox erstellen.
nur hab ich keine ahnung wie ich das mache damit der befehl an das system weitergeleitet wird

kann mir da jemand helfen ?

über antworten würde ich mich freuen

Grüsse

Darkmind
 
mit einem cgi script ist dies prinzipiell möglich, jedoch hab ich keine ahnung wie smoothwall seine "websteuerung" implementiert hat. wenn die da n paar security features eingebettet haben (was ich doch hoffe für ne firewall) kannst du das womäglich vergessen.
such doch mal die webseiten auf dem server. verändere die ein wenig und schau wie es rauskommt.
kann mir eigentlich gut vorstellen, dass die mit cgi und nicht mit php arbeiten. jedoch musst du das selbst überprüfen, da ich keine smoothwall habe
 
hallo soox..

vielen dank fuer deine Antwort.

Ich habe so ein tool vo ich die files ganz einfach hin undd her laden kann und ich habe das auch gemacht.

hm.. vielleicht zeige ich dir mal ein kleines script:

zb dieses script stellt eine Webbasierte ssh aktivierung dar:

---------------------------------------------------------------------------
#!/usr/bin/perl
#
# SmoothWall CGIs
#
# This code is distributed under the terms of the GPL
#
# (c) The SmoothWall Team

require '/var/smoothwall/header.pl';

my (%remotesettings, %checked, $errormessage);

&showhttpheaders();

$remotesettings{'ENABLE_SSH'} = 'off';
$remotesettings{'ACTION'} = '';
&getcgihash(\%remotesettings);

$errormessage = '';
if ($remotesettings{'ACTION'} eq $tr{'save'})
{
&writehash("${swroot}/remote/settings", \%remotesettings);
if ($remotesettings{'ENABLE_SSH'} eq 'on')
{
&log($tr{'ssh is enabled'});
system ('/bin/touch', "${swroot}/remote/enablessh");
}
else
{
&log($tr{'ssh is disabled'});
unlink "${swroot}/remote/enablessh";
}

system '/usr/local/bin/restartssh';
}

&readhash("${swroot}/remote/settings", \%remotesettings);

$checked{'ENABLE_SSH'}{'off'} = '';
$checked{'ENABLE_SSH'}{'on'} = '';
$checked{'ENABLE_SSH'}{$remotesettings{'ENABLE_SSH'}} = 'CHECKED';

&openpage($tr{'remote access'}, 1, '');

&showrassection();

&openbigbox('100%', 'LEFT');

print "<FORM METHOD='POST'>\n";

&openbox('100%', 'LEFT', $tr{'remote access2'});
print <<END
<TABLE WIDTH='100%'>
<TR>
<TD WIDTH='25%' CLASS='base'>SSH:</TD>
<TD WIDTH='25%'><INPUT TYPE='checkbox' NAME='ENABLE_SSH' $checked{'ENABLE_SSH'}{'on'}></TD>
<TD WIDTH='25%'> </TD>
<TD WIDTH='25%'> </TD>
</TR>
</TABLE>
END
;
&closebox();

&openbox('100%', 'LEFT', $tr{'error messages'});
print "<CLASS NAME='base'>$errormessage";
print " </CLASS>";
&closebox();

print <<END
<DIV ALIGN='CENTER'>
<TABLE WIDTH='60%'>
<TR>
<TD ALIGN='CENTER'><INPUT TYPE='submit' NAME='ACTION' VALUE='$tr{'save'}'></TD>
</TR>
</TABLE>
</DIV>
END
;

print "</FORM>\n";

&closebigbox();

&closepage();
--------------------------------------------------------------------------

dies ist nur ein beispiel.. wenn ich mir die struktur der restlichen skript ansehe fällt mir auf das die skripts fast immer eine Datei aufrufen um eine anforderung auszuführen.

also zb um zu dialen:

($cgiparams{'ACTION'} eq $tr{'dial'}) {
system('/etc/ppp/ppp-on') == 0

und um aufzulegen:

($cgiparams{'ACTION'} eq $tr{'hangup'}) {
system('/etc/ppp/ppp-off') == 0
or &log("Hangup failed: $?"); }

so geht das bei fast allen einstellungen. Möchte man das jetzt auf diese ICMP befehl übernehemen geht das ja nicht da man hier als paramete echo 1 oder eben 0 setzt... wenn ich nur wüsste wie und ob man dieses Echo 1 in ein skript umsetzten kann, wäre mir schon riesig geholfen.

Eben ich hab keine ahnung von linux und dessen befehls struktur. Darum ist es für mich schwierig überhaupt abzuschätzen ob meine idee überhaupt umsetzbar ist.

grüsse

Darkmind
 
Original von soox
mit einem cgi script ist dies prinzipiell möglich, jedoch hab ich keine ahnung wie smoothwall seine "websteuerung" implementiert hat. wenn die da n paar security features eingebettet haben (was ich doch hoffe für ne firewall) kannst du das womäglich vergessen.

Nein, wer in den aeusserst ekelhaften Perlscripten von smoothwall nach dem Taint-Mode oder gar nach geforktem sucht wird erstaunlich in die Roehre gucken. Der Maintainer ist leider komplett unfaehig, die Mailinglisten werden zensiert, Bugs werden aus dem Tracker geloescht statt gefixt und wenn mal ein Bugfix fuer die GPL'te Version haben moechte kann damit rechnen das es erscheint wenn das Problem so alt ist das niemand mehr versuchen wird es zu exploiten.

Das jemand so weit auf dem Bastion-Host vordringen koennte ist schlicht nicht vorgesehen und das 70% der Angriffe von innen kommen wird herzlich ignoriert.

Einige frustrierte smoothwall-user haben btw. das IPcop-Projekt ins Leben gerufen. Ob die Probleme dort geloest sind kann ich nicht sagen da ich noch keinen Blick in den Code gewagt habe - zumindest scheint die Mailingliste unzensiert. -- http://ipcop.org

Ob ein Debianrouter und ein paar selbstgestrickte Perlscripts wenn mans den wirklich braucht nicht wesentlich lehrreicher ist lass ich mal so im Raum stehen.

Eben ich hab keine ahnung von linux und dessen befehls struktur. Darum ist es für mich schwierig überhaupt abzuschätzen ob meine idee überhaupt umsetzbar ist.

Try it...
 
das ist je ganz normales perl....sollte also auch für DICH nicht schwer sein das gaze zu abzuändern.
wie du bereits angedeutet hast macht dieses script nichts anderes als ein shell script zu starten. du kannst jedoch auch nur dein befehl dort reinsetzen ( in system() ) da es kein muss ist ein shell script dort anzugeben.

das letzte problem ist nur noch die integration in die seite selbst. musst halt auch ein wenig probieren.

[meine meinung]
auch ohne yoda's post frage ich mich jetzt gerade ob das wirklich ne firewall ist...wenn das system hier schon mit offener tür im netzwerk steht wird es auch an anderen orten unsichere/offene türen geben....
[/meine meinung]
 
Zurück
Oben