Archive for Ubuntu
June 14, 2008 a las 2:41 pm por Edwin Plauchu · Archivado en Ubuntu, Programacion, FreeBSD, Linux
Aqui les hablare de las 3 mas comunes formas de encriptacion de datos, que actualmente conosco.
• Funciones Hash
• Cifradores simetricos
• Cifradores asimetricos
Funciones Hash
Las funciones hash son faciles de computar pero dificil de aplicarles ingenieria en reversa.
Aque me refiero con esto?, lo explicare con un ejemplo sencillito sobre sistemas linux:
$ echo "Esto se encriptara mediante una funcion hash" | md5sum
f538fb4f2360fcbb3af0f31cdd479829
$ echo "Esto se encripta mediante una funcion hash" | md5sum
fa5f1a88d876d3974a501b3a9c140e2a
Observemos que la cadena introducida via pipe a el comando md5sum nos ha generado un valor hexadecimal, este valor dificilmente podria llegar a ser igual a otro, que quiero decir con esto? Que no hay dos cadenas que computen el mismo valor. Matematicamente podrias llegar a la siguiente deduccion:
f(x) = valor_resultante_para_x_unico
o bien
md5sum("cadena_a_encriptar") = valor_resultante_para_cadena_a_encriptar_unico

Uso comun
Un uso muy comun de esto, lo puedes ver cuando te has bajado una distribucion linux. En los servidores ftp donde se pone a disposicion la descarga de las imagenes de los DVDs que componen a una distribucion linux, tambien se te ofrecen los valores hash md5 que corresponden a cada imagen, una vez que has descargado una de las imagenes… Habras de comparar que estas imagenes te den el valor md5 indicado por los fabricantes de dicha distribucion linux.
$ md5sum redhat5.1.iso
fa5f1a88d876d3974a501b3a9c140a2d
Si el valor fa5f1a88d876d3974a501b3a9c140a2d es el que indica el fabricante de la distribucion linux, entonces la imagen que hemos de quemar en un dvd virguen, es la correcta… pero si el valor no es el indicado por el fabricante… lo mas probable sera, que te estes bajando un fichero imagen corrupto, o en el peor de los casos… una copia alterada por alguien que ha vulnerado el servidor ftp.. y te ha colocado un backdoor sobre la distribucion que aun no te has instalado.
Cifrados Simetricos
Un Cifrado Simetrico es una transformacion, que fue llevada a cabo por un llave secreta, Esta llave traduce su entrada conocida como texto plano, a un salida conocida como texto cifrado, de esta manera excluimos el criptoanalisis(accion contraria a la criptografia..) , solo aquella entidades que posean la llave secreta podran recobrar el texto plano que esta oculto sobre el texto cifrado.

Los Cifrados Simetricos tienen una larga historia, y han mutado en variantes de los mismos bastante interesantes.. una de estas variantes es el triple-DES… muy usado por routers de prestigio hoy en dia.
Cifradores Asimetricos
Un cifrador asimetrico es semejante a un cifrador simetrico, pero el asimetrico ejerce su poder en el uso de un par de llaves.. y no solo una llave como lo hace el simetrico.
El par de llaves a las cuales hago referencia son las siguientes:
• Llaves Publicas -- Usadas para encriptar el texto plano
• Llaves Privadas -- Usadas para desencriptar el texto cifrado
Las llaves son generadas de una manera sencilla, lo cual permite deducir cual es la llave privada y cual es la publica. Aplicarle ingenieria en reversa a estas llaves, es algo sumamente dificil.
Esta fabulosa propiedad permite a la gente el intercambiar sus llaves publicas sobre canales o comunidades y mantener conductos de comunicacion completamente privados.
Los mas notables sistemas de cifrado asimetrico inclullen funciones Diffie-Hellman y RSA (como openssl). Los sistemas de encriptacion asimetrica son usados comunmente para intercambiar llaves de sistemas simetricos.
January 15, 2008 a las 4:18 pm por Edwin Plauchu · Archivado en Ubuntu, Programacion, Linux
Introduccion
Lenguajes script como Perl, Python, Php, Ruby y Tcl estan recibiendo bastante atencion hoy en dia - principalmente porque estos lenguajes facilitan el desarrollo de aplicaciones y prototipos de las mismas de un modo impresionantemente acelerado. Puedo decir como experiencia que al momento de usar python, el tiempo de desarrollo ha sido drasticamente bajo - con la ventaja agregada de la robustes y flexibilidad del codigo. Pero habra situaciones en las que el scripting puro no trabajara como lo deseamos, un ejemplo tipico de esto son las aplicaciones cientificas que requieren una alta velocidad de calculo para rutinas graficas o aplicaciones que requieren controlar o coordinar hardware en base a tiempo real. Entonces he llegado a la conclucion paradigmatica de que lo que necesito es un lenguaje mezclado, en el cual lenguajes tradicionales como C/C++ realicen lo duro del bajo nivel , mientras la logica de la app la pueda realizar en modo Scripting.
Este articulo se enfoca principalmente en el uso de una herramienta que se enfoca a la creacion de Wrappers, con la intencion de integrar el codigo escrito en C/C++ con el popular lenguaje scripting Python. Los fragmentos de codigo en este articulo fueron probados sobre un ubuntu gutsy y una version de Python 2.5.1. Espero que todo eso te sean tan util como a mi.
Obtener SWIG
SWIG es desarrollado por Dave Beazley y puede ser descargado de www.swig.org. o bien puedes instalaro mediante la herramienta apt-get de tu debian… ojo tambien requieres g++ y python2.5-dev.
apt-get install swig g++
Un ejemplo simple
Diremos que tenemos una funcion llamada suma(a,b) escrita en codigo C la cual nos retornara la suma de dos numeros que le sean pasados como argumentos. Veremos como usar la funcion “suma” desde Python. Crearemos el archivo de nombre aritmetica.c el cual contendra el siguiente codigo:
int suma(int a, int b)
{
return a+b;
}
Ahora ejecutaremos el siguiente comando:
swig -python -module aritmetica aritmetica.c
Esto nos retornara lo siguiente:
root@pianodaemon-laptop:/home/pianodaemon$ ls -l
total 100
-rw-r--r-- 1 pianodaemon pianodaemon 41 2008-01-15 15:48 aritmetica.c
-rw-r--r-- 1 pianodaemon pianodaemon 1605 2008-01-15 15:48 aritmetica.py
-rw-r--r-- 1 pianodaemon pianodaemon 92723 2008-01-15 15:48 aritmetica_wrap.c
Observemos que fueron creado 2 nuevos archivos, aritmetica_wrap.c y aritmetica.py. Nosotros deberiamos ahora de compilar ambos aritmetica.c y aritmetica_wrap.c para producir archivos de codigo objeto, la compilacion sera con el siguiente comando:
root@pianodaemon-laptop:/home/pianodaemon$ gcc -I/usr/include/python2.5/ -c aritmetica.c aritmetica_wrap.c
Observe que ya logramos compilar el codigo objeto con exito.
pianodaemon@pianodaemon-laptop:~/gulsinborrame$ ls -l
total 136
-rw-r--r-- 1 pianodaemon pianodaemon 41 2008-01-15 15:48 aritmetica.c
-rw-r--r-- 1 pianodaemon pianodaemon 707 2008-01-15 16:15 aritmetica.o
-rw-r--r-- 1 pianodaemon pianodaemon 1605 2008-01-15 16:11 aritmetica.py
-rw-r--r-- 1 pianodaemon pianodaemon 92723 2008-01-15 16:11 aritmetica_wrap.c
-rw-r--r-- 1 pianodaemon pianodaemon 28884 2008-01-15 16:15 aritmetica_wrap.o
Ahora procedemos a generar un libreria compartida, para eso utilizaremos el enlazador de linux ld:
ld -shared -o aritmetica.so aritmetica.o aritmetica_wrap.o
Finalmente probaremos la libreria que hemos generado:
import aritmetica
>>>aritmetica.suma(10, 20)
30
>>>aritmetica.suma(10, -10)
0
>>>
November 13, 2007 a las 9:42 am por Edwin Plauchu · Archivado en Ubuntu, FreeBSD, Linux, Solaris
lsof (ls Open Files) o listado de archivos abiertos, es una gran aplicación pero bastante desconocida y que nos puede sacar de muchas dudas o apuros. lsof es una herramienta muy completa, por lo que en éste articulo solo se muestra la información que más vamos a necesitar.
NOTA: Si se quiere saber más sobre el uso de lsof ejecutad “man lsof “.
Utilidad de lsof.
Como he dicho antes, lsof muestra los archivos y procesos abiertos en el moment o del chequeo, por lo que nos será de utilidad para llevar un seguimiento de seguridad o de procesos bloqueados.
Desmontando un CD rebelde.
# umount /cdrom
umount: /cdrom: device is busy
Vaya, ¡¿por qué no se desmonta y me dice que el dispositivo está ocupado?! No se ha desmontado porque algun proceso esta haciendo uso del CDROM y hasta que no lo libere no podremos desmontarlo, el problema es que desconocemos que aplicacion se encuentra usando dicho CDROM, mediante lsof podremos conocerlo.
# lsof +D /cdrom
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
konqueror 621 zx80 cwd DIR 3,64 2048 57344 /cdrom
lsof nos dice que el proceso konqueror está usando el directorio /cdrom con el usuario zx80. La solución es sencilla entoces, basta con cerrar konqueror y problema resuelto. Para los que usamos mucho la consola y llegamos a tener unas cuantas sesiones abiertas pasa que en vez de konqueror puede salir bash. Esto es debido a que alguna de las consolas está dentro del directorio activo del cd-rom, por lo que bastaría salirse del directorio de trabajo del CD o cerrar ese bash.
# kill 621
Ya podemos desmontar.
Quien está detrás de una conexión ?
Esta vez usamos la herramienta netstat. Para quien no conozca esta herramienta decir que es un monitor de red. Nos dirá qué conexiones activas tenemos y mucha inform ación sobre ellas. Vamos a ver qué conexiones tenemos activas:
# netstat - n
Active Internet connections (only servers)
Proto Recv- Q Send - Q Local Address Foreign Address
tcp 0 0 *:printer *:* LISTEN
tcp 0 0 localhost:www *:* LISTEN
tcp 0 0 *:6000 *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
Nos muestra información sobre algunos puertos en espera (Listen) pero desconocemos qué aplicación está detrás. Me llama la atención el puerto TCP 6000, así que voy a ver quien está detrás:
# lsoft - i :6000
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
X 279 root 3u Ipv4 349 TCP *:3000 (LISTEN)
Vemos que la aplicacion X es la culpable de que el puerto 6000 esté abierto y a la espera.
Qué procesos están usando un directorio.
Una de las utilidades que más se usan es averiguar qué aplicaciones están trabajando en un directorio concreto. Se usa esta opción sobre todo para vigilar el uso de troyanos o espias. SI quisiera saber qué procesos están usando mi directorio pondría lo siguiente:
pianodaemon@pianodaemon-laptop:~$ lsof +D /home/pianodaemon/
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
x-session 5962 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
compiz 6013 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
gnome-pan 6015 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
nautilus 6017 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
emerald 6127 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
compiz.re 6128 pianodaemon cwd DIR 8,1 4096 6684674 /home/pianodaemon/
................ ...
Otros usos.
Estos son otros usos de la herramienta lsof, que aunque son algo menos usados nos pueden sacar de algun apuro o duda.
# lsof - g n: Donde n es un ID de grupo.
Esto muestra los archivos abiertos por un grupo que queramos. Si quisieramos ver los archivos de varios grupos a la vez, los separariamos por comas:
# lsof - g wheel,users
# lsof - u n: Donde n es un ID de usuario, lo que nos mostrará los archivos abiertos por ese usuario. Al igual que con los grupos, se pueden especificar varios usuarios de una vez.
# lsof - l: Para no convertir el ID a nombre de usuario, útil en casos de logeos corruptos o sistemas lentos.
# lsof - N: Nos muestra los archivos NFS abiertos.
November 7, 2007 a las 9:43 am por Edwin Plauchu · Archivado en Ubuntu, Programacion
Entre mis nuevas tareas tengo la de administrar un servidor CVS, hacia años que no lo administraba, asi que he vuelto a recordar unas pequeñas nociones de control de versiones. Aqui hablare de como instalar CVS en Ubuntu Gutsy. Es un articulo meramente tecnico, enfocado a desarrolladores.
El significado de CVS como comenta la wikipedia, es el siguiente:
El Concurrent Versions System (CVS), también conocido como Concurrent Version System o Concurrent Versioning System, es una aplicación informática que implementa un sistema de control de versiones: mantiene el registro de todo el trabajo y los cambios en los archivos (código fuente principalmente) que forman un proyecto (de programa) y permite que distintos desarrolladores (potencialmente situados a gran distancia) colaboren. CVS se ha hecho popular en el mundo del software libre. Sus desarrolladores difunden el sistema bajo la licencia GPL.
Basicamente se utiliza en el desarrollo de un proyecto informatico para llevar un control de los archivos del codigo y evitar por ejemplo que el codigo que escribe un usuario sea “machacado” con el codigo de otro usuario. Ademas con un sistema de control de versiones, el programador siempre puede disponer de la ultima version del codigo lo que ayuda a continuar con el desarrollo del proyecto.
Te pondre un ejemplo de para que sirve todo esto.
Imagina dos programadores que estan trabajando en el mismo proyecto, y casualmente ambos estan modificando el mismo archivo de codigo. Cuando uno de ellos actualice ese archivo en el repositorio se queda marcado, de tal manera que cuando el otro intente subir al repositorio de codigo ya ve, que ese archivo ha sufrido una modificacion desde la ultima vez que el se actualizo, lo que le obliga, a traerse de nuevo ese archivo (con los cambios que haya realizado el primer programador), añadir los suyos y volver a subir el archivo. Sin un mecanismo de control de versiones, ese cambio se perderia, el primer desarrollador subiria el archivo y el segundo subiria su version. Esto para un archivo es controlable, pero cuando tienes miles de archivos y miles de lineas de codigo significa un desastre total. Por eso el control de versiones es necesario.
Para instalar el servidor y el cliente cvs ejecutamos:
$ sudo apt-get install cvs cvsd
En un momento determinado nos pedira la ruta para el repositorio, pon por ejemplo /cvsrepo. Este es el directorio a partir del cual se ira colgando todos aquellos modulos/proyectos que administremos con el CVS.
Este directorio lo vamos a definir a partir de /var/lib/cvsd, asi que realmente el path completo seria:
/var/lib/cvsd/cvsrepo
Ejecutamos las siguientes secuencias de comandos:
$ sudo cvsd-buildroot /var/lib/cvsd
Si la carpeta cvsrepo no existe, la creamos
$ cd /var/lib/cvsd
$ sudo mkdir cvsrepo
Le damos permisos sobre la carpeta al usuario cvsd
$ sudo chown -R cvsd:cvsd cvsrepo
Inicializamos el repositorio
$ sudo cvs -d /var/lib/cvsd/cvsrepo init
creamos un usuario cvs y le damos una password.
$ sudo cvsd-passwd /var/lib/cvsd/cvsrepo username
por ejemplo:
sudo cvsd-passwd /var/lib/cvsd/cvsrepo j4nusx
Ahora editamos el archivo:
sudo emacs /var/lib/cvsd/cvsrepo/CVSROOT/config
Cambiamos “#SystemAuto=no” a “SystemAuto=no”
Ya tenemos todo funcionando. Para comprobar que accedemos:
cvs -d :pserver:username@localhost:/cvsrepo login
cvs -d :pserver:username@localhost:/cvsrepo checkout .
Por ejemplo:
cvs -d :pserver:j4nusx@localhost:/cvsrepo login
Seria adecuado exportar la variable CVSROOT del siguiente modo:
export CVSROOT=:pserver:jose@localhost:/cvsrepo
o el valor que fuera, de esta manera ya no necesitariamos especificarla cada vez que fueramos a usar un comando “cvs”.
Ahora podriamos logarnos con:
cvs login
y por ejemplo colocarnos en la carpeta (dentro) de un proyecto que quisieramos subir al CVS y ejecutar:
cvs import -m "archivos iniciales" MiProyecto HEAD MAIN
Si te sale el error:
/cvsroot: no such repository
es que has especificado mal la ruta del repositorio. deberia ser /cvsrepo o la que pongas, pero asegurate de que no te haya fallado
alguna letra. En caso de que lo hayas definido mal, No lo elimines con apt-get remove cvsd. Pues a la hora de volver a instalarlo
mantendria la configuracion anterior. tendrias que ejecutar:
apt-get remove --purge cvsd
e instalarlo de nuevo
o mejor aun,
dpkg-reconfigure cvsd
que nos permite reconfigurar de nuevo cvs server (cvsd) e indicar ahora si la ruta adecuada para el repositorio (/cvsrepo, /cvsroot, /repo, o el que quieras usar).
Como clientes de CVS yo o utilizo “cvs” desde la linea de comandos, o Eclipse.
November 6, 2007 a las 9:45 am por Edwin Plauchu · Archivado en Ubuntu, Linux
Hace unos dias (los pocos dias que llevo en telefonica mexico, aqui en el DF), un nuevo conocido y reciente usuario de linux, me hizo la siguiente pregunta…
Como puedo visualizar mis rutas, conecciones y puertos abiertos tcp/ip ?
Esto no es nada absolutamene del otro mundo, y muchos de ustedes creo que ya lo saben, aun asi, considero que es bueno contestar a este tipo de preguntas que son mas cotidianas de lo que uno piensa entre los usuarios newbies.
Le comente que le escribiria la respuesta en el blog de gulsin.. (creo que de esta manera… todos aquellos que se realizacen la misma pregunta en google sin duda obtendran el mismo beneficio que el..)
La orden netstat.
Esta orden se utiliza para visualizar el estado de diversas estructuras de datos del sistema de red, desde las tablas de enrutado hasta el estado de todas las conexiones del host donde se ejecuta.
Conexiones y puertos abiertos….
root@pianodaemon-laptop:/home/pianodaemon# netstat -at
Conexiones activas de Internet (servidores y establecidos)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:ipp *:* ESCUCHAR
tcp 0 0 pianodaemon-lapto:38621 fg-in-f191.google.c:www ESTABLECIDO
tcp 0 0 pianodaemon-lapto:34637 bu-in-f189.google.c:www ESTABLECIDO
tcp 0 0 pianodaemon-lapto:38622 fg-in-f191.google.c:www ESTABLECIDO
tcp 0 0 pianodaemon-lapto:38821 bu-in-f83.google.co:www ESTABLECIDO
tcp6 0 0 *:8009 *:* ESCUCHAR
tcp6 0 0 *:8180 *:* ESCUCHAR
Visualizando Rutas
root@pianodaemon-laptop:/home/pianodaemon# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.225.181.128 0.0.0.0 255.255.255.128 U 0 0 0 eth0
172.16.142.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 10.225.181.131 0.0.0.0 UG 0 0 0 eth0
Eso es todo, pasenla chido……….
September 27, 2007 a las 2:56 pm por Rasta · Archivado en Ubuntu
La beta de la nueva version de Ubuntu ya esta disponible, aca en Tolero´s tech notes pueden encontrar una reseña de la nueva version, desde applets y compiz fusion hasta las basicas del kernel.