View previous topic :: View next topic |
Author |
Message |
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Sun Jun 13, 2004 10:10 pm Post subject: [Tip] Chrootare mldonkey |
|
|
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
https://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
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à! ) _________________ Any mans death diminishes me, because I am involved in Mankinde; 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 |
|
|
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Sun Jun 13, 2004 10:50 pm Post subject: |
|
|
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 |
|
|
federico Advocate
Joined: 18 Feb 2003 Posts: 3272 Location: Italy, Milano
|
|
Back to top |
|
|
tocas Apprentice
Joined: 01 Jan 2004 Posts: 280 Location: 43°50'-10°27'
|
Posted: Sun Feb 27, 2005 6:20 pm Post subject: |
|
|
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 |
|
|
tocas Apprentice
Joined: 01 Jan 2004 Posts: 280 Location: 43°50'-10°27'
|
Posted: Wed Mar 02, 2005 7:43 am Post subject: |
|
|
--- |
|
Back to top |
|
|
Cazzantonio Bodhisattva
Joined: 20 Mar 2004 Posts: 4514 Location: Somewere around the world
|
Posted: Sun Dec 02, 2007 3:48 pm Post subject: |
|
|
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 mans death diminishes me, because I am involved in Mankinde; and therefore never send to know for whom the bell tolls; It tolls for thee.
-John Donne |
|
Back to top |
|
|
|