Con la salida de Radio Ranchito (http://radio.zombies.com.mx) y el nuevo servidor Zombie “Avalon”, se vio la necesidad de instalar el servicio de SHOUTcast con algo de seguridad, para lo cual se uso la técnica de enjaulamiento (chroot) y como ejecutarlo con privilegios de mortal.
No soy muy bueno escribiendo manuales, asà que pondré solamente la lista de comandos en orden y algunos comentarios sencillos de que es lo que hace.
# Agregamos un usuario que ejecute el servicio.
useradd whatever
# Creamos una nueva estructura de raiz
mkdir -p /shoutjail/{bin,etc,lib,usr,var,tmp,dev}
mkdir -p /shoutjail/etc/shoutcast
# Para evitar que poner dobles archivos.
ln -s /shoutjail/bin /shoutjail/usr/bin
ln -s /shoutjail/lib /shoutjail/usr/lib
# Permisos
chown -R root.root /shoutjail
chmod -R 0755 /shoutjail
chmod 1777 /shoutjail/tmp
# Ahora necesitamos que el usuario con el que se ejecutará el servicio pueda ejecutar chroot sin tener que usar password de root, asà que para esto agregaremos una linea en el archivo /etc/sudoers con el comando “visudo”, la cual permitira al usuario ejecutar chroot y solo chroot.
visudo
# Dentro de /etc/sudoers
whatever ALL=NOPASSWD: /usr/sbin/chroot
# Librerias que usa el servicio shoutcast
ldd sc_serv
# Mas archivos utilizados por la aplicación.
strace -o sc_serv.strace -v -f -r -e trace=open -tt ./sc_serv
# La siguiente linea también se puede emplear con “fgrep -i open sc_serv.strace” para mostrar todos los archivos a los que accesa la aplicación.
fgrep \.so sc_serv.strace
# Agregamos el binario de sudo al jail pero sin la función de PAM, para esto descargamos el paquete y lo compilamos.
http://www.sudo.ws/sudo/dist/sudo.tar.gz
./configure
make
cp sudo /shoutjail/bin/sudo
# Librerias necesarias para “sudo”
ldd /shoutjail/bin/sudo
# Mas archivos.
strace -o sudo.strace -v -f -r -e trace=open -tt ./sudo -u whatever /bin/bash
fgrep \.so sudo.strace
# Con la siguiente lista de librerias es suficiente para ejecutar el comando “sudo”, si estas librerias faltan, al ejecutar sudo mostrara que no hay ningun usuario con UID 0 o algo asÃ.
cp /lib/libnss_files.so.2 /shoutjail/lib/
cp /lib/libnss_compat.so.2 /shoutjail/lib/
cp /lib/libnss_nis.so.2 /shoutjail/lib/
# sudoers File
cp /etc/sudoers /shoutjail/etc/sudoers
# Solo dejamos en el archivo.
root ALL=(ALL) ALL
# Copiamos /etc/passwd a /shoutjail/etc/passwd donde solo dejamos el usuario y root para ejecutar el servicio.
root:x:0:0:root
whatever:x:100:100:whatever:/home/whatever:/bin/bash
# Creamos /dev/nul
mknod null c 1 3
# Iniciando el servicio
# Ya sea como root
chroot /shoutjail /bin/sudo -u whatever bin/sc_serv /etc/sc_serv.conf
# O usuario mortal whatever.
sudo chroot /shoutjail /bin/sudo -u whatever bin/sc_serv /etc/sc_serv.conf
# Por ahi me encontre unos comandos para copiar las librerias necesrias de un archivo ejecutable, pero no las implemente, de cualquier forma las dejo para que lo prueben.
ldd /bin/su | awk '{ print $3; }' | sed 's/\(\/.*\/\(.*\)\)/\1 \2/g' - | xargs -l1 --no-run-if-empty cp
Bueno, con esto será suficiente para enjaular el servicio de SHOUTcast y con acceso de mortal. Si existe alguna duda, comentario, sugerencia, aclaración, no dudes en hacerla llegar mediante el sistema comentarios y asà yo implementarla en esta mini-guia.
Entradas (RSS)
[...] después de haber hecho el articulo de “Chrooting SHOUTcast“, he decido publicar el script de inicio que uso para ejecutar el servicio, este se divide en [...]
hi
thank you for this howto, it was vrey helpfull to begin chrooting shoutcast. it seems so, that was successfull.
i send you a virtual mug of beer :D
C|_|