viernes, 30 de noviembre de 2012

Instalación de CentOS 6.3 sobre Virtual Box

Ayer leí (por ahí...) que Debian y CentOS se "sacan chispas" por llevar la delantera en lo que a servidores GNU/Linux se refiere, a nivel mundial. En julio de 2010, CentOS sobrepasó a Debian al alcanzar casi el 30% de los servidores GNU/Linux, pero Debian volvió a ponerse en punta a principios de este año.
De una u otra manera, está bien claro que estas dos distribuciones mantienen una posición predominante en este rubro de TI.
Como yo ya instalé un server Debian, ahora quise probar con CentOS, una distribución basada en Red Hat (la razón principal es que las certificaciones de Red Hat son las más prestigiosas en el mundo).
Para probar, bajé la imagen del LiveDVD desde la página oficial, y lo instalé sobre Virtual Box.
A continuación, las capturas de pantalla de la instalación junto con comentarios.

Booteando desde el LiveDVD (imagen .iso):

Menú inicial: Elegí la opción "Install (Text Mode) para iniciar la instalación sin entorno gráfico (sólo línea de comandos):
  

Esta es la pantalla inicial de la instalación ("Bienvenidos a CentOS"):


Luego sigue la pantalla de selección de idioma para la instalación:



Selección del modelo de teclado a usar durante la instalación:



Zona horaria:




Contraseña del superusuario root:



Opciones de instalación y particionamiento (yo elegí usar el disco entero, "Use entire drive"):



Ventana de confirmación antes de guardar los cambios al disco:

 

Comenzando la instalación:




¡Instalación finalizada!:


Antes de reiniciar, hay que borrar la imagen .iso de donde estaba guardada para que no vuelva a bootear el LiveDVD (sería el equivalente a quitar el DVD de la lectora luego de finalizar la instalación, para evitar comenzar con el proceso otra vez).

Luego, muestra el grub con las opciones de inicio:







Configuración de autenticación:


Habilitamos el firewall:



Ahora elegimos la distribución permanente del teclado (antes lo habíamos hecho para el proceso de instalación):


Y habilitamos los servicios de red (con las flechas del teclado nos desplazamos hacia abajo y hacia arriba, con la barra espaciadora seleccionamos o deseleccionamos cada servicio, y con el tabulador salimos de la lista hacia "OK" o "Cancel"):


Listo el pollo y pelada la gallina, ahora sí iniciamos pipí cucú:


Chusmeamos un poco el manpage de yum, el gestor de paquetes (man yum):


finalmente, como no quiero que mi equipo se llame "localhost", sigo las instrucciones de la ayuda oficial de Red Hat para cambiarle el nombre a "centos", lo cual puede hacerse de dos maneras:

1) Dinámicamente (los cambios se pierden al reiniciar) a través del comando hostname, seguido del nuevo nombre de host.

2) Persistente (los cambios permanecen), editando el archivo /etc/sysconfig/network.

Antes:

Después:

Ya iremos retocando la instalación, pero eso será tema para otro post ;).

jueves, 29 de noviembre de 2012

Conceptos de criptografía (2da parte)

Cifradores asimétricos: Permiten encriptar un mensaje utilizando una clave y descifrarlo utilizando otra (claves pública y privada, respectivamente). En otras palabras, si alguien quiere enviarme un mensaje cifrado con mi clave pública (la cual puede distribuirse libremente), solamente yo voy a poder desencriptarlo utilizando mi clave privada (que es estrictamente personal y no debe compartirse bajo ningún punto de vista).
La generación de estas claves se basa en cálculos de números primos y logaritmos.

El algoritmo RSA es el más utilizado en el cifrado asimétrico (ver este link para una descripción completa de su funcionamiento con ejemplos).

Genero mi clave privada, obtengo la clave pública a partir de la misma, y la muestro:

Fig. 1: Generación de claves


Ahora voy a probar en encriptar un mensaje con esta clave pública (pruebo desde una máquina virtual simulando un emisor, que también podía ser otro usuario del mismo equipo)...

Fig. 2: Cifrado de mensajes

  para luego descifrarlo utilizando mi clave privada: 

Fig. 3: Desencriptar mensajes ("Yo uso Debian :)" es el contenido de "archivo", que me acabo de dar cuenta que no salió en la captura de pantalla correspondiente a la Figura 2)

Para tener en cuenta: al compartir la clave pública lo conveniente es distribuir el archivo pub.pem directamente en vez de "copiar y pegar" sus contenidos en un archivo vacío y darle el mismo nombre (al principio probé de esta última manera, pero al parecer por una cuestión de formato me daba el error "Unable to load Public Key").

martes, 27 de noviembre de 2012

Conceptos de criptografía (1era parte)

La criptografía actualmente se encarga del estudio de los algoritmos, protocolos y sistemas que se utilizan para dotar de seguridad a las comunicaciones, a la información y a las entidades que se comunican (José Pastor Franco, Miguel Ángel Sarasa López, José Luis Salazar Riaño,"Criptografía digital: fundamentos y aplicaciones",Ed. Prensas Universitarias de Zaragoza, 1998), permitiendo que los mensajes puedan ser leídos (descifrados) únicamente por el emisor de los mismos y el (o los) destinatario(s) deseado(s), pudiendo estos últimos tener la seguridad de que dichos mensajes proceden de quienes dicen ser los emisores, y que no han sido alterados en el camino. De esta manera, las palabras claves para la criptografía son privacidad, integridad, y autenticidad.




Cifradores simétricos: encriptan y desencriptan la información utilizando la misma clave.

Por ejemplo, digamos que se quiere enviar el texto "gabriel" como mensaje cifrado, utilizando la cadena "0123" como clave.



Caracteres ASCII
Hex
gabriel (código ASCII tomado de aquí) 67  61  62  72  69  65  6C
0123012 (la clave se repite secuencialmente hasta abarcar todos
los caracteres que se desean encriptar)
30  31  32  33  30  31  32
Algoritmo de cifrado: OR Exclusivo (Mensaje cifrado) 57  50  50  41  59  54  5E 
Tabla 1: Encriptación del mensaje


Caracteres ASCII
Hex
Mensaje cifrado 57  50  50  41  59  54  5E
0123012 (la clave se repite secuencialmente hasta abarcar todos
los caracteres que se desean encriptar)
30  31  32  33  30  31  32
Algoritmo de descifrado: OR Exclusivo (Mensaje original) 67  61  62  72  69  65  6C
Tabla 2: Desencriptación del mensaje

Ejemplo 1: Encriptando con RC4 (algoritmo de cifrado simétrico por stream) mediante la API de OpenSSL

a) Envío la cadena de caracteres "HolaMundo" al archivo y lo leo con "cat":


b) Encripto el archivo "mensaje" tomándolo como entrada, y obteniendo "mensaje.enc" como salida (cuando pide la contraseña de encriptación se puede poner cualquier cadena de texto, yo puse "0123"):


c) Compruebo la encriptación del archivo:


d) Desencripto y comparo:


Ejemplo 2: Encriptando con 3DES (algoritmo de cifrado simétrico por bloques, que cifra un cierto mensaje 3 veces utilizando claves aleatorias de 64 bits, razón por la cual es un tanto "lento").


Ejemplo 3: Lo mismo con el algoritmo -más moderno y rápido- AES (cifrado simétrico por bloques) de 256 bits en modo CBC:


Ejemplo 4: Finalmente, el mismo procedimiento pero esta vez utilizando el algoritmo de cifrado simétrico por bloques Blowfish (que por defecto utiliza claves de 448 bits):

viernes, 23 de noviembre de 2012

Uso de [m]awk en GNU/Linux

Hoy me interesó adentrarme un poco en el uso y la utilidad del comando awk en GNU/Linux. 
De hecho, es un lenguaje de programación en sí, con una sintaxis muy parecida a C. En Debian (al menos) la implementación e intérprete de awk recibe el nombre de mawk, y se utiliza mayormente para buscar patrones (modelos) en archivos de texto.
Del man page de mawk:
Un programa awk es una secuencia de pares patrón {acción} y definiciones de funciones. Los programas cortos en la línea de comandos generalmente se encierran en comillas simples para evitar que la consola los interprete, mientras que los más largos pueden ser leídos directamente desde un archivo utilizando la opción -f. Los datos de entrada son leídos desde la lista de archivos en la línea de comandos o desde la entrada estándar stdin si la lista es vacía. La entrada se descompone en registros, tal como se determina por la variable de separación de registros, RS. Inicialmente, RS="\n" (salto de línea) y cada fila se considera un registro separado. Cada uno de ellos se compara con el patrón especificado y si concuerda, se ejecuta el programa {acción}.
Un ejemplo: Tengo la siguiente hoja de cálculo en la que se detallan Nombre y Apellido, Usuario, Contraseña, y Email de un cierto grupo de personas (podrían ser un montón de campos y registros más, pero para la demostración estos son suficientes).

Figura 1: Hoja de cálculo

Lo que quiero obtener es la dirección de email de un cierto registro, y mostrarlo junto con el Nombre y Apellido del mismo.

PRIMER PASO: Guardo el contenido de la hoja de cálculo en formato .csv:

Figura 2: Archivo de texto plano

SEGUNDO PASO: Desde la consola ejecuto el siguiente comando (si quisiera los datos mencionados anteriormente para Elvis Tek):


RESULTADO:


Figura 3: Ejecución del comando y resultado

Explicación de la sintaxis del comando:
  1. -v var=valor   asigna valor a la variable var. En este caso (OFS="\t"), se asigna a la variable OFS (Output Field Separator) el valor tabulador, para separar cada campo de la salida (resultado).
  2. BEGIN   La palabra reservada BEGIN indica el comienzo del programa interpretado por awk, el cual puede especificarse en la misma línea del comando o desde un archivo que contenga las instrucciones. 
  3. {FS=","}   FS (Field Separator) indica el caracter que se utiliza para separar los campos en el archivo que se toma como entrada (en este caso, ~/pruebas/nombres y usuarios.csv).
  4. $1=="Elvis Tek" {print $1,$4}   Si el primer campo del archivo de entrada contiene la cadena Elvis Tek, devolver los campos $1 y $4, que según se pueden ver en la figura 1, corresponden a Nombre y Apellido, y Email, respectivamente.

Génesis

Comienzo este blog para documentar las cosas que hago y que aprendo con GNU/Linux, lenguajes de programación (C#, Bash scripting, Java, Python, Ruby, PHP, Vbscripting... sí, todavía algo se usa), bases de datos (SQL Server, MySQL), y desarrollo de aplicaciones web (HTML5, CSS / CSS3) tanto por mi trabajo (soy desarrollador junior en una empresa cuyo principal cliente es la mayor compañía de productos masivos de consumo a nivel mundial) como en cosas personales.
Bastante variadito, pero acá vamos...