Ubuntu dispone del paquete "unattended-upgrades", que usando "cron" y "aptitude" descarga e instala las actualizaciones del sistema de forma automática.
Resulta útil pero tiene algunos problemas como la pérdida de control de las propias actualizaciones. Las actualizaciones se buscan, descargan e instalan de forma desatendida.A continuación se explica como hacer una gestión menos agresiva de las actualizaciones de seguridad en Ubuntu 16.04 Server, manteniendo el control de cuando instalarlas.
Además se permite que el sistema busque las actualizaciones de seguridad, que puede ser útil para avisar al operador (vía correo automático, sistema de monitorización, etc) del número de actualizaciones de seguridad disponibles.
Deshabilitar las actualizaciones automáticas
- En la instalación, Ubuntu pregunta sobre esto. Si se deshabilitaron en aquel momento no es necesario hacer nada más por ahora.
- Comprobar que está instalado el paquete "unattended-upgrades". En caso negativo, instalarlo.
- Editar "/etc/apt/apt.conf.d/10periodic
[...]Nota: Si la linea no existe, no es necesario añadirla. El efecto es el mismo.
APT::Periodic::Unattended-Upgrade "0";
[...]
Permitir que el sistema busque automáticamente las actualizaciones
- Editar "/etc/apt/apt.conf.d/10periodic
[...]Nota: El valor '1' hace referencia a la frecuencia, en días, que se ejecuta la búsqueda. El efecto es similar a ejecutar "apt-get update".
APT::Periodic::Update-Package-Lists "1";
[...]
Bloquear paquetes 'problemáticos'
Algunos paquetes, como el kernel, pueden bloquearse para que no se actualicen mediante procesos automáticos (habrá que actualizarlos manualmente). Para bloquear el kernel:apt-mark hold linux-image-genericNota: Los paquetes marcados con hold no aparecen en la lista de paquetes a actualizar.
apt-mark hold linux-headers-generic
Listar los paquetes con actualizaciones de seguridad pendientes
Existen varias formas de obtener esta información:- Ejecutar:
/usr/lib/update-notifier/apt_check.pyDevuelve una cadena de formato XX;YY, donde XX es el número de actualizaciones totales e YY es el número de actualizaciones de seguridad.
- Ejecutar:
apt-get -s dist-upgrade | grep "^Inst" | grep -i securityAparece una lista de los paquetes con actualizaciones pendientes.
- A partir de aquí se puede elaborar un script como este:
#!/bin/bash
bold=$(tput bold)
normal=$(tput sgr0)
echo "Refrescando lista de paquetes..."
apt-get update
NUMERO_ACTUALIZACIONES=$(apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l)
echo "Actualizaciones de seguridad pendientes: ${bold}$NUMERO_ACTUALIZACIONES${normal}"
echo ""
apt-get -s dist-upgrade | grep "^Inst" | grep -i security
Actualizar los paquetes (solo actualizaciones de seguridad)
Se puede actualizar cada paquete de uno en uno o ejecutar una orden para todos del tipo:apt-get -s dist-upgrade | grep "^Inst" | grep -i security | awk -F " " {'print $2'} | xargs apt-get installO un script un poco más elaborado:
#!/bin/bash
echo "Actualizaciones de seguridad disponibles:"
echo "-----------------------------------------"
apt-get -s dist-upgrade | grep "^Inst" | grep -i security
echo ""
read -r -p "¿Actualizar estos paquetes? [y/N] " response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]
then
echo "Actualizar..."
apt-get -s dist-upgrade | grep "^Inst" | grep -i security | awk -F " " {'print $2'} | xargs apt-get install
else
echo "No Actualizar"
fi
if [ -f /var/run/reboot-required ]; then
echo ""
echo "Reboot is Required!!!!"
fi
echo ""
echo "Es posible que deja ejecutar apt autoclean para eliminar paquetes antiguos"
Últimos detalles (posible reinicio y limpieza)
Cuando se actualizan paquetes que requieren o recomiendan el reinicio de la máquina, se genera el archivo vacío/var/run/reboot-requiredPara eliminar las cachés de paquetes descargados y liberar espacio en disco se puede ejecutar:
apt-get autoclean