View previous topic :: View next topic |
Author |
Message |
skakz Guru
Joined: 03 Jul 2004 Posts: 380 Location: Ischia/Napoli/Italia/Terra
|
Posted: Sat Jun 10, 2006 3:13 pm Post subject: [tool] controllare avvio e stop degli script rc da remoto |
|
|
ho scritto questa piccola pagina in php per soddisfare l'esigenza mia (e forse anche di qualcun altro) di controllare processi come sshd vsftd e altri in modo da poterli avviare solo quando necessario, riducendo così l'esposizione della macchina a eventuali attacchi.. (ormai c'è sempre qualcuno che rompe )
qui potete vedere il risultato finale!
quello di cui avete bisogno è un qualsiasi httpd server che supporti php, sudo e gentoo naturalmente
copiate questo script nella DocumentRoot del vostro web server
rc.php
Code: | /* written by Luca G. aka skakz [lucag@lug-ischia.org]
* THIS FILE IS FOR STUDYING PURPOSES ONLY AND A PROOF-OF-
* CONCEPT. THE AUTHOR CAN NOT BE HELD RESPONSIBLE FOR ANY
* DAMAGE DONE USING THIS PROGRAM.
*/
<html> <head> <title>rc station</title> </head>
<font size=1>
<TABLE BORDER WIDTH="50%" HEIGHT=55%>
<TR><font size=2 color=blue>
<TH><font size=2 color=blue>Boot<font>:</TH>
<TH><font size=2 color=blue>Default<font>:</TH>
</TR>
<?php
if (isset($_POST['rctodo']) ) {$rctodo = $_POST['rctodo'];}
if (isset($_POST['rcname']) ) {$rcname = $_POST['rcname'];}
if (isset($rcname) && isset($rctodo)) {
$output = shell_exec("/usr/bin/rc-script $rcname $rctodo --nocolor");
print "<b>Last cmd:</b>";
print "<pre>$output</pre>";
}
$boot = shell_exec("/bin/rc-status --nocolor boot");
$default = shell_exec("/bin/rc-status --nocolor default");
$sboot = split("\n", $boot);
$sdefault = split("\n", $default);
$cboot = count($sboot );
$cdefault = count($sdefault);
$pattern ="/ (.*?)[\,\s,\n]\[ (.*?) \]/";
echo "<TD ALIGN=left>";
for ($i=1; $i<=$cboot; $i++) {
preg_match ($pattern, $sboot[$i], $matches);
$rcname = "$matches[1]";
$rcstatus = "$matches[2]";
if ($rcstatus == 'started') { print "<form action=rc.php method=post><input type=submit name=rctodo value=stop><b><font color=black><--$matches[1]</b></font><input type=hidden name=rcname value=$rcname></form>"; }
else if ($rcstatus == 'stopped') { print "<form action=rc.php method=post><input type=submit name=rctodo value=start><b><font color=red><--$$matches[1]</b></font><input type=hidden name=rcname value=$rcname></form>"; }
}
echo "</TD>";
echo "<TD ALIGN=right>";
for ($i=1; $i<=$cdefault; $i++) {
#if (!preg_match ($pattern, $sdefault[$i], $matches)) { die; }
preg_match ($pattern, $sdefault[$i], $matches);
$rcname = "$matches[1]";
$rcstatus = "$matches[2]";
if ($rcstatus == 'started') { print "<form action=rc.php method=post> <b><font color=black>$matches[1]--></b></font><input type=submit name=rctodo value=stop><input type=hidden name=rcname value=$rcname></form>"; }
else if ($rcstatus == 'stopped') { print "<form action=rc.php method=post><b><font color=red>$matches[1]--></b></font><input type=submit name=rctodo value=start><input type=hidden name=rcname value=$rcname></form>"; }
}
echo "</TD>";
?>
</TR>
</font>
</html> |
ora naturalmente gli script non possono essere avviati da utente apache.. quindi:
create il file /usr/bin/rc-script
Code: | #! /bin/sh
sudo /sbin/rc-script.sh $* |
Code: | chmod 755 /usr/bin/rc-script |
e /sbin/rc-script.sh
Code: | #! /bin/sh
/etc/init.d/$1 $2 $3 |
Code: | chmod 744 /sbin/rc-script.sh |
editate /etc/sudoers e aggiungete:
Code: | %apache ALL=(root) NOPASSWD: /sbin/rc-script.sh |
per rendere il tutto un pò più sicuro potete configurare il vostro webserver per limitare l'accesso a questa pagina.
riporto la mia ocnfigurazione di apache:
Code: | <Location /private>
AuthName "area privata"
AuthType Basic
AuthUserFile /etc/apache2/auth/passwd
require valid-user
Order Deny,Allow
Deny from all
Allow from 192.168.1.3 127.0.0
Satisfy any
</Location> |
ho inserito una location in cui vi si può accedere solo da un ip di lan o tramite autenticazione.
Potete creare un utente con il seguente comando:
Code: | htpasswd2 -c /etc/apache2/auth/passwd qualcuno |
ora non vi resta che collegarvi al vostro webserver http://localhost/path/rc.php
that's all.. spero che a qualcuno piaccia..
questo script potete copiarlo / modificarlo / spacciarvi per l'autore di / dire alla vostra morosa e/o mamma che lo avete fatto voi.. basta che postiate le modifiche in questo thread
e naturalmente qualsiasi commento positivo o negativo, suggerimenti o miglioramenti sono tutti ben accetti!! _________________ Linux Registered User n.340423
Linux User Group Ischia
www.tush.it |
|
Back to top |
|
|
Kernel78 Moderator
Joined: 24 Jun 2005 Posts: 3654
|
Posted: Sat Jun 10, 2006 4:05 pm Post subject: |
|
|
Se posso permettermi di fare una critica costruttiva a mio parere per ottenere il tuo obiettivo sarebbe meglio usare knockd.
Con il tuo metodo devi avere un server http sempre attivo (con relativa porta aperta) mentre con knock non risulta nessuna porta aperta fino a quando non "bussi" per farne aprire una. _________________ Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall).
Prima di postare un file togli i commenti con Code: | grep -vE '(^[[:space:]]*($|(#|!|;|//)))' |
|
|
Back to top |
|
|
skakz Guru
Joined: 03 Jul 2004 Posts: 380 Location: Ischia/Napoli/Italia/Terra
|
Posted: Sat Jun 10, 2006 4:39 pm Post subject: |
|
|
si presuppone che il web server non serva solo per quello script.. e cmq non sempre si ha a disposizione un client per fare la "bussata" che sia esso nmap o lo stesso knock..
pensa che questo lo uso anche dal cellulare con miniopera.. mi sembra molto versatile come soluzione... _________________ Linux Registered User n.340423
Linux User Group Ischia
www.tush.it |
|
Back to top |
|
|
neryo Veteran
Joined: 09 Oct 2004 Posts: 1292 Location: Ferrara, Italy, Europe
|
Posted: Sun Jun 11, 2006 12:44 am Post subject: |
|
|
darkdude wrote: | si presuppone che il web server non serva solo per quello script.. e cmq non sempre si ha a disposizione un client per fare la "bussata" che sia esso nmap o lo stesso knock..
pensa che questo lo uso anche dal cellulare con miniopera.. mi sembra molto versatile come soluzione... |
concordo.. poi comunque si potrebbe proteggere il tutto con un login e password creando una sessione.. _________________ cache: a safe place for hiding or storing things..
D-link DWL-G650 AirPlus
Apache Php Mysql |
|
Back to top |
|
|
Kernel78 Moderator
Joined: 24 Jun 2005 Posts: 3654
|
Posted: Sun Jun 11, 2006 9:11 am Post subject: |
|
|
Probabilmente hai ragione, sarà che non mi sono collegato da un pc che non avesse almeno telnet per fare la "bussata" e ormai sono talmente abituato ad usare knock per ogni cosa (anche per abilitarmi il server web ). _________________ Le tre grandi virtù di un programmatore: pigrizia, impazienza e arroganza. (Larry Wall).
Prima di postare un file togli i commenti con Code: | grep -vE '(^[[:space:]]*($|(#|!|;|//)))' |
|
|
Back to top |
|
|
|