Feb 032016
 
Artículo Administración de Servidores

En un sistema accesible por internet, es importante prestar especial atención a la seguridad del mismo. Esto incluye mantener permanentemente actualizados los paquetes software instalados en el sistema, aplicando las últimas actualizaciones y parches de seguridad, tan pronto como están disponibles.

En este artículo se explica la manera de instalar y configurar en un servidor Debian el paquete cron-apt, que puede ser configurado para automatizar completamente esta tarea.

Instalación manual de actualizaciones

En un sistema Debian, la administración y mantenimiento de los paquetes instalados se realiza habitualmente con el comando apt-get de la utilidad APT (Advanced Packaging Tool).

En primer lugar, debemos actualizar la copia local de la lista de paquetes disponibles en las distintas fuentes configuradas en “/etc/apt/sources.list”. Para ello, ejecutamos el comando “apt-get update”:

# apt-get update
Get:1 http://security.debian.org jessie/updates InRelease [63.1 kB]
...                          
Hit http://ftp.debian.org jessie/main Translation-en                  
Fetched 372 kB in 4s (87.0 kB/s)                                      
Reading package lists... Done
#

A continuación, con el comando “apt-get upgrade” realizamos la actualización de todos los paquetes para los cuales existe una versión más reciente. Nos puede interesar utilizar primero la opción “-d” (“–download-only”), para descargar las actualizaciones, sin realizar la instalación de las mismas:

# apt-get -d upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  libgssapi-krb5-2 libk5crypto3 libkrb5-3 libkrb5support0
4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/708 kB of archives.
After this operation, 2,048 B of additional disk space will be used.
Do you want to continue [Y/n]? 
Download complete and in download only mode
#

En este ejemplo, hay cuatro paquetes en el sistema que pueden ser actualizados. Por otra parte, vemos que apt-get solicita una confirmación antes de realizar la actualización (o descarga) de los paquetes. Esta solicitud de confirmación puede ser evitada añadiendo al comando la opción “-y”.

después de revisar la lista de paquetes a actualizar, procedemos a realizar la instalación de los mismos, utilizando el mismo comando sin la opción “-d”:

# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  libgssapi-krb5-2 libk5crypto3 libkrb5-3 libkrb5support0
4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/708 kB of archives.
After this operation, 2,048 B of additional disk space will be used.
Do you want to continue? [Y/n]
Reading database ... 37971 files and directories currently installed.)
...
#

Instalación de cron-apt

El paquete cron-apt automatiza la actualización de paquetes, ejecutando periódicamente los distintos comandos “apt-get” necesarios para descargar e instalar los paquetes.

cron-apt se instala sencillamente con el comando apt-get:

$ sudo apt-get install cron-apt
Preparing to unpack .../cron-apt_0.9.2_all.deb ...
Unpacking cron-apt (0.9.2) ...
Processing triggers for man-db (2.7.0.2-5) ...
Setting up cron-apt (0.9.2) ...
$

La instalación crea un fichero /etc/cron.d/cron-apt, con la configuración adecuada para ejecutar la utilidad cron-apt diariamente, a las 4:00 a.m.:

#
# Regular cron jobs for the cron-apt package
#
# Every night at 4 o'clock.
0 4	* * *	root	test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt
# Every hour.
# 0 *	* * *	root	test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt /etc/cron-apt/config2
# Every five minutes.
# */5 *	* * *	root	test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt /etc/cron-apt/config2

Como vemos, también hay dos entradas para ejecutar cron-apt con una configuración alternativa “/etc/cron-apt/config2”, cada hora o cada cinco minutos, aunque inicialemente están comentadas.

La configuración de cron-apt se encuentra en el fichero “/etc/cron-apt/config”, que en la instalación por defecto está vacío. Habitualmente, añadiremos a este fichero las directrices para indicar el tipo de salida que queremos que se genere, y la dirección de correo del destinatario:

MAILON="output"
DEBUG="verbose"
MAILTO="dirección-de-email-del-administrador"

También se crea un directorio “/etc/cron-apt/config.d”, que inicialmente está vacío. Por otra parte, hay un directorio “/etc/cron-apt/action.d”, con dos ficheros “0-update” y “3-download” estos ficheros contienen las opciones que serán pasadas al comando “apt-get” en las llamadas realizadas por “cron-apt”:

/etc/cron-apt/action.d/0-update

update -o quiet=2

/etc/cron-apt/action.d/3-download

autoclean -y
upgrade -d -y -o APT::Get::Show-Upgraded=true

Con esta configuración, cron-apt realizará una actualización de la lista local de paquetes, y descargará aquellos paquetes para lo cuales esté disponible una versión más reciente, pero no realizará la instalación de los mismos. Por último, enviará un email con la lista de paquetes preparados para su actualización.

Ejemplo de email enviado por cron-apt:

CRON-APT RUN [/etc/cron-apt/config]: Sun Feb  7 13:02:23 CET 2016
CRON-APT ACTION: 3-download
CRON-APT LINE: /usr/bin/apt-get -o quiet=1 autoclean -y
Reading package lists...
Building dependency tree...
Reading state information...
CRON-APT LINE: /usr/bin/apt-get -o quiet=1 dist-upgrade -d -y -o APT::Get::Show-Upgraded=true
Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
  libsctp1 lksctp-tools
The following packages will be upgraded:
  icedtea-7-jre-cacao icedtea-7-jre-jamvm krb5-locales krb5-multidev
  libgssapi-krb5-2 libgssrpc4 libk5crypto3 libkadm5clnt-mit8 libkadm5srv-mit8
  libkdb5-6 libkrb5-3 libkrb5-dev libkrb5support0 openjdk-7-jdk openjdk-7-jre
  openjdk-7-jre-headless
16 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/61.6 MB of archives.
After this operation, 1853 kB disk space will be freed.
Download complete and in download only mode

Configuración de cron-apt para automatizar la instalación de actualizaciones de seguridad

En general, es buena idea continuar realizando las instalaciones de paquetes manualmente. De este modo, el administrador puede responder a cualquier solicitud de información o mensaje de error que pudiera producirse durante la instalación.

Pero también es conveniente realizar las actualizaciones de seguridad tan pronto como estén disponibles. El paquete cron-apt permite realizar una instalación automatizada para este tipo de actualizaciones.

Para ello, crearemos un fichero “/etc/cron-apt/security.sources.list”, y copiaremos a este fichero todas las entradas ‘security’ que aparezcan en el fichero de configuración /etc/apt/sources.list:

#
# Apt sources.list limitado a actualizaciones de seguridad para cron-apt
#
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free

Por último, crearemos un fichero /etc/cron-apt/action.d/2-upgrade con el siguiente contenido:

upgrade -u -y -o quiet=1 -o APT::Get::List-Cleanup=0 -o Dir::Etc::SourceList=/etc/cron-apt/security.so
urces.list -o Dir::Etc::SourceParts="/dev/null"

Y eso es todo!

Referencias

 Publicado por en 9:28 am

 Deja un comentario

(requerido)

(requerido)