Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[tool] controllare avvio e stop degli script rc da remoto
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  
Author Message
skakz
Guru
Guru


Joined: 03 Jul 2004
Posts: 380
Location: Ischia/Napoli/Italia/Terra

PostPosted: Sat Jun 10, 2006 3:13 pm    Post subject: [tool] controllare avvio e stop degli script rc da remoto Reply with quote

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 :cry: )

qui potete vedere il risultato finale!

quello di cui avete bisogno è un qualsiasi httpd server che supporti php, sudo e gentoo naturalmente :D

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.. :roll: 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 :lol:
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
View user's profile Send private message
Kernel78
Moderator
Moderator


Joined: 24 Jun 2005
Posts: 3654

PostPosted: Sat Jun 10, 2006 4:05 pm    Post subject: Reply with quote

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
View user's profile Send private message
skakz
Guru
Guru


Joined: 03 Jul 2004
Posts: 380
Location: Ischia/Napoli/Italia/Terra

PostPosted: Sat Jun 10, 2006 4:39 pm    Post subject: Reply with quote

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
View user's profile Send private message
neryo
Veteran
Veteran


Joined: 09 Oct 2004
Posts: 1292
Location: Ferrara, Italy, Europe

PostPosted: Sun Jun 11, 2006 12:44 am    Post subject: Reply with quote

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
View user's profile Send private message
Kernel78
Moderator
Moderator


Joined: 24 Jun 2005
Posts: 3654

PostPosted: Sun Jun 11, 2006 9:11 am    Post subject: Reply with quote

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 :wink: ).
_________________
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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum