Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Tip] Chrootare mldonkey
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
Cazzantonio
Bodhisattva
Bodhisattva


Joined: 20 Mar 2004
Posts: 4477
Location: In giro

PostPosted: Sun Jun 13, 2004 10:10 pm    Post subject: [Tip] Chrootare mldonkey Reply with quote

A giro per i forum si raccattano diversi script carini
Uno di questi in particolare è parecchio utile per aumentare la sicurezza quando si vadano a lanciare dei demoni che fanno uso intensivo della nostra rete

Questo script che ho raccattato qui
http://forums.gentoo.org/viewtopic.php?t=114572&highlight=chroot+mldonkey
ma che posto nella sua interezza per comodità, serve per lanciare mldonkey in una prigione chroot da cui non abbia accesso a nessun servizio e nessuna directory diversa da quelle strettamente necessarie
Code:

#!/usr/bin/python
import os, sys
MLDONKEY_HOME='/home/mldonkey/chroot/2.5.21/'
MLDONKEY_EXE='./mlnet'
MLDONKEY_UID=1003
MLDONKEY_GID=1003
MLDONKEY_NICE=18
if os.fork():
        sys.exit()
os.close(sys.stdout.fileno())
os.close(sys.stderr.fileno())
sys.stdout.close()
sys.stderr.close()
sys.stdout = file('/dev/null','w')
sys.stderr = file('/dev/null','w')
os.nice(MLDONKEY_NICE)
os.chdir(MLDONKEY_HOME)
os.chroot(MLDONKEY_HOME)
os.setgroups([])
os.setregid(MLDONKEY_UID,MLDONKEY_UID)
os.setreuid(MLDONKEY_GID,MLDONKEY_GID)
os.setsid()
os.execl(MLDONKEY_EXE,MLDONKEY_EXE)

sostituite MLDONKEY_HOME con la directory dove tenete il programma mldonkey e MLDONKEY_UID e GID con l'uid e il gid (numerici) dell'utente con i permessi del quale viaggerà il nostro demone mlnet
Suggerisco caldamente di compilare a mano in una directory di preferenza il programma in questione piuttosto che emergerlo dal portage, che in questo frangente si comporta in maniera molto maleducata permettendosi di creare utenti e gruppi senza il mio esplicito consenso (questa è una cosa di portage che proprio non mi piace)
Infine è raccomandabile mettere le directory "incoming", temp, shared e compagnia bella tutte all'interno della prigione chrootin modo che il programma non punti a directory fuori dal nuovo albero delle dir (e ricordatevi che in downloads.ini gli indirizzi delle directory devono essere coerenti con il nuovo albero in cui gira il demone)
Per far funzionare lo scriptino è fondamentale eliminare le righe run_as_user = *** e run_as_useruid = *** dal file downloads.ini a meno che non vogliate ricreare tutti i file concernenti gli utenti e i gruppi all'interno della prigione chroot

Chiaramente lo script va lanciato come utente root (è l'unico che può chrootare, altrimenti non servirebbe a nulla), ma potete metterlo nell'avvio automatico al boot per ovviare a questa seccatura (se invece non avete accesso root sul sistema non ci potete fare proprio nulla)

In questa maniera l'utilizzo di questo stupendo programma di file sharing è considerevolmente più sicuro di prima 8)

Ho voluto fare questo post perchè magari a molti l'idea non era venuta in mente e mi pareva giusto fare pubblicità a questo script (e poi si aumenta la sicurezza generale dei pc degli utenti Gentoo... tutta pubblicità! :D )
_________________
Any man's death diminishes me, because I am involved in mankind, and therefore never send to know for whom the bell tolls; it tolls for thee
-John Donne


Last edited by Cazzantonio on Mon Jun 14, 2004 7:54 am; edited 1 time in total
Back to top
View user's profile Send private message
FonderiaDigitale
Veteran
Veteran


Joined: 06 Nov 2003
Posts: 1710
Location: Rome, Italy

PostPosted: Sun Jun 13, 2004 10:50 pm    Post subject: Reply with quote

carino.. magari aggiungi [TIP] o [HowTo] al topic
_________________
Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica :)
Back to top
View user's profile Send private message
federico
Advocate
Advocate


Joined: 18 Feb 2003
Posts: 3270
Location: Italy, Milano

PostPosted: Mon Jun 14, 2004 12:49 am    Post subject: Reply with quote

Forte, sulla base di questo forse se ne possono creare alcuni pregevoli..
_________________
Sideralis www.sideralis.org
Pic http://blackman.amicofigo.com/gallery
Arduino http://www.arduino.cc
Chi aveva potuto aveva spaccato
2000 pezzi buttati là
Molti saluti,qualche domanda
Semplice come musica punk
Back to top
View user's profile Send private message
tocas
Apprentice
Apprentice


Joined: 01 Jan 2004
Posts: 280
Location: 43°50'-10°27'

PostPosted: Sun Feb 27, 2005 6:20 pm    Post subject: Reply with quote

Dopo alcuni tentativi falliti seguendo le linee guida che ho trovato qui
http://mldonkey.berlios.de/modules.php?name=Wiki&pagename=Chroot ho adottato lo script in phyton
che ho trovato in questo thread.
Non conoscendo questo linuguaggio adesso mi si pone il problema di come gestire lo start e stop del servizio, è possibile
aggiungere una riga per scrivere il pid in /var/run ?

...non è meglio gestire il chroot di mlnet adottando lo scripting standard di Gentoo come per dhcp e named ?


Antonio


----
Back to top
View user's profile Send private message
tocas
Apprentice
Apprentice


Joined: 01 Jan 2004
Posts: 280
Location: 43°50'-10°27'

PostPosted: Wed Mar 02, 2005 7:43 am    Post subject: Reply with quote

:roll:


---
Back to top
View user's profile Send private message
Cazzantonio
Bodhisattva
Bodhisattva


Joined: 20 Mar 2004
Posts: 4477
Location: In giro

PostPosted: Sun Dec 02, 2007 3:48 pm    Post subject: Reply with quote

Mi è tornato in mente questo vecchio post e volevo aggiornarlo con questo nuovo script.
Si appoggia al comando chrootuid (disponibile in portage) e richiede ovviamente di essere lanciato come root; appena lanciato ci pensa chrootuid a lasciare i privilegi di root e lanciare mldonkey nella jail con i privilegi dell'utente 'mldonkey'
Basta creare un utente 'mldonkey', mettere l'eseguibile (compilato staticamente) mlnet in una directory "/home/mldonkey/chroot/root" e lanciare il seguente script:
mldonkey.sh
Code:
#!/bin/bash

#Path che contiene la directory di chroot di mldonkey (deve chiamarsi molto
#originalmente "chroot").
HOMEPATH=/home/mldonkey

#Impostare il path di default del firewall e le opzioni di start/stop.
#Deve essere un qualche script eseguibile, oppure un comando.
USE_FIREWALL=no
FIREWALL_START="/home/scripts/sbin/muro_di_fuoco p2p"
FIREWALL_STOP="/home/scripts/sbin/muro_di_fuoco default"

#Esegui il controllo md5 su tutti i file nella chroot
CHKCHROOT=no

#Variabile HOME da considerare all'iterno della chroot jail
HOME_JAIL=/root

chkmlnet() {
# Controlla che i files nella chroot non siano stati modificati.
# Controlla l'md5 salvato in $HOMEPATH/md5sum
    if test -f $HOMEPATH/md5sum; then
        for i in `cat $HOMEPATH/md5sum`; do
            MD5SUM1=`echo "$i"|cut -d"*" -f1`
            FILENAME=`echo "$i"|cut -d"*" -f2`
            FILEPATH=$HOMEPATH/$FILENAME
            MD5SUM2=`md5sum $FILEPATH|cut -d" " -f1`

            if test "$MD5SUM1" != "$MD5SUM2"; then
                for i in `pgrep -u mldonkey`; do
                    kill -9 $i
                done
                echo "!!!!!!!! $FILEPATH E' STATO MODIFICATO !!!!!!!!!"
                echo "i processi posseduti dall'utente mldonkey dovrebbero essere morti"
                echo "CONTROLLA!!!"
                exit 1
#           else
#               echo "$FILEPATH non risulta modificato"
            fi
        done
    else
        echo "$HOMEPATH/md5sum" NON ESISTE!
        echo "Devi creare il file che contiene l'md5sum dei file nella jail chroot."
        echo ""
        echo "E' un file di testo in cui ogni riga contiene l'md5sum numerico,"
        echo "un asterisco separatore e il path del file corrispondente a,"
        echo "partire dalla directory di chroot. Ad esempio:"
        echo "30efec5a736b6cb55e1fafda6b35594a*chroot/root/mlnet"
    fi
}

firewall_start() {
# Se il firewall e' attivo apri le porte di mldonkey
    if [ $USE_FIREWALL = yes ]; then
        $FIREWALL_START
    fi
}

firewall_stop() {
# Se il firewall e' attivo allora ripristina la configurazione precedente
    if [ $USE_FIREWALL = yes ]; then
        $FIREWALL_STOP
    fi
}

start_mlnet() {
# Lancia mldonkey nella jail chroot
    if [ "$EUID" = "0" ]; then
        HOME=$HOME_JAIL chrootuid /home/mldonkey/chroot/ mldonkey /root/mlnet &>/dev/null
    else
        HOME=$HOME_JAIL /bin/su - -c `chrootuid /home/mldonkey/chroot/ mldonkey /root/mlnet &>/dev/null`
    fi
}

stop_mlnet() {
# Stoppo mldonkey e tento di ucciderlo se non si chiude spontaneamente
    [ `pgrep -u mldonkey|wc -l` -gt 0 ] && kill `pgrep -u mldonkey`
    sleep 1s
    [ `pgrep -u mldonkey|wc -l` -gt 0 ] && kill -9 `pgrep -u mldonkey`
}

LISTA_PARAMETRI="start stop"
# Lancio la funzione specificata da parametro.
if [ ${#@} -gt 0 ]; then
  if [ ${#@} -gt 1 ]; then
    echo "Too many parameters"
    exit 1
  fi
  if [ `echo $LISTA_PARAMETRI|grep -e $1|wc -l` -gt 0 ]; then
    if [ CHKCHROOT = yes ]; then
        chkmlnet
    fi
    if [ $1 = start ]; then
        firewall_start
        start_mlnet &
    fi
    if [ $1 = stop ]; then
        stop_mlnet
        firewall_stop
    fi
  else
    echo "parametro '$1' sconosciuto"
    echo "Lista dei parametri accettati:"
    echo $LISTA_PARAMETRI
    exit 0
  fi
else
    echo "Lista dei parametri accettati:"
    echo $LISTA_PARAMETRI
    exit 0
fi


Ho fatto anche uno script per fare in automatico l'update delle librerie (poche) nel chroot:
Code:
#!/bin/bash

update() {
  echo "updating $i"
  if [ `ls -l --color=none $CHROOT_PATH$LIB_PATH$i |cut -d">" -f2 -s|wc -l` -gt 0 ]; then
      rm -f $CHROOT_PATH$LIB_PATH`ls -l --color=none $CHROOT_PATH$LIB_PATH$i |cut -d">" -f2|cut -d" " -f2`
      cp -a $LIB_PATH`ls -l --color=none $LIB_PATH$i |cut -d">" -f2|cut -d" " -f2` $CHROOT_PATH/$LIB_PATH
  fi
  rm -f $CHROOT_PATH/$LIB_PATH$i
  cp -a $LIB_PATH$i $CHROOT_PATH/$LIB_PATH/
}

update_mldonkey() {
  echo "Updating mldonkey chroot"
  CHROOT_PATH=/home/mldonkey/chroot
 
  ML_FILES_LIB="ld-linux.so.2 libc.so.6 libnss_dns.so.2 libnss_files.so.2 libresolv.so.2"

  LIB_PATH=/lib/
  for i in $ML_FILES_LIB; do
      update
  done

  if test -f $CHROOT_PATH/../md5sum; then
      for i in `cat $CHROOT_PATH/../md5sum`; do
        cd $CHROOT_PATH/../
        SOMMAMD5=$(md5sum `echo $i|cut -d"*" -f2`|tr -s [:blank:]|sed -e 's/ /*/g')
        echo $SOMMAMD5 >> /tmp/md5sum
      done
      mv /tmp/md5sum $CHROOT_PATH/../
  end if

}

update_mldonkey

nel chroot basta mettere le seguenti librerie:
Code:

chroot/root/mlnet
chroot/etc/passwd
chroot/etc/resolv.conf
chroot/lib/ld-2.6.1.so
chroot/lib/ld-linux.so.2
chroot/lib/libc-2.6.1.so
chroot/lib/libc.so.6
chroot/lib/libnss_dns-2.6.1.so
chroot/lib/libnss_dns.so.2
chroot/lib/libnss_files-2.6.1.so
chroot/lib/libnss_files.so.2
chroot/lib/libresolv-2.6.1.so
chroot/lib/libresolv.so.2
chroot/dev/urandom
chroot/dev/null

più una directory chroot/tmp con i permessi di scrittura per l'utente mldonkey.
Nel file passwd basta solo la riga relativa all'utente mldonkey tipo la seguente:
Code:
mldonkey:x:1003:1003::/:/dev/null

_________________
Any man's death diminishes me, because I am involved in mankind, and therefore never send to know for whom the bell tolls; it tolls for thee
-John Donne
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