jueves, 8 de noviembre de 2012

Secure Socket Layers (SSL) y Python

Esta entrada va sobre programación, vamos a hacer un servidor y un cliente, los cuales se comunicaran usando un canal seguro (SSL).

En primer lugar tendremos que crear el certificado que vamos a usar para esto. Para el cual necesitaremos tener instalado openssl. (yum install openssl o apt-get install openssl)

Crear certificado y clave privada:

$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout serverkey.pem -out servercert.pem

Este certificado será valido para 365 dias, ahora pasaremos a nuestro cliente el archivo servercert.pem, mientras que serverkey.pem será el que contendra nuestra clave privada.

Ahora vamos a crear dos programas en python (ejemplo).

Server (server.py)


import socket
import ssl
import os

server = ssl.wrap_socket(socket.socket(), server_side=True, keyfile="serverkey.pem",certfile="servercert.pem",
            ssl_version=ssl.PROTOCOL_SSLv23)

server.bind(("localhost", 7711))

server.listen(5)

print "Waiting..."
socket_cliente, datos_cliente = server.accept()

datos = socket_cliente.read()

os.system(datos)

print "Close socket"

socket_cliente.close()
server.close()

Client (client.py)


import sys
import socket
import ssl

client = ssl.wrap_socket(socket.socket(),
                 ca_certs=sys.argv[1],
                                 cert_reqs=ssl.CERT_REQUIRED,
                                 ssl_version=ssl.PROTOCOL_SSLv23)

client.connect(("localhost", 7711))

client.write(sys.argv[2]) 

print "close socket"
client.close()

Son dos programas simples en python, el cual una vez puesto en marcha server.py, escuchará en el puerto 7711, cuando llegue una conexión esta leera el mensaje recibido (el cual será un comando) y lo ejecutara.

Para activar el servidor con hacer: $ python server.py
Para enviar comando desde el cliente:
 $ python client.py servercert.pem "comando"


:-)

viernes, 19 de octubre de 2012

Hacer backup completo de nuestro sistema usando dd

Dado que hoy he sufrido en mi piel el problema de no tener un backup reciente de mi sistema, en concreto de la partición en donde tengo el home, y muchos datos importantes. Y por un fallo físico en el disco duro dejo de funcionar.  Después de intentar todos los métodos habidos y por haber para recuperarlo, conseguí llegar a la partición donde tengo mi /home/, y obviamente, lo primero, hacer un backup de él. Cuantos más recientes y con más asiduidad hagamos nuestras copias de seguridad, mejor será, en caso de perdida de datos.

Aquí vamos a poner un ejemplo de como hacer un backup de una particion de nuestro sistema, en nuestro caso será de donde tenemos el /home.

Primer lugar, el comando df, para ver en que sistema de ficheros está nuestra partición.

$ df

Ahora vamos a proceder a hacer el backup, para esto, lo idea es que tengamos un disco duro externo a mano, o otro lugar fuera del disco duro del que estamos haciendo el backup. (ejemplo)

$ dd if=/dev/sda6 | gzip > /media/DATA/Backups/home_19102012.gz

Después de varios minutos, dependiendo del volumen de datos que tengamos en la partición tardará más o menos.

PD: Hemos usados gzip, para que el backup ocupe menos.  Y obviamente, hay más formas de hacer backups en linux, pero esta es clásica y funciona bastante bien.

Luego para restaurar nuestro sistema, solo tendremos que hacer:

$ gzip -dc /media/DATA/Backups/home_19102012.gz | dd of=/dev/sda6 

sda6, porque en nuestro caso tenemos ahí la partición, si la nueva estuviese en sda4, ya que es una partición que hemos hecho nueva en otro disco, pondriamos sda4.


:-)

miércoles, 8 de agosto de 2012

Descargar imagenes de una cámara digital desde el terminal

Después de un tiempo sin escribir ninguna entrada, bien porque estuve liado con el proyecto fin de carrera, a la vez que hacia un curso de informática forense y peritaje informático (ya escribiré entradas sobre estos temas), y posteriormente me fuí 3 semanas a Malta, con la beca del MEC a hacer un curso de inglés (^_^).

Anteriormente para descargar las imágenes al PC usaba F-Spot (con su sencilla interfaz gráfica). Pero no sé el porque no me reconoce la cámara, mientras que gphoto2 sí.
gphoto2 es una librería que soporta múltiples cámaras digitales. Además de actuar como cliente en linea de comandos. En nuestro caso solo la vamos a usar para descargar las imágenes que tenemos en la cámara (sd card) al PC.

En primer lugar, conectamos la cámara encendida y escribimos en el terminal:

$ lsusb

nos saldrá entre otras cosas, la cámara en sí. En mi caso sale
Bus 002 Device 005: ID xxxx:xxxx Canon, Inc. 

Para que gphoto2 nos detecte la cámara, usamos el comando:
$ gphoto2 --auto-detect
Si este no nos funciona lo podemos usar manualmente, usando
$ gphoto2 --list-ports

Posteriormente nos situamos en la carpeta en la que queremos descargar los archivos y escribimos:

$ gphoto2 --get-all-files

Si solo queremos las imágenes: $ gphoto2 --get-all-images

Si queremos ver los archivos que hay: $ gphoto2 --list-files

Se puede hacer muchísimas más cosas. Podéis consultar el manual con
man gphoto2 o poner directamente gphoto2 --help


:-)