Un pequeño gran cambio…


Tal como lo dice el título, haré un pequeño gran cambio… No exactamente sobre mi vida, sino que el blog se mudará/reestructurará/cambiará/etc. En primer lugar cambiaré el enfoque de los artículos, de preferencia publicaré snippet de los lenguajes de programación que más utilizo (python, bash, algo de C, etc), hablaré sobre cosas útiles que me encuentro en el día a día (tal vez algo de hacking) y lo mas relevante, daré a conocer los proyectos en los cuales he participado, diseñado, programado o que me gustaría realizar a futuro.

Para dar inicio a este interesante nuevo proceso he decidido migrar de los servidores de wordpress hacia openshift (utilizando de igual manera wordpress como CMS), lo cual me da libertad para administrar plugins/themes a conveniencia.

Los dejo bienvenidos al nuevo blog:

http://blog-mclavel.rhcloud.com (se aceptan sugerencias de dominio)

Saludos!

 

Robotito.Seguro: El inicio


Hace mucho tiempo tenia la idea de realizar este proyecto, pero los acontecimientos recientes hicieron que se acelerara el proceso. El proyecto robotito.seguro nace con la idea de mantener “seguros” nuestros notebooks (en realidad tener una herramienta de control); imaginemos que el día de mañana nos roban el computador, seria ideal poder tener herramientas que pudiesen darnos información sobre el paradero del equipo.

Si bien la primera pregunta que se puede venir a la mente es: ¿No existen herramientas que hagan eso?, bueno… la respuesta es si. Yo mismo he usado Prey para poder monitorear mi notebook, tablet y hasta el celular… sin embargo siempre tenia la idea de hacer yo mis propias herramientas y bueno, aquí estamos.

El proyecto robotito.seguro es básicamente un script programado en python (2.7) el cual es capaz de sacar una foto mediante la webcam, hacer un screenshot de la pantalla, sacar la ip externa y enviar toda esta información al correo que estimemos pertinente, todo esto configurable mediante un timer que evaluará cada cuanto tiempo hacer este proceso.

Inicialmente el script era una mezcla de python y bash, pero después de investigar un poco en estos dos días logre hacer la migración completa a python. Ahora, ¿porque esto es bueno?, porque gracias a py2exe logre generar un exe que mantiene la misma funcionalidad en sistemas Windows (7) como Linux (Ubuntu), y asumo que funcionará de buena forma en Mac.

Por último, decir que el proyecto se encuentra alojado en Bitbucket en un repositorio privado, esperando las ultimas mejoras para liberar el código.

Saludos!

Asegurar (un poquito) el servidor


Hoy revisando mis feeds me encontré con una pagina bastante interesante sobre seguridad:

http://desenmascara.me/

Desenmascarame!

servicio cuyo objetivo es:

concienciar sobre la seguridad web desenmascarando la tecnología e infraestructura tras la que se sostienen los sitios web.

 

Después de revisar un par de sitios conocidos y que administro, me di cuenta de un error bastante común que habita en muchos servidores, el cual es mostrar la información básica del server. Como la gran mayoría utiliza apache como webserver y php como lenguaje de programación principal, acá dejo 2 tips para ocultar y asegurar un poquito el servidor.

Ocultar datos de apache

Buscamos el archivo httpd.conf (habitualmente se encuentra en /etc/httpd/conf/ ) y cambiamos 2 valores de la configuración:

ServerSignature Off
ServerTokens Prod

Luego reiniciamos apache

/etc/init.d/httpd restart

Ocultar datos de php

Buscamos el archivo php.ini (habitualmente esta en /etc/) y cambiamos al valor:

expose_php = Off

Espero que les sirva.

Saludos

Transferencia archivos en una LAN


Una problemática muy común es el envio de archivos desde un equipo a otro. Si los archivos son pequeños, los enviamos por correo, dropbox, etc. Si a este escenario le sumamos que el destinatario es un equipo que se encuentra dentro de nuestra red, podría pensarse “tonto” que los archivos vayan desde nuestra red (origen) hacia Internet (servicio almacenamiento), para volver a ser descargados a nuestra red (destino).

Una situación similar me toco experimentar hoy, necesitaba enviar una imagen ISO de 2 GB a una máquina entro de la misma red (en realidad era el equipo de mi hermano, a 2 piezas de la mía). Para poder enviar el archivo (sin salir a internet) lo que hice fue lo siguiente:

  • Instalar SSH en la maquina servidora (Centos).

su -c 'yum install openssh'

  • Levantar SSH.

su -c '/etc/init.d/sshd start'

  • Anotar la IP de la máquina con el archivo a enviar.

Para la descarga del archivo (desde una maquina windows), instalamos winscp, le di los datos de acceso al equipo servidor y listo! ya se podía copiar el archivo sin salir de la red local.

Mientras escribía este post, se me ocurrieron otras formas (tal vez mas sencillas) de enviar el archivo. Se podría haber montado un servidor ftp en la máquina de origen, o también haber instalado httpd (apache) y dejar el archivo en la carpeta /var/www/html luego con la ip de mi maquina seria visible dentro de la red (debiese haber cambiado las reglas de iptables para el acceso)… en fin… múltiples soluciones…

Espero que les sirva!

Saludos.

Screenshot en Centos


Actualmente tengo en mi máquina 3 sistemas operativos distintos:

  • Windows 7
  • Ubuntu 12.04
  • Centos 6.4

Este último SO es el que más estoy utilizando, ya que lo ocupo para trabajar en el desarrollo de Blumee, sin embargo, por diversos motivos me fue necesario mandar screenshots de mi desktop, pero me di cuenta que por default Centos no traía los paquetes correspondientes. Para solucionar esto solo debemos instalar gnome-utils y listo.

su -c 'yum install gnome-utils'

Saludos.

Trabajando con python


Buenas, a contar de hoy hasta nuevo aviso pondré todo mi FUUU en un proyecto que desarrollamos junto a 2 amigos, bueno mas adelante les dare detalles de que se trata. La idea es ir documentando todos los avances, cosas utiles, etc.

El proyecto que desarrollaremos lo haremos en Django, por lo cual, como primera medida sera crear entornos de desarrollo aislados, para que cada integrante pueda trabajar en su maquina sin problemas de compatibilidad. Para esto utilizaremos virtualenv y pip.

¿Que es virtualenv?, virtualenv nos permite crear estos entornos privados para poder desarrollar en python, basicamente nos permite controlar todos los componentes que utilizara nuestra aplicacion (desde la version de python, hasta… lo que queramos).  Hasta aqui vamos bien. pero tambien hablamos de pip.

¿Que es pip?, pip es un gestor de paquetes de python, en el cual encuentras todos los componentes que necesites (y que esten en el repositorio).

Manos a la Obra.

En primer lugar creamos un directorio en el cual trabajaremos (nada complicado hasta el momento).

mkdir proyecto

Luego, creamos el entorno totalmente limpio.

virtualenv entorno --no-site-packages

Si nos damos cuenta, nos creara un directorio, el cual posee ya algunas carpetas de interés.
Una vez que hemos creado el entorno, instalaremos django. Sin embargo antes, debemos activar el entorno (para poder saber que estamos trabajando en el ambiente recién creado). En este caso toman peso los directorios creados. Debes ejecutar:

source entorno/bin/activate

Con esto estará activado y trabajando nuestro entorno, en caso de que queramos salirnos de el, tan solo debemos escribir:

deactivate

Una vez activado nuestro proyecto, instalaremos django:

pip install django

Para desinstalar, seria:

pip uninstall django

Una las funcionalidades mas potentes que se nos ofrece es poder sacar un listado de las herramientas que utilizamos para poder replicar nuestro entorno en cualquier otra maquina, para esto debemos escribir:

pip freeze > req.txt

Django==1.4
argparse==1.2.1
distribute==0.6.24
wsgiref==0.1.2

Por lo cual, para otro programador le resulta cómodo poder replicar el entorno, ya que solo debe escribir:

pip install -r req.txt

Ojala les sirva!
Saludos 😀