Actualizaciones de seguridad de Ubuntu Server en el correo
Acabo de terminar un script realizado en Python que comprueba actualizaciones de seguridad para Ubuntu Server y en caso de que tener instalado algún paquete, se enviará un mail a la dirección de correo indicada. Este script está pensado principalmente para administradores de sistemas, que como yo, no están dedicados a esta tarea y no disponen de mucho tiempo.
El equipo de Ubuntu utiliza un RSS para publicar las actualizaciones de seguridad, http://www.ubuntu.com/usn/rss.xml. Así que el script se conecta, parsea las entradas del RSS, selecciona los paquetes que son específicos para la versión de Ubuntu instalada, se comprueba si el paquete está instalado y se envía un mail con el listado de paquetes.
import feedparser
import lsb_release
import smtplib
import subprocess
from BeautifulSoup import BeautifulSoup
MAIL_SERVER = 'mail.example.com
MAIL_FROM = 'user@example.com'
MAIL_USER = 'user@example.com'
MAIL_PASSWORD = 'mypassword'
MAIL_TO = 'admin@example.com'
MAIL_MSG = '''\
From: %s
Subject: [Security updates]
%s
'''
distinfo = lsb_release.get_distro_information()
RELEASE = distinfo.get('RELEASE', 'n/a')
d = feedparser.parse('http://www.ubuntu.com/usn/rss.xml')
updates = ''
# TODO: La ultima fecha conocida
for entry in d['entries']:
soup = BeautifulSoup(entry['summary'])
dl = soup.find('dl')
dt_list = soup.findAll('dt')
for dt in dt_list:
if dt.text.find(RELEASE) >= 0:
dd = dt.findNextSibling('dd')
package_name = dd.findNext('a').text
try:
output = subprocess.check_output(["dpkg", "-l", package_name])
output = output.split('\n')
status = output[-2]
if status.startswith('ii'):
updates = updates + package_name + '\n'
except subprocess.CalledProcessError:
pass
if updates:
srv = smtplib.SMTP(MAIL_SERVER)
srv.ehlo()
# If we can encrypt this session, do it
if srv.has_extn('STARTTLS'):
srv.starttls()
srv.ehlo() # re-identify ourselves over TLS connection
srv.login(MAIL_USER, MAIL_PASSWORD)
msg = MAIL_MSG % (MAIL_FROM, updates)
srv.sendmail(MAIL_FROM, MAIL_TO, msg)
srv.quit()
Tags
La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.
