Scripts con While y For

Hola a todos, en esta entrada les hablare sobre como podemos reducir el tiempo en la ejecucion de algunas tareas desde la consola de comando de Linux, en este caso utilizaremos BASH como interprete de comandos desde la consola.


Un Script es una programa que se crea con el fin de automatizar un conjunto de tareas, en este caso en particular utilizare el script para crear un listado de usuarios en el sistema, si nos ponemos a pensar la creacion de 5 o 10 usuarios en linux es algo relativamente facil, pero cuando el caso es de crear 1000 usuarios en el sistema se complica mucho la ejecucion de 1000 comandos para crear usuario por usuario.
En este ejemplo les explicare como podemos crear con un solo comando todo un listado de usuarios en el sistema.
Lo primero que debemos hacer es tener claro cuales son los usuarios que vamos a crear, yo tengo los usuarios listados en un archivo.


Luego de tener el archivo con los usuarios lo que haremos es utilizar el comando While, lo que hace este  comando es cojer los campos de una o varias columnas y moestrarlos como resultado, por ejemplo en la imagen anterior tengo solo una columna entonces solo tendre que crear una variable que me llame esa columna.


Ahora este ejemplo lo hare llamando dos columnas de una archivo que tiene 4 columnas, seria algo como esto, primero les muestro el archivo y luego el comando.

Noten que en la imagen resalto los campos mas importante del comando que vendrian siendo los parametros que extraigo del archivo, como hay 4 campos en el archivo entonces  pongo 4 variables en el comando (a, b, c, d) y luego ejecuto la accion que quiero en este caso es el comando echo , ahora les mostrare como creamos los usuarios del archivo user.


Ahora voy a realizar la creacion de varios usuarios con el comando for, es algo parecido a lo anterior en el punto de vista de la sintaxis del comando, pero hay que especificar los usuarios dentro del script el comando for lo que nos permite hacer es realizar una accion repetitivas veces.


Espero que les haya servido esta informacion, recuerden que es mucho mas facil automatizar tareas que hacerlas una por una puedes reducir tiempo con esto.

Sitios de interes:

Implementacion de LVM

En esta ocasion les comentare como solucione un problema que puede ser muy comun en el campo laboral o en casa, estaba trabajando normal en uno de los servidores que administro y me salio una advertencia de que el volumen en el que trabajo ya no tenia espacio para almacenar datos en el, menos mal mi sistema lo implemente con LVM ya que podia agregar un nuevo volumen y copiar mi informacion alli o podria extender el volumen que se habia agotado para seguir almacenando informacion en el, personalmente y por conveniencia elegi la primera opcion debido a que en este servidor hay un servicio de archivos compartidos y necesitaba compartir un recurso donde los usuarios guadarian mucha informacion por esta razon elegi crear un nuevo volumen.


Voy aprovechar esta ocacion para mostrarles como podemos implementar desde cero LVM ( Logical Volume Manager ) que es una opcion muy util para implementar en nuestros equipos.

¿ Que es LVM ?
Sus siglas en ingles son Logical Volume Manager, es una funcion del kernel de linux que nos permite administrar los discos, por medio de LVM podemos aumentar o disminuir VL o VG cosa que no podemos hacer con los volumenes fisicos.

¿ Como funciona ? 
La base del LVM son los PV ( Volumenes Fisicos ) que son las particiones del disco con sistema LVM, con estos volumenes fisicos se crean los VG ( Grupos De Volumenes ) estos volumenes son los que nos proporcionan la cantidad de espacio que podemos asignar a todos los volumenes logicos que queramos crear y por ultimo estan lo LV ( Volumenes Logicos ) que son los volumens con los que trabajamos a la final, son a los que le implementamos el sistema de archivos y los podemos ver como dispositivos montados en un punto por ejemplo /home.

 Esta imagen lo puede explicar mejor.


Como se muestra en la imagen hay tres particiones fisicas que trabajan con sistema LVM y hacen parte de los volumenes Fisicos PV, este conjunto de PV componen el Grupo de Volumenes que a su ves soporta a dos Volumenes Logicos LV que son los que veria el usuario final como /home o /var etc.

Creacion de LVM

Lo primero que debemos tener en cuenta es contar con un disco disponible para utilizarlo como LVM, luego lo particionamos dejando esa particion con toda la capacidad del disco.



En mi caso tengo un disco ( /dev/sdd ) de 1G para hacerles la prueba de como configurar LVM y en realidad esta es mi maquina donde pruebo todo antes de aplicarlo en el servidor que esta en produccion.



Ahora ya tenemos creada la particion sdd1 con 1G de espacio, lo que haremos ahora es crear el PV con esa particion o si ustedes tienen mas particiones para asignarlas cono LVM pueden hacer lo mismo.



Desde ahora ya tenemos un PV de 1G y lo que procederemos hacer es crear un VG para asignar desde ahi el espacio que queremos a nuestros Volumenes Logicos LV.



Como pueden ver ya tenemos un VG de 1G y desde este VG configuraremos todos los LV que queremos tener en nuestro sistema, les mostrare a continuacion como crear un LV partiendo del VG que ya hemos creado.



Lo que hice fue crear una particion de 500M que se llamo lv-home y esas 500M las tome del VG llamado lvm-storage. Entonces en el VG quedaron disponible 500M mas para otras futuras particiones o volumenes que quiera crear.

Ahora falta darle un formato a este volumen para poder montarlo en algun punto dentro del sistema.


Como ven en la imagen el formato que le di a la particion o volumen logico fue EXT3 ya ustedes deciden que formato eligen dependiendo a sus necesidades, Ahora ya tenemos un volumen llamado lv-home que podemos montar en algun punto del sistema de archivos.


En mi caso el punto que elegi para montar este nuevo volumen fue /home, otra forma con la cual pueden montar el volumen lv-home puede ser agregando una linea al archivo /etc/fstap y sera muy util para qe se monte la particion automaticamente cuando inicies tu equipo. 

 
Espero que les haya servido esta informacion que les comparto y si tienen alguna duda me pueden dejar un comentario o escribirmen al e-mail: jmadrigal@vcb.com.co o twitter: @jmadrigal07 

Enlaces de interes:

PhpMyadmin en centos

En esta entrada les explicare como instalar la aplicación phpmyadmin bajo el sistema operativo centos 5.6, El problema es que en ubuntu es muy sencillo instalar este administrador de la base de datos Mysql solo es apt-get install phpmyadmin y luego dirigirnos a la web y buscar la aplicación http://127.0.0.1/phpmyadmin, bueno en centos hay que hacer un par de cositas adicionales que les mostrare a continuación.


Lo primero que debemos hacer es lo normal instalar el servidor web, la base de datos Mysql y el soporte PHP.

Instalación de paquetes Necesarios:

yum install mysql mysql-server
yum install php php-mysql php-gd
yum install httpd 

Y en mi caso me gusta que el servicio mysqld se inicie automáticamente cuando el sistema se inicie en los niveles 2345 para esto ejecuto este comando.

chkconfig --level 2345 mysqld on

Luego inicio los servicos

/etc/init.d/mysqld restart    # Reinicio la base de datos
/etc/init.d/httpd restart       # Reinicio el servidor Web Apache

Ahora debo cambiar el password de la base de datos que por defecto no trae ninguno, para esto ejecuto el siguiente comando.

mysqladmin -u root password TUPASSWD

Después de esto nos dirigimos al DocumentRoot de nuestro servidor web que en este caso es /var/www/html y desde aquí descargaremos el paquete phpmyadmin en la ultima versión 3.4.3.1 con el siguiente comando.

wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/3.4.3.1/phpMyAdmin-3.4.3.1-english.tar.gz

Nota: si quieren ver las versiones actuales

Ahora lo que haremos es descomprimir el paquete de esta manera.

tar xvfz phpMyAdmin-3.4.3.1-english.tar.gz 

y nos quedara el directorio phpMyAdmin-3.4.3.1-english descomprimido, lo que se suela hacer por comodidad es mover el directorio para cambiarle el nombre y que no sea tan extenso y complicado de digitar.

mv phpMyAdmin-3.4.3.1-english phpmyadmin

Ahora dentro de la carpeta phpmyadmin copiaremos el siguiente archivo y despues procederemos a modificarlo.

cp config.sample.inc.php config.inc.php

con tu editorde texto preferido modificas el archivo.

vim config.inc.php

y debe quedar algo parecido a esta imagen, solo cambias lo opción cookie por http. 



Guardas el archivo y por ultimo reinicias el servicio y despues podras ingresar a administrar la base de datos mysql por medio del entorno grafico que nos facilita la herramienta PhpMyadmin.

 /etc/init.d/httpd restart    # Reinicio El servidor Web

Ahora voy al siguiente sitio de mi servidor web que es donde esta alojado el PhpMyadmin, http://ip_servidor/phpmyadmin.




Espero que esta información les haya servido.

Sitios de interés:



Direcciones IPv6 ULA

En esta entrada les hablare sobre las direcciones IPv6 ULA, Las direcciones ULA (Unicast  Local Address) Son direcciones únicas en una red local o intranet, es decir que estas direcciones son el parecido al bloque de direcciones privadas en la versión cuatro del protocolo IP (IPv4) este tipo de direcciones estan sobre un bloque que las identifica el cual comienza por fc00::/7 este bloque es el que le da identidad a la direccion, estas direcciones se definen en la RFC 4193.



El formato de una dirección unica enrutable en IPv6 es el siguiente; Primero contiene un campo donde se sitúa el identificador de enrutamiento y consta de 48 bits, luego sigue el campo que identifica la subred (subnet id) este campo esta constituido por 16 bits y los siguientes 64 bits de la dirección los abarca el identificador de interfaz que por estándar se trabaja con el OUI-64 osea que los 64 bits de este campo se completan con la dirección MAC de cada interfaz del equipo como lo habíamos visto en la entrada anterior.


En la imagen se pueden guiar para entender un poco mejor como se constituye las direcciones IPv6 de alcance global, digo de alcance global por que las direcciones ULA se pueden enrutar de una red a otras pero como aclare anteriormente no se pueden ver desde Internet, pero las podemos utilizar para una  PYME (Pequeñas o medianas empresas) osea una organización o una red privada que solo necesite conexión local entre subredes.

Ahora les mostrare prácticamente como funcionan las direcciones ULA, primero les daré a conocer la problemática y luego procederemos a solucionarla.

La problemática que me he planteado para esta ocasión es la siguiente, Tengo dos subredes una es fc01:0:0:1::/64 y la otra es fc01:0:0:2::/64 y en la subred fc01:0:0:1::/64 tengo una aplicación Web que debe ser accesible desde la subred fc01:0:0:2::/64.


La simulación que haré sera esta; el equipo que enrutará las dos redes sera un servidor centos en donde habilitare el enrutamiento IPv6 y configure dos tarjetas de red  por donde comunicare las dos redes.

El primer paso que haré es habilitar el enrutamiento, en sistemas GNU/linux en este caso centos para habilitar el enrutamiento solo basta con agregar un bit que es el que indica si una interfaz puede enrutar o no (1=Enrutamiento habilitado; 0=Enrutamiento deshabilitado) en este caso elegiré todas las interfaces para que sean enrutables. 


Luego de esto debo configurar las direcciones IP en las interfaces, en este caso la interfaz eth0 sera la direccion fc01:0:0:1::1/64 y la eth1 es la IP fc01:0:0:2::1/64.


Ahora configuro la eth1



Ahora me voy a configurar el cliente en la red fc01:0:0:1::/64 y le asigno una dirección dentro de la red que he especificado.



Ahora pruebo si hay conectividad con el equipo enrutador, recuerden que por ser este un protocolo IP nuevo debe trabajar con nuevos protocolos como por ejemplo Ping6.


Como pueden ver en la imagen anterior el ping6 fue satisfactorio, eso quiere decir que hay conexión con el enrutador; Observen que ahora con este tipo de direcciones no hay necesidad de especificar la interfaz por donde es alcanzable el destino ya que estas direcciones se pueden enrutar en cambio las direcciones IPv6 de Link-Local no son enrutables.

Bueno ahora falta configurar el cliente en la red fc01:0:0:2::/64 los pasos son practicamente los mismo que los que hicimos anteriormente.


Bueno ahora ya estan configuradas las dos redes tratare de dar ping de una red a otra para ver si hay conectividad entre ellas.


Como pueden ver el ping fue erróneo, Este error se debe a que los clientes aun no saben a quien preguntarle sobre una subred que no conocen para esto debemos configurar una puerta de enlace o una ruta para que el cliente le pregunte al enrutador por la red que no conoce.

Nota: Aclaro que este paso hay que hacerlo ya que la configuración de la dirección fue manual, pero casi nunca se va a ver este caso ya que hay protocolos de asignación automatica de direcciones DHCP que te da los parámetros necesarios para el cliente, entre ellos el servidor de nombres de dominio DNS y una puerta de enlace predeterminada. 

Configuracion de rutas estaticas.

Cliente 1:



Lo que hicimos con este comando fue decirle al equipo que cuando un paquete vaya hacia la dirección fc01:0:0:2::/64 lo envíe por la interfaz eth0 donde se comunicará con el enrutador.

Cliente 2:



Ahora volvamos a probar el ping6 entre redes, con esta configuración ya nos debería dejar pasar los paquetes de una red a otra. 


Como pueden observar en la imagen anterior ambas maquinas en diferentes redes se pueden conectar, Esto se debe por que hay un intermediario que esta encaminando los paquetes en la mitad de las dos redes.

Ahora El resultado final del reto que nos hicimos al comienzo de este Post.

Bueno para hacer esta prueba final configure otro cliente en la red fc01:0:0:2::/64 ya que la maquina con la que estaba haciendo las pruebas anteriores no tiene entorno grafico y no queria mostrarles el contenido de la pagina desde consola. Les mostrare la configuración de la direccion en la maquina nueva y luego el resultado final accediendo a la pagina.





Hemos llegado al final de este post, espero que todo lo que vimos les haya servido si tienen inquietudes acerca de este tema me pueden dejar un comentario o me pueden contactar en

twitter: @jmadrigal07
E-mail: jmadrigalm@misena.edu.co

Sitios de interes:














SSH y Telnet

En esta entrada les hablare sobre los servidores de administración remota por red mas comunes en este campo los cuales son SSH y Telnet les hablare sobre las diferencias de cada uno de estos servicios y elegire el mas seguro para implementar aun mas seguridad que la que viene por defecto en el servicio.


Configuracion SSH y Telnet en GNU Linux

Espero que les aya servido esta información.

Sitios de interés:

Direcciones IPV6 de enlace local

En esta entrada les hablare de nuevo sobre las direcciones IPv6 ahora enfocándome en uno de los tipos de direcciones que pueden haber en este protocolo, Las direcciones IPv6 de estado de enlace local o link-local son direcciones lógicas que se asigna el mismo equipo cuando hay ausencia de un servicio como DHCPv6 o un agente de enrutamiento (RA) previamente configurado en el enrutador, estas direcciones son parecidas a las APIPA en IPv4.

El formato para crear una dirección link-local es la siguiente, como ya les había contado en una de las entradas anteriores este tipo de direcciones consta de 128 bits así como IPv4 consta de 32 bits. En la imagen pueden apreciar que las direcciones de enlace local contienen 10 bits que identifican el prefijo, los siguientes 54 bits después de este campo deberán estar en ceros y por ultimo hay un compo que consta de 64 bits el cual se configura con la dirección mac de cada maquina con el fin de que no se vaya a repetir ninguna dirección el la red.


A continuación les mostrare como crear una dirección de link-local por medio de una calculadora IPv6, esto lo hago para que entiendan un poco mas lo que les quiero dar a entender pero como ya les había dicho estas direcciones son auto-configuradas por el mismo equipo cuando tiene soporte de IPv6 que hoy en día la mayoría de sistemas operativos vienen con soporte para el protocolo IPv6.

lo primero es instalar la calculadora.


Después de haber hecho esto me dirigí al manual de la calculadora con el comando man ipv6calc y busque la opcion que necesitaba para crear una direccion ipv6 por medio de la mac de mi equipo.


Ahora con el siguiente comando podemos calcular los 64 bits que identifican la interfaz o el campo de host en IPv4.


Como ven en la imagen ese es el proceso que hace el equipo para asignarse unadireccion IPv6 de enlace local, estas direcciones no son enrutables hacia otras redes pero si se pude conectar con los equipos que esten configurados como link-local address en la red.

ejemplo:

Voy a dar un ping6 a una dirección multicast para las direcciones de enlace local, esta dirección es ff02::1 como pueden ver en la imagen debo de especificar la interfaz por la cual voy hacer el ping, esto solo se hace con estas direcciones, cuando veamos los otros tipos de direcciones IPv6 no va a ser necesario especificar el puerto en el comando. El resultado de este ping nos arroja una solo dirección de enlace local que esta directamente conectada a nuestro equipo.


Ahora ya estamos navegando por medio del protocolo IPv6, en este momento podemos instalar cualquier servicio que corra sobre el protocolo IPv6.
en una de mis maquinas he instalado un servidor web cherokee que soporta IPv6, voy hacer unas prubas para mostrarles que se puede navegar por medio de IPv6.


como vieron en la imagen anterior el servidor esta escuchando por los puertos 9092 y 80 bajo :: que significa cualquier dirección IPv6 aunque también abarca IPv4, en conclusión ahora podemos navegar por medio de ambas versiones del protocolo IP.


En la anterior imagen pueden verificar el acceso por medio de una dirección IPv6 a un servicio Web en este caso Cherokee.

Sitios de interes:



    Vulnerabilidad en Metasploitable

    En esta entrada les hablare sobre una Vulnerabilidad que he encontrado en Metasploitable; Metasploitable es una maquina que contiene 12 servicios que puedes vulnerar fácilmente por que esta echo para eso, para hacer practicas de ataque a servicios vulnerables es un proyecto echo por los creadores de metasploit.

    Esta vulnerabilidad no esta orientada a un servicio como tal, sino a la seguridad en los usuarios del sistema que contienen un shell. Esta maquina tiene configurado 4 usuarios con los que nos podemos loguear en una shell, estos usuarios son. 

    msfadmin : msfadmin
    user : user
    service : service 
    postgres : postgres 

    Lo que encontré examinando este servidor fue que tiene un usuario diferente a los demás, les mostrare la configuración de los cuatro usuarios para que diferencien uno de otro.

    usuario msfadmin: 

    usuario user:

    Esta es la configuración del usuario user al igual que service y postgres, como pueden ver estos tres usuarios son totalmente diferente al usuario msfadmin y  una de las cosas mas importantes que encontré es que este usuario hace parte del grupo admin, esto quiere decir que el usuario msfadmin puede loguearse como root, como lo pueden ver en la siguiente imagen con el comando sudo y la opcion -i. 


    Este método se hace para no distribuir la contraseña del root y tener una mejor administración de lo que hacen los usuarios con privilegios de root; como por ejemplo, si hay dos usuario que hacen parte del grupo admin y uno de ellos hace algo malo, el root podrá saber que usuario fue el que ocasiono el error. 

    Bueno hasta ahí no hay nada malo si lo vemos en un contexto de administración pero si lo vemos desde un punto de vista de seguridad informática nos daremos cuenta que la contraseña del usuario msfadmin es muy débil y esto nos puede traer consecuencias muy graves por que podemos ser victimas de un ataque a fuerza bruta y el atacante va a poder entrar con facilidad debido a la mala configuración de la contraseña.

    Ejemplo de un ataque a fuerza bruta contra el usuario msfadmin

    Para realizar esta prueba vamos a utilizar una maquina remota y utilizaremos el comando medusa, este comando lo utilizaremos para hacer el ataque. en este caso voy a trabajar con la información que obtuve en la ejecucion anterior de un expoit contra la misma maquina en la que esta el usuario msfadmin, la informacion la pueden ver en este link.
    Ahora lo que haré es atacar por medio de medusa al servicio ssh y dirigiendome al usuario msfadmin, Para esto primero miremos como funciona medusa "medusa es una Herramienta para probar la debilidad de las claves, en distintos protocolos, utilizando para ellos diccionarios de claves" francisconi.org. 

    Estas son las opciones que utilizaremos para ejecutar medusa
    -h : con esta opción especificamos el host al que vamos a atacar.
    -u : Especifica el usuario al cual atacaremos.
    -U : un archivo que contiene los usuarios que van a ser atacados. 
    -p : password. 
    -P : archivo con los password.
    -M : Especificamos el modulo que vamos a utilizar en este caso SSH.

    Lo primero que voy hacer es crear un archivo donde esten las contraseñas que voy a provar contra el usuario o grupo de usuario que quiero atacar.


    Ahora ejecuto el comando medusa con sus opciones correspondientes para atacar el servidor, en la siguiente imagen pueden ver el comando. Y al final del comando esta resaltado en rojo el resultado del comando, nos dice que el usuario mfsadmin fue comprobado con el password msfadmin y su resultado fue exitoso. 


    Ahora por medio del servicio ssh ingresare a la maquina remota utilizando el usuario msfadmin y su contraseña correspondiente, como pueden ver en la imagen el password fue exitoso y ahora tenemos acceso a este usuario.


    Ahora estando logueado desde el usuario miramos la configuración, ejecutamos el comando sudo -i y nos pide la contraseña del usuario msfadmin y entraremos como root en esta maquina.



    Como pueden ver fue muy fácil tener acceso por medio de este usuario al root por que la contraseña es muy débil, la solución o consejo es cambiar la contraseña por una segura que sea mucho mas difícil de adivinar, esta contraseña puede tener números, letras mayúsculas y minúsculas, símbolos, etc. 

    Espero que lo que hemos visto les haya servido, si hay alguna inquietud puedes dejar un comentario en el post y si te gusto este post twittealo. 

    Sitios de interes:




     

    Geek By The System Copyright © 2011 -- Template created by O Pregador -- Powered by Blogger