Custom kernel en servidores Linode

Custom kernel en servidores Linode

Uno de los problemas que me he encontrado con los servidores de Linode, es que en todas la distribuciones de GNU/Linux que te ofrecen viene con kernel custom realizado por ellos, los cuales desactivan algunas caracteristicas y/o modulos como AppArmor.

Asi que el primer post en mi blog sera como compilar el último kernel disponible en kernel.org; como activar el apparmor y como modificar maquina virtual inicie con este nuevo kernel.

Para esto me base en la guia disponible en Linode.

  • Instalamos los paquete necesarios para compilar nuestro custom kernel.
apt-get update && apt-get upgrade
apt-get install -y build-essential libncurses5-dev gcc libssl-dev grub2 bc

Cuando instalemos el grub2 aparecera una pantalla, en la cual no pide indicar en cual disco duro se instalara el paquete. Seleccionamos nuestro disco primario, como en este caso es /dev/sda.

  • Bajamos la ultima versión estable del kernel
cd /usr/src
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.8.tar.xz
  • Descomprimimos el archivo
tar -xvf linux-4.9.8.tar.xz
cd linux-4.9.8
  • Creamos un archivo de configuración apartir del kernel instalado
zcat /proc/config.gz > .config
make oldconfig

Hay que tomar en cuenta cuando ejecutamos make oldconfig nos pedira respuesta a nuevas caracteristica no presentes en el actual kernel, como podemos observar en la siguiente captura.

  • Ahora entraremos al menuconfig para activar los modulos que necesitemos, en nuestro caso es el apparmor.
make menuconfig

Activamos la opciones de:

y por ultimo establecemos que el modulo de apparmor sera por defecto el sistema de seguridad.

Estas tres opciones se encuentras bajo el menu de Security options.

  • Procedemos a compilar el kernel con el apparmor ya activado.
make -j2 bzImage
make modules
make
make modules_install
make install
  • Editamos el archivo /etc/default/grub, al cual tenemos que agregar y/o modificamos las siguientes lineas segun sea necesario.
GRUB_TIMEOUT=10
GRUB_DISABLE_LINUX_UUID=true
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,19200n8"
GRUB_SERIAL_COMMAND="serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1"
GRUB_TERMINAL="serial console"

Es recomentado comentar o eliminar las lineas que contengan GRUB-HIDDEN

  • Actualizamos el bootloader
update-grub
  • Ahora tenemos que entrar a la consola de nuestro servidor virtual en linode y cambiar la forma de inicio.

    • En el dashboard de linode, hacemos click en Edit correspondiente al perfil que tenemos activo para nuestra VM.
    • Bajo Boot Settings hacemos click y seleccionamos grub2
    • Guardamos los cambios

  • Instalamos la utilerias para apparmor
 apt install apparmor-profiles apparmor
  • Comprobamos que apparmor este activado y corriendo
root@localhost:~#  apparmor_status
apparmor module is loaded.
31 profiles are loaded.
8 profiles are in enforce mode.
   /sbin/dhclient
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/chromium-browser/chromium-browser//browser_java
   /usr/lib/chromium-browser/chromium-browser//browser_openjdk
   /usr/lib/chromium-browser/chromium-browser//sanitized_helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/sbin/ntpd
   /usr/sbin/tcpdump
23 profiles are in complain mode.
   /bin/ping
   /sbin/klogd
   /sbin/syslog-ng
   /sbin/syslogd
   /usr/lib/chromium-browser/chromium-browser
   /usr/lib/chromium-browser/chromium-browser//chromium_browser_sandbox
   /usr/lib/chromium-browser/chromium-browser//xdgsettings
   /usr/lib/dovecot/deliver
   /usr/lib/dovecot/dovecot-auth
   /usr/lib/dovecot/imap
   /usr/lib/dovecot/imap-login
   /usr/lib/dovecot/managesieve-login
   /usr/lib/dovecot/pop3
   /usr/lib/dovecot/pop3-login
   /usr/sbin/avahi-daemon
   /usr/sbin/dnsmasq
   /usr/sbin/dovecot
   /usr/sbin/identd
   /usr/sbin/mdnsd
   /usr/sbin/nmbd
   /usr/sbin/nscd
   /usr/sbin/smbd
   /usr/{sbin/traceroute,bin/traceroute.db}
1 processes have profiles defined.
1 processes are in enforce mode.
   /usr/sbin/ntpd (3288) 
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

Y por fin hemos terminado, teniendo nuestra VM corriendo con un kernel custom.