Para el administrador de sistemas es esencial el uso de un "password ring", tal como ZSafe, MyPassWordSafe o KeyPass, entre otros. Pero desde que la LOPD es ley, mantener a salvo datos sensibles de clientes, buzones de contactos o documentos bancarios es una tarea prioritaria.
Una solución muy elegante para estos casos, en lugar de encriptar el sistema de ficheros al completo, es crear un sistema del tipo loopback, mantenerlo cifrado y montarlo/desmontarlo según sea necesario.
Veamos los pasos a seguir para conseguirlo:
1) Cargar los módulos de cifrado
modprobe cryptoloop
modprobe aes
(si no se dispone de ellos, se bajan precompilados para kernels de stock usando apt-get)
2) Crear la imagen. En este ejemplo le indicamos que tendrá un tamaño inicial de 100Mb (bs=1MB count=100)
dd if=/dev/urandom of=cryto_fs.img bs=1M count=100
3) Asociar la imagen creada al sistema loopback e indicarle que va a estar cifrada con AES 128bit
losetup -e aes /dev/loop0 crypto_fs.img
Password:
4) Formatear en el sistema de ficheros preferido
mkfs -t ext3 /dev/loop0
5) Montar en el directorio de trabajo seleccionado
mount /dev/loop0
mount -o loop,encryption=aes crypto_fs.img /home/jose/datos_sensibles/
En este punto, nos pedirá la contraseña de cifrado y podremos comenzar a trabajar con nuestro sistema de ficheros seguro.
La única pega es que para este tipo de ficheros, no nos funcionará el montado en arranque mediante fstab (tendremos que facilitar la contraseña igual), lo cual, aunque incordie, es una medida de seguridad de lo más obvio.
9.12.07
Python: Leer los titulares de un rss de noticias
Pongamos por caso que necesitamos extraer los titulares de un xml (rss) de un periódico. Lo más fácil será crear un parseador xml con sax o minidom que extraiga los datos contenidos entre los tags "title". En mi caso, esta función simple que hace uso de minidom, me ha aliviado el proceso más de una vez:
def buscaXMLTag(xmlFile,xmlTag):
resultList = []
try:
dom = minidom.parse(xmlFile)
elements = dom.getElementsByTagName(xmlTag)
if len(elements) != 0:
for i in range(0,len(elements)):
resultList.extend([elements[i].childNodes[0].nodeValue])
else:
# O ficheiro non ten tags sobre os que buscamos
pass
except:
# O ficheiro non existe ou non se pode abrir
pass
return resultList
def buscaXMLTag(xmlFile,xmlTag):
resultList = []
try:
dom = minidom.parse(xmlFile)
elements = dom.getElementsByTagName(xmlTag)
if len(elements) != 0:
for i in range(0,len(elements)):
resultList.extend([elements[i].childNodes[0].nodeValue])
else:
# O ficheiro non ten tags sobre os que buscamos
pass
except:
# O ficheiro non existe ou non se pode abrir
pass
return resultList
Suscribirse a:
Entradas (Atom)