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.

2 Respuestas a “Chrooting SHOUTcast”
  1. [...] 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 [...]

  2. 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|_|

Deja una Respuesta