# Controllo demoni via dialog

## silian87

Questo script che ho fatto oggi, vi fa controllare i demoni di sitema. Provatela e sappiatemi dire  :Very Happy: 

```

#!/bin/sh

#####################################################################

# Author:  Silian Della Ragione                                     

# Company: Marentax                                                 

# Links:   http://utenti.lycos.it/marentaxstudio                    

#          http://utenti.lycos.it/marentaxdevelop                  

# License: GNU/GPL                                                  

# Program: Marentax daemon control                             

# Version: 0.1 (unstable)                                           

# Notes:   Edit the DAEMONS_PATH, the DAEMONS_NUMBER and daemons    

#          names before running this script.                        

#          You have to run this program as root.                    

#####################################################################

###################Edit paths and daemons names########################################

DAEMONS_PATH="/etc/init.d"                                                      

DAEMONS_NUMBER=5

DAEMON[0]="apache2" DESCRIPTION[0]="The apache web server"             VALUE[0]="on"  

DAEMON[1]="mysql"   DESCRIPTION[1]="The mysql database engine"         VALUE[1]="on"  

DAEMON[2]="nessusd"  DESCRIPTION[2]="Nessus port scan daemon"           VALUE[2]="off"  

DAEMON[3]="oftpd"   DESCRIPTION[3]="An anonimous ftp server"           VALUE[3]="off"  

DAEMON[4]="sshd"    DESCRIPTION[4]="A secure shell connection daemon" VALUE[4]="off"  

#######################################################################################

select1=`tempfile`

select2=`tempfile`

while [ "$cont" != "1" ]; 

do

   

   dialog --clear --title "Marentax daemon control 0.1" \

   --menu "Select the action" \

   0 0 0 \

   start "start the daemon" \

   stop "stop the daemon" \

   status "show the daemon status" \

   restart "restart the daemon" \

   reload  "reload the daemon" \

   zap "kill a zombie daemon" 2> $select1

   action=(`cat $select1`)

   dialog --clear --separate-output --title "Marentax daemon control 0.1" \

   --checklist "Select the daemon" \

   0 0 0 \

   ${DAEMON[0]} "${DESCRIPTION[0]}" ${VALUE[0]} \

   ${DAEMON[1]} "${DESCRIPTION[1]}" ${VALUE[1]} \

   ${DAEMON[2]} "${DESCRIPTION[2]}" ${VALUE[2]} \

   ${DAEMON[3]} "${DESCRIPTION[3]}" ${VALUE[3]} \

   ${DAEMON[4]} "${DESCRIPTION[4]}" ${VALUE[4]} 2> $select2

   

   i=0

   while [ $i -lt $DAEMONS_NUMBER ]; 

   do

      daemon=(`grep ${DAEMON[$i]} $select2`)

      if [ "$daemon" != "" ]

      then

         echo

         echo "$daemon: "

         $DAEMONS_PATH/$daemon $action

      fi

      let i=i+1

   done

   echo

   read -p "Press enter to continue, type 1 to close the program: " cont

done
```

----------

## alexbr

Fico!!!

sarebbe bello se avesse il riconoscimento automatico dei demoni   :Cool:  ... e se funzionasse anche sulla mia slackware  :Cool: 

----------

## silian87

Come mi hai proposto (prima proposta), ho provato a fare il riconoscimento dei demoni, ma ci ho messo molto e ci sono ancora dei problemi. Ho fatto anche una maschera per "filtrare" i demoni che non si vogliono visualizzare. Purtroppo ci dev'essere un problema in un ciclo. 

Non e' che qualcune potrebbe darci un occhio???

```

#!/bin/sh

#####################################################################

# Author:  Silian Della Ragione                                     #

# Company: Marentax                                                 #

# Links:   http://utenti.lycos.it/marentaxstudio                    #

#          http://utenti.lycos.it/marentaxdevelop                   #

# License: GNU/GPL                                                  #

# Program: Marentax daemon control                                  #

# Version: 0.1.1 (unstable)                                         #

# Notes:   Edit the DAEMONS_PATH, the DAEMONS_NUMBER and daemons    #

#          names before running this script.                        #

#          You have to run this program as root.                    #

#####################################################################

################################################################################################

DAEMONS_PATH="/etc/init.d"  

#Use new daemons find tool...

FIND_DAEMONS="on"

EXCLUDE_LIST="on"

EXCLUDES_NUMBER=46

EXCLUDE=( "alsasound" "bootmisc" "checkfs" "checkroot" "clock" "consolefont" "crypto-loop"    \

          "dcron" "depscan.sh" "dhcp" "domainname" "esound" "fam" "functions.sh" "halt.sh"    \

     "hdparm" "hostname" "iptables" "keymaps"  "local" "localmount" "metalog" "modules"   \

     "net.eth0" "net.lo" "net.ppp0" "netmount" "nscd" "numlock" "portmap" "reboot.sh"    \

     "rmnologin" "rsyncd" "runscript.sh" "samba" "serial" "shutdown.sh" "slapd" "slurpd" \

     "switch" "urandom" "winbind" "xdm" "xfs" "xinetd" "mysql" )

#...or edit daemons list manually                                                    

DAEMONS_NUMBER=5

DAEMON[0]="apache2" DESCRIPTION[0]="The apache web server"             VALUE[0]="on"  

DAEMON[1]="mysql"   DESCRIPTION[1]="The mysql database engine"         VALUE[1]="on"  

DAEMON[2]="nessusd" DESCRIPTION[2]="Nessus port scan daemon"           VALUE[2]="off"  

DAEMON[3]="oftpd"   DESCRIPTION[3]="An anonimous ftp server"           VALUE[3]="off"  

DAEMON[4]="sshd"    DESCRIPTION[4]="A secure shell connection daemon"  VALUE[4]="off"  

################################################################################################

select1=`tempfile`

select2=`tempfile`

t1=`tempfile`

if [ "$FIND_DAEMONS" = "on" ]

then

   files=`ls $DAEMONS_PATH/`

   ls $DAEMONS_PATH > $t1

   if [ "$EXCLUDE_LIST" = "on" ]

   then

      i2=0

      while [ $i2 -lt $EXCLUDES_NUMBER ];

      do

         if [ "`grep $EXCLUDE[$i2] $t1`" != " " ]

    then

       files=${files/"${EXCLUDE[$i2]}"/ " "}

    fi

    let i2=i2+1

      done

      echo "I recognized these daemons: "$files

    fi

#################Here I have a problem###############################

      i3=0

      is_finish="0"

      old_pass=""

      old_files=""

      while [ "$is_finish" = "0" ];

      do

         s_end=`expr index "$files" " "`

         pass=`expr substr "$files" "1" "$s_end"`

    if [ "$pass" != "$old_pass" ];

    then

       files=${files/"$pass"/""}

       #echo $files

       DAEMON[$i3]=$pass

       if [ "$pass" != "" ] 

       then

          let i3=i3+1

       fi

       echo "${DAEMON[$i3]}"

       echo $i3

       #let i3=i3+1

            old_pass=$pass

       old_files=$files

    else

       is_finish="1"

       echo "finish!"

    fi

      done 

   read

fi

#######################################################################

cont="0"

while [ "$cont" != "1" ]; 

do

   

   dialog --clear --title "Marentax daemon control 0.1.1" \

   --menu "Select the action" \

   0 0 0 \

   start "start the daemon" \

   stop "stop the daemon" \

   status "show the daemon status" \

   restart "restart the daemon" \

   reload  "reload the daemon" \

   zap "kill a zombie daemon" 2> $select1

   action=(`cat $select1`)

   dialog --clear --separate-output --title "Marentax daemon control 0.1.1" \

   --checklist "Select the daemon" \

   0 0 0 \

   ${DAEMON[0]} "${DESCRIPTION[0]}" ${VALUE[0]} \

   ${DAEMON[1]} "${DESCRIPTION[1]}" ${VALUE[1]} \

   ${DAEMON[2]} "${DESCRIPTION[2]}" ${VALUE[2]} \

   ${DAEMON[3]} "${DESCRIPTION[3]}" ${VALUE[3]} \

   ${DAEMON[4]} "${DESCRIPTION[4]}" ${VALUE[4]} 2> $select2

   

   i=0

   while [ $i -lt $DAEMONS_NUMBER ]; 

   do

      daemon=(`grep ${DAEMON[$i]} $select2`)

      if [ "$daemon" != "" ]

      then

         echo

         echo "$daemon: "

         $DAEMONS_PATH/$daemon $action

      fi

      let i=i+1

   done

   echo

   read -p "Press enter to continue, type 1 to close the program: " cont

done

```

Come potete vedere si e' ingrandito un po... Non funziona a dovere anche perche' ci ho messo un po' di "echo" qua e la per monitorare le variabili, e poi il menu non e' ancora predisposto per questo riconoscimento automatico...

----------

## silian87

Allora, sono giunto ad un buon punto... vi posto qui i links per i 2 script che ho fatto con i relativi changelogs. Per ora sono ancora abbastanza statici, ma mi sto impegnando per migliorarli.

Versione Sysv (gentoo ad esempio): http://utenti.lycos.it/marentaxdevelop/programmi/script_bash/mdc-sysv/unstable/mdc-sysv-012.sh

Change log: http://utenti.lycos.it/marentaxdevelop/programmi/script_bash/mdc-sysv/ChangeLog-sysv.txt

Versione *bsd (ad esempio slackware): http://utenti.lycos.it/marentaxdevelop/programmi/script_bash/mdc-bsd/stable/mdc-bsd-012.sh

Change log: http://utenti.lycos.it/marentaxdevelop/programmi/script_bash/mdc-bsd/ChangeLog-bsd-txt

La versione per *BSD e' un port, ma funziona benissimo, fatemi sapere!   :Very Happy: 

----------

## silian87

Ecco, ho risolto alcuni bug abbastanza fastidiosi.: http://utenti.lycos.it/marentaxdevelop/programmi/script_bash  :Very Happy: 

----------

## silian87

Sono giunto alla versione 0.2.0. Questa vesrione include (finalmente) l'autoriconoscimento dei demoni presenti sul sitema. Ho incluso uno script di installazione ed uno di disinstallazione. Non servira' piu' modificare lo script a mano. Funziona molto bene, specie quella per sysv (come gentoo). Quella per bsd-style ha ancora qualche problemino.

Qui c'e' il tar.gz: http://utenti.lycos.it/marentaxdevelop/programmi/script_bash/mdc-0.2.0.tar.gz

E qui il ChangeLog:

http://utenti.lycos.it/marentaxdevelop/programmi/script_bash/ChangeLog.txt

Fatemi sapere.

----------

## morellik

 *silian87 wrote:*   

> Sono giunto alla versione 0.2.0. Questa vesrione include (finalmente) l'autoriconoscimento dei demoni presenti sul sitema. Ho incluso uno script di installazione ed uno di disinstallazione. Non servira' piu' modificare lo script a mano. Funziona molto bene, specie quella per sysv (come gentoo). Quella per bsd-style ha ancora qualche problemino.
> 
> Qui c'e' il tar.gz: http://utenti.lycos.it/marentaxdevelop/programmi/script_bash/mdc-0.2.0.tar.gz
> 
> E qui il ChangeLog:
> ...

 

L'ho appena provato e mi ha bloccato la macchina   :Sad: 

Ho selezionato tutti i demoni presenti nella lista.

Poi ho selezionato status. Ho ricevuto diversi messaggi del tipo:

/etc/init.d/halt.sh: line 19: ebegin: command not found

/etc/init.d/halt.sh: lone 21: eend: command not found

e magicamente mi si e' bloccato il tutto.

Sicuramente ho fatto qualche fregnaccia nella fretta di provarlo.

Ciauz

morellik

----------

## silian87

Il fatto e' che non ho ancora fatto un filtro "contro" i file .sh. Quindi basta che nella lista includi quei file di cui sei sicuro che siano script. In poche parole la lista e' il completo contenuto di /etc/init.d, quindi se c'e' quaolcosa che non e' un demone il programma non lo puo' sapere. Prova includendo apache mysql cupsd gpm sshd, quelli sono demoni e vanno di sicuro.   :Smile: 

----------

## silian87

Si, ora sono sicuro che il problema era quello. Infatti anche io se metto scritp .sh mi da lo stesso errore. Invece se metto solo quello che so di percerto che e' un demone il problema non si verifica. Non avevo tolto gli sh perche' con la slackware che usa bsd-style, i demoni  (o meglio gli script che li cmandavano) erano delgi script, e potevano anche avere l'setensione sh. Vedro' di fare un filtro, appunto.

----------

## neon

piccolo consiglio... gli script iniziano con:

```
#!/sbin/runscript
```

 :Wink: 

----------

## silian87

Ok.... grazie del consiglio, credo che con un grep posso cavarmela. Sai se e' lo stesso per distribuzioni come fedoa, mandrake o per il sistema bsd-style di slackware? Perche' questo script non e' solo per gentoo.

----------

## silian87

Qualcuno che ha la mandrake potrebbe dirmi l'output del comando:

/etc/init.d/<demone-attivo> status

e anche di:

/etc/init.d/<demone-non_attivo> status

Il problema e' che sulla gentoo il mio script funziona perche' dall'output del comando mi dice started o stopped, mantre sulla fedora o su vector, mi sono accorto che mi dice il PID del processo, rendendo tutto incomptibile con il mio script. Probabilmente dovro' fare delle modifiche.

(anche se qualcuno ha la debina e pu' fare lo stesso, grazie)

----------

## silian87

Allora, ho fatto una nuova versione con meno bug e funzionante su Slackware, Vector e Gentoo, per ora. Devo ancora testarla su Debian.

ora fa controllo sull'utente in uso e riconosce se un file e' uno script se la sua prima riga e' #!/sbin/runscript

http://utenti.lycos.it/marentaxdevelop/index.php?page=getfile&id=14

E questa la pagina del progetto:

http://utenti.lycos.it/marentaxdevelop/?page=prj&id=4

----------

