Enjaulando UnrealIRCd, Chroot.
La verdad es que soy algo paranoico respecto a tener servicios cara a internet, por ello todos tienen sus jaulas, y UnrealIRCd no iba a ser menos.
UnrealIRCd tiene una opcion en include/config.h que al menos en teoría debería de autoenjaularse, pero no parece funcionar bien, por lo que he decidido ejaularlo a la antigua.
Para ello a la hora de compilar le defino un directorio temporal (donde quiero mi configuración y binario, /Unreal) y tras compilar y hacer make install, se creará la carpeta /Unreal (ojo, sin los certificados, hay que copiarlos a mano) con el unreal listo para correr, pero como soy una persona dentro de lo normal ordenada, muevo la carpeta de / a /chroot/ircd, quedando /chroot/ircd/Unreal.
El siguiente paso consiste en copiarle las librerías adecuadas a la jaula para que funcione bien el binario. Para ello:
# cd /chroot/ircd; mkdir lib
# ldd /chroot/ircd/Unreal/ircd
linux-gate.so.1 => (0xffffe000)
libcrypt.so.1 => /lib/tls/libcrypt.so.1 (0xa339e000)
libnsl.so.1 => /lib/tls/libnsl.so.1 (0xa3388000)
libdl.so.2 => /lib/tls/libdl.so.2 (0xa3384000)
libc.so.6 => /lib/tls/libc.so.6 (0xa324c000)
/lib/ld-linux.so.2 (0xa33d7000)
# cp /lib/libcrypt.so.1 lib/
.. (seguimos copiando librerías)
# cp /lib/libc.so.6 lib/
Ahora viene el directorio /etc de nuestra jaula. Para ello he creado en mi sistema el usuario ircd y creado en /chroot/ircd/etc sendos archivos passwd con solamente la linea de usuario ircd y group con la linea de grupo para posteriores permisos. También he copiado los archivos localtime y resolv.conf desde /etc a /chroot/ircd/etc.
Por último, es necesario para el correcto funcionamiento de UnrealIRCd (al menos con soporte ssl) el dispositivo /dev/urandom:
# mkdir dev; cd dev
# mknod -m 0644 /chroot/ircd/dev/urandom c 1 9
Con todo esto la jaula ya debería de estar preparada para ser lanzada. No hay que olvidarse de configurar correctamente el unrealircd.conf ni de los permisos:
# chown -R ircd:ircd /chroot/ircd
Para correr el ircd, yo recomiendo usar chrootuid, que es como chroot pero que rueda el programa deseado como un usuario específico:
# chrootuid /chroot/ircd ircd /Unreal/ircd
Si todo funciona correctamente el UnrealIRCd ya debería de estar corriendo perfectamente enjaulado.