viernes, 2 de enero de 2015

Uso de comando pv

pv es un comando muy útil en el shell de Linux. Muestra una barra de progreso para poder visualizar el paso de información entre dos comandos por medio de tuberías. Viene muy bien en la ejecución de algunos comandos que tardan bastante en ejecutarse, como copia de ficheros grandes, copias mediante el comando dd, etc. y sobre los que no tenemos ningún tipo de información sobre su progreso hasta que finalizan.

viernes, 19 de diciembre de 2014

Conocer el proceso que escucha en un puerto

A modo de análisis de un servidor Linux, en ocasiones es útil disponer de un listado de servicios que están a la escucha en distintos puertos.
Mediante el comando netstat se puede obtener esta información. Veamos un ejemplo:

lunes, 29 de septiembre de 2014

Integrar Latch en Python

Espero que conozcáis Latch, y si no estáis tardando. Es un excelente método para proteger nuestras cuentas de accesos no autorizados. Se puede implementar en una web, en una aplicación de escritorio, en el propio proceso de logado de usuarios de algunos sistemas operativos, y en general es aplicable a cualquier sistema que ideemos y que sea susceptible de proteger ante eventuales ataques.
Una buena fuente para aprender sobre Latch y seguridad en general es el blog Un informático en el lado del mal.
Como para otros muchos lenguajes y plataformas, Latch tiene una librería para poderse usar desde Python. Con tan solo descargar el fichero latch.py e importarlo en nuestra aplicación Python, podemos usarlo.
Lo primero de todo es darse de alta en la web de Latch como desarrollador. Se hace de forma gratuita. Obtendremos una Latch APP ID y un Latch Secret.

Parear una cuenta de usuario con nuestra aplicación

El proceso de parear un usuario con una aplicación se inicia generando un código aleatorio por parte del usuario, mediante la aplicación para móvil de Latch. En nuestro ejemplo será 92Us26.
El siguiente script Python corresponde al proceso de emparejar un usuario con nuestra aplicación:
# -*- coding: latin-1 -*-

import sys, latch

LATCH_APP_ID = '55HAbMdwQRRS6421AAxZ'
LATCH_SECRET = 'EDadxfiyuyjgfdferRG43658HGEWTRtZ3254VMhE'

usuario = sys.argv[1]
codigo  = sys.argv[2]

latcheo = latch.Latch(LATCH_APP_ID, LATCH_SECRET)
response = latcheo.pair(codigo)
cuenta_latch = str(response.get_data()['accountId'])

print cuenta_latch
La ejecución del script anterior sería de este modo:
$ python parear.py user01 92Us26
ebbcf87d97174f0e397e3a42b2a86ca0e34627e5345f817446eefba348550a82
Como se aprecia, tras el pareo nuestra aplicación se queda con el ID del pestillo que se acaba de crear. En este caso, a modo de ejemplo, se imprime por pantalla. Lo ideal es que nuestra aplicación almacene en una base de datos que el usuario user01 tiene como ID del pestillo de inicio de sesión ebbcf87d97174f0e397e3a42b2a86ca0e34627e5345f817446eefba348550a82.

Comprobar el estado del pestillo de un usuario

Una vez que se ha creado el pestillo, el siguiente paso es conocer la forma de consultar su estado (abierto o cerrado). De esta forma, cuando el usuario (o un atacante) introduzca ese login y su contraseña correcta, la aplicación consultará el estado del pestillo. Si está abierto, la aplicación logará al usuario con normalidad. Si está cerrado, la aplicación devolverá el mensaje de usuario o contraseña incorrectos.
A continuación se muestra un pequeño script para consultar el estado del pestillo (en la práctica lo suyo es obtenerlos de la base de datos):
# -*- coding: latin-1 -*-

import sys, latch

LATCH_APP_ID = '55HAbMdwQRRS6421AAxZ'
LATCH_SECRET = 'EDadxfiyuyjgfdferRG43658HGEWTRtZ3254VMhE'

latchuserid  = sys.argv[1]

latcheo = latch.Latch(LATCH_APP_ID, LATCH_SECRET)
response = latcheo.status(latchuserid)
if response.get_data()['operations'][LATCH_APP_ID]['status'] == 'on':
    print 'Acceso permitido'
else:
    print 'Acceso denegado'
La ejecución del script sería:
$ python comprobar.py
ebbcf87d97174f0e397e3a42b2a86ca0e34627e5345f817446eefba348550a82
Acceso denegado
¿Cómo has usado Latch en tu aplicación? ¿Qué usos le has dado? ¡Deja tu comentario!