Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

domingo, 29 de noviembre de 2015

Let's encrypt se avecina ¡Certificados gratis para todos!

En el día de hoy vengo a hablaros sobre uno de los proyectos que más me han llamado la atención este año; no sólo por que la idea en sí me parece muy buena, sino porque probablemente suponga un antes y un después para la seguridad en Internet: Se trata de un proyecto llamado Let's Encrypt. Dicho proyecto consiste en nada menos que una entidad certificadora que crea certificados de seguridad que protegen las conexiones de red realizadas a los servidores... Esto hasta aquí no parece que se distinga de otras empresas certificadoras, pero lo que distingue especialmente a esta empresa es el hecho de que Let's Encrypt general dichos certificados de forma gratuita

encrypt-portada


Probablemente este proyecto suponga un antes y un después en la seguridad de Internet pues hasta el momento solo teníamos dos opciones: El primero era recurrir a una de estas empresas, las cuales ofrecían los certificados firmados a un precio relativamente alto o recurrir a certificados creados por nosotros mismos, como por ejemplo certificados SSL creados en Linux, si bien estos tenían la desventaja de que los navegadores no consideraban estos certificados como "seguros", y necesitaban que nosotros verificásemos manualmentes que efectivamente confiamos en dichos certificados... Esto a nivel de seguridad no suponía una desventaja, pero sí a nivel de usabilidad y confianza del usuario final. No es lo mismo acceder directamente a una página web que el hecho de que el navegador nos avise de que el sitio posee un certificado que no es de confianza...

Esto ha supuesto un gran revuelo dentro de sector informático, pues supone un gran cambio en el modelo de negocio de este tipo de empresas. Hasta ahora uno que deseaba tener un certificado firmado, tenía que ir a una entidad de este tipo y comprar el certificado que posibilitaría el uso de HTTPS en la página web; certificado que tenía una validez limitada, seis meses, un año... Esto suponía un importante desembolso económico, pero necesario en muchos casos.

Ahora con esta empresa todo apunta a que se avecinará el cambio pues los modelos de negocio deberán adaptarse a los nuevos tiempos... Con certificados gratis, a menos que se trate de una situación muy concreta, ¿Quien se molestará en pagar por éstos? Esto probablemetne suponga a que las empresas que vivían hasta el momento de estos certificados, deban cobrar por servicios de valor añadido (soporte técnico, formación, consultoría, etc...) en vez de por el producto en sí, cosa que probablemente lleve su tiempo...

El proyecto comenzará a emitir sus primeros certificados el 3 de Diciembre; certificados que como ellos mismos apuntan, pertenecen a una fase beta. Aún así, el proyecto está dando mucho que hablar, y lo seguirá haciendo en el futuro visto lo visto.

No hay duda de que el proyecto tiene un gran potencial y que puede hacer por fin posible el "sueño" de un Internet más seguro en el que las páginas web dejen atrás http. El tiempo dirá si el proyecto es capaz de seguir adelante, pero en menos de un mes se ha ganado muchos adeptos...

¿Y vosotros...?¿Os animareis a probarlo?

Saludos.

martes, 24 de noviembre de 2015

La pesadilla del comando rm en Linux

El borrado de archivos en Linux puede ser desde una tarea muy simple y segura, hasta una catastrofe dependiendo del método usado para borrar archivos o del entorno en el que se esté trabajando; ¿Cuantas veces nos hemos echado las manos a la cabeza por borrar algo que no debíamos? A mí la primera vez casi me dio un ataque, pero de los errores se aprende y uno debe de buscar métodos para evitar desastres y evitar el tener que recurrir a herramientas de terceros para intentar recuperar lo eliminado. El eliminar un archivo en un entorno de escritorio (es decir, en un entorno gráfico) no supone un problema en sí mismo, pues todos los entornos poseen de una papelera que generalmente se guarda en la carpeta personal del usuario; su ruta sería generalmente ~/.local/share/Trash y su funcionamiento se asemejaría bastante con el de la papelera de Windows, pues existe un icono parecido que puede gestionarse con la misma facilidad y podemos acceder a esa ruta desde la consola si nos sentimos más comodos. El problema viene cuando recurrimos al comando rm...

rm_portada

Rm, aunque no elimina por completo la información del disco duro y puede ser recuperado con "facilidad" mediante herramientas especiales, hace que la recuperación de un archivo sea laboriosa y no siempre exitosa, cosa que no tendría que ser así. Para prevenir este tipo de sustos, podemos recurrir a uno de los siguientes métodos.


Método 1: Mediante la herramienta trash-cli

Admito que esta opción no es mi favorita, pero es interesante conocer su existencia.  Respeta la misma filosofía que la que se usa en el entorno de escritorio, manteniendo todo debidamente estandarizado... Por contra esta herramienta requiere eliminar el habito de usar el comando rm; un habito que, personalmente se me hace difícil de quitar, y siempre se le puede a uno escapar un comando rm cuando no debe... El factor humano es el más peligroso de todos... Esto no le resta utilidad a esta herramienta, y por ello lo veremos a continuación.

Para empezar, esta herramienta no está instalada por defecto en el sistema operativo, aunque puede ser instalada fácilmente con los repositorios, así que para disfrutar de esta utilidad tendremos que escribir:

apt-get install trash-cli

La instalación en un principio parece que no ha hecho nada especial, y en un principio no veremos cambios especiales ni "papeleras de reciclaje". De lo que sí que dispondremos será de de la utilidad trash, que posee el siguiente funcionamiento:

Comenzaríamos con lo más básico y fundamental; la eliminación del archivo. Aquí el concepto no es denominado borrar el archivo, sino desplazarlo a una "papelera" alojada en la ubicación ~/.local/share/Trash tal y como se hace en un entorno gráfico. Esto se logra mediante el comando trash-put, seguido del nombre del fichero a eliminar... Con lo que si deseasemos eliminar el fichero importante.txt, escribiríamos:

trash-put importante.txt

Esto tiraría a la papelera el archivo seleccionado, papelera cuyo contenido podríamos consultar mediante el comando:

trash-list

En dicho listado observaríamos el nombre del archivo y además también la fecha y hora en la que  se "borró" éste.

Obviamente podemos eliminar elementos de la papelera, ya sea de forma individual o global... Por ejemplo para borrar un único archivo individual, como por ejemplo importante.txt escribiríamos:

trash-rm importante.txt

Mientras que para un vaciado completo el comando sería más simple escribir:

trash-empty

Todo lo enviado a la papelera de reciclaje puede recuperarse... Para ello habrían dos opciones: La primera sería dirigirnos la ubicación de la papelera y mover el fichero a mano, mientras que la segunda y más eficiente sería recurrir al comando:

restore-trash

Aquí el comando es un poco más complejo que el resto, pues al escribir el comando te mostrará el listado de elementos que están en la papelera (en caso de haberlos) precedidos por un el número de elemento (0,1,2,3,4...). Dicho número empezaría siempre desde 0 y en caso de haber por ejemplo 5 elementos, el último elemento sería el 4. Tras mostrar todos los elementos con su respectivo número, la herramienta nos preguntará qué elemento deseamos restaurar, elemento al que haremos referencia escribiendo su número. Si importante.txt fuese el elemento número 3, habría que introducir dicho número.

La herramienta es indudablemente útil y mantiene la filosofía de papeleras del sistema, pero como bien he dicho antes, corremos el riesgo de escribir el comando rm accidentalmente y causar una "catástrofe"; con lo que una utilidad que dependa tanto del factor humano no es del todo segura.


Método 2: Hacer que rm mueva el contenido a otro sitio mediante el uso de alias

Este método no requiere instalar nada y no permite que el factor humano entre en juego, pues alterará el comportamiento del comando rm. Lo malo de este método es que no mantiene la misma filosofía que la del método 1... Es decir no es tan "limpio" como el anterior método y requiere la creación manual de una papelera de reciclaje para cada usuario... Aún así es innegable que es un método muy seguro que no da lugar a errores.

Para lograrlo usaremos un concepto llamado alias, que puede asociar un comando a una acción determinada. Dicho comando puede ser uno existente, cuya función original sería sobrrescrita, o puede ser uno que inventemos nosotros. La única pega que tienen los alias es que únicamente son válidos en la sesión sobre la que son establecidos; es decir que si por ejemplo se está logeado como root, solo esa sesión de root podría usar ese alias... Aún así ese bache puede ser evitado, tal y como veremos más adelante.

Lo primero que habría que hacer sería crear una carpeta llamada papelera dentro de la carpeta personal de cada usuario para que cada uno disponga de su propia papelera, mediante el comando mkdir. Además también es recomendable modificar los permisos de ésta para que únicamente su dueño pueda modificarlo; lo cual se traduce en que cada usuario tiene que escribir dos líneas en la consola:

  1. mkdir ${HOME}/papelera
  2. chmod 600 ${HOME}/papelera

Con la carpeta creada, lo único que tendríamos que hacer sería crear nuestro nuevo alias; alias al que llamaríamos rm y al que le diríamos que moviese el fichero seleccionado a su correspondiente papelera. Esto puede parecer complicado, pero es tan sencillo como escribir:

alias rm='mv -t $HOME/papelera'

Tal y como he dicho, una alias solo es válido para la sesión actual del usuario con lo que para hacerlo permanente para el usuario habría que añadir el comando que acabamos de escribir al fichero .bashrc, el cual se encuentra dentro de la carpeta home de éste. Obviamente, si deseásemos hacerlo para todos habría que añadir dicha línea para todos...

Para no dejar ningún cabo suelto; ya sea con las papeleras o con la inclusión del alias en el fichero .bashrc de todos los usuarios, he creado un pequeño script que tendrá en cuenta a todo el mundo:

  1. #!/bin/bash
  2. cat /etc/passwd |grep home |cut -d ":" -f 1 > /tmp/listado.txt
  3. mkdir /root/papelera
  4. chmod 700 /root/papelera
  5. echo "alias rm='mv -t "'$HOME'"/papelera'" >> /root/.bashrc
  6. while read USER
  7. do
  8.         mkdir /home/${USER}/papelera
  9.         chown ${USER}:${USER} /home/${USER}/papelera
  10.         chmod 700 /home/${USER}/papelera
  11.         echo "alias rm='mv -t "'$HOME'"/papelera'" >> /home/${USER}/.bashrc
  12. done < /tmp/listado.txt
  13. rm /tmp/listado.txt

Con esto ya podríamos escribir el comando rm sin miedo, si bien es cierto que no estamos usando una papelera "real", sino una creada por nosotros.


Método 3: Combinar los dos primeros métodos

A sabiendas de lo que pueden ofrecernos los dos primeros métodos, podemos combinar las bondades de ambos para evitar borrar por accidente mediante el comando rm, al mismo tiempo de que mantenemos una estructura limpia y organizada. La única "pega" de este último método es que requiere tener trash-cli instalado, pero no supone un gran inconveniente a menos que se carezca de conexión a internet. En mi opinión el método más limpio y efectivo de los tres.

La combinación de ambos métodos consistiría en crear un alias para rm que llame al comando trash-put. Dicho alias quedaría así:

alias rm='trash-put'

Simple y efectivo, pues mantendrá la estructura de papeleras que poseen los entornos de escritorio y evitaremos crear carpetas innecesarias. Obviamente habría que incluir este alias en el fichero .bashrc de todos los usuarios; inclusión que podemos hacer con un pequeño script basado en el anterior:

  1. #!/bin/bash
  2. cat /etc/passwd |grep home |cut -d ":" -f 1 > /tmp/listado.txt
  3. echo "alias rm='alias rm='trash-put'" >> /root/.bashrc
  4. while read USER
  5. do
  6.         echo "alias rm='trash-put'" >> /home/${USER}/.bashrc
  7. done < /tmp/listado.txt
  8. rm /tmp/listado.txt

Gracias a este método tendríamos un método limpio y seguro para borrar nuestros archivos mediante el comando rm.


Todos tienen sus virtudes y defectos, si bien el tercero es el que en mi opinión menos carencias tiene. Aún así, queda siempre a elección de cada uno el método a utilizar para la prevención de borrados accidentales.

Espero que os haya resultado útil.

Saludos.

domingo, 22 de noviembre de 2015

Conocer el ancho de banda consumido mediante iftop

Hace alrededor de un par de semanas hablé sobre el limitamiento del ancho de banda en Linux, ya sea en un equipo individual o en varios. Si bien dicho limitador es muy útil, también lo es el conocimiento del ancho de banda consumido, pues de nada sirve saber cómo limitar el ancho de banda de un equipo si no sabemos cual es el que está abusando del tráfico de la red local; a menos que se quiera aplicar limitar el tráfico de forma global claro está. La cuestión es que la información es poder, y por ello es necesario conocer las herramientas que nos pueden otorgar dicha información. Existen numerosas alternativas; algunas más visuales, otras más informativas, etc... Si bien hay una de ellas que es especialmente conocida por aquellos que "enredan" en Linux: iftop. Iftop es una herramienta muy minimalista que está basada en la consola que, si bien no muestra los resultados de una forma especialmente vistosa, si que lo hace de forma muy clara y precisa; que es al fin y al cabo lo más importante; es por ello que es una herramienta muy a tener en cuenta.

Ancho_banda

Es por ello que hoy quiero mostraros los pequeños, pero importantes, entresijos de ésta utilidad... Para ello lo primero que deberemos hacer es instalárnosla, pues por defecto no está instalada en ningún sistema operativo; Hasta hace relativamente poco era necesario instalarlo a mano, o al menos parte de sus dependecias, pero ahora el proceso se ha simplificado y podemos realizar una instalación muy rápida y eficaz gracias a los repositorios oficiales; es por ello que el para instalar iftop escribiremos:

En Debian
apt-get install iftop

En Red Hat (o derivados)
yum install iftop

El uso de la herramienta es extremadamente sencillo pues es tan simple como escribir el comando iftop como root (un usuario sin privilegios no sería capaz de lograrlo); que revisaría el tráfico que fluye por TODAS las interfaces de red sin excepción. También se tiene la posibilidad de "escuchar" únicamente en una interfaz en concreto; por ejemplo, si deseasemos escuchar en eth0 habría que escribir:

iftop eth0

Ahora bien, es importante saber interpretar los resultado obtenidos en pantalla, pues si bien se interpretan con facilidad, es importante tenerlos claros, pues el resultado está dividido en diferentes columnas que poseen distintos significados:

  • La primera columna representa la ip de origen desde la que se están enviando los paquetes.
  • La segunda columna representa la dirección del tráfico de red; es decir si se trata de tráfico saliente o entrante. => representa el ancho de banda de subida, mientras que el símbolo <= representa el ancho de banda de descarga entrante.
  • La tercera columna representaría la ip de destino; es decir la ip a la que la ip de origen está apuntando.
  • Las últimas tres columnas representan el ancho de banda consumido de los últimos 2, 10 y 40 segundos respectivamente.
Un resultado de ejemplo del comando iftop, con sus correspondientes columnas sería el siguiente:




Este resultado es muy informativo y bastante gráfico, si bien podemos mostrar más o menos información en pantalla si así lo deseamos, con el fin de obtener exactamente la información que deseamos. Esto es gracias a la alteración de los parámetros de la pantalla en tiempo real gracias a la pulsación de algunas teclas en concreto; las más importantes serían:
  • s: Muestra o oculta el host/ip de origen. Por defecto itop está diseñado para mostrarlo.
  • d: Muestra o oculta el host/ip de destino. También se muestra por defecto en iftop.
  • p: Una de las opciones más útiles, pues muestra u oculta los puertos de comunicación, información que por defecto está oculta.
  • n: Esta opción habilita o deshabilita la resolución de nombres; En caso de tenerla habilitada (cosa que se hace por defecto) se mostrarían los nombres de dominio, si bien a veces, para labores de depuración y mantenimiento de redes, es mucho más útil conocer únicamente la ip, para lo cual deshabilitaríamos la resolución de nombres.
  • t: Filtra el resultado de forma que se pueda ver el tráfico entrante, el saliente, ambos (de forma separada, pero que igualmente se vería, cosa que se muestra por defecto) o ambos de forma conjunta, sin hacer distinción de la cantidad de tráfico entrante y saliente.
Como podéis observar, la herramienta si bien se simple, es indudablemente potente e informativa y merece la pena tenerla instalada si deseamos mantenernos informados acerca del ancho de banda consumido.

Espero que os resulte útil.

Saludos.

viernes, 20 de noviembre de 2015

¡Derpierta Tux!: Wake On Lan

Una red local, varios equipos físicamente alejados entre sí y la imposibilidad de acceder físicamente a algunos de ellos... Esta combinación puede resultar fatal cuando tenemos la necesidad de encender alguno de ellos, ya que puede que nos veamos en la situación de que no podamos acceder físicamente a éstos o que el desplazamiento se nos haga difícil... Afortunadamente existe una gran utilidad que nos puede sacar de este tipo de atolladeros: Wake On Lan, cuya función es la de "despertar" por red a otro equipo que se encuentre dentro de la red local.

Esta utilidad es bien conocido en todo tipo de sistemas, ya sean Windows o Linux, si bien sus usos varían un poco dependiendo del sistema en que estemos usando la aplicación... En este caso me centraré en el uso de Linux, en concreto Debian, pues se realiza desde la consola y puede resultar de lo más interesante. 


Para ello antes de nada habría que instalar la aplicación que nos permitirá realizar dicha acción, denominada wakeonlan; la cual puede instalarse muy fácilmente gracias a los repositorios oficiales. Esto es tan sencillo como escribir:

apt-get install wakeonlan

Ahora que tenemos la herramienta instalada, únicamente faltaría conocer cómo usarla. Su uso es de lo más sencillo, si bien hay que tener en cuenta que si la placa base del pc objetivo no posee integrada la función de Wake On Lan (cosa muy rara en las placas actuales), no se podría despertar e dicho equipo sin importar cuantas veces lo intentásemos. Imaginemos que el equipo objetivo cumple los requisitos para ser despertado; es decir que se encuentra en la misma VLAN que nosotros, y además posee una placa con la posibilidad de recibir Wake On Lan. El uso de esta herramienta es extremadamente simple, si bien hay que tener en cuenta que para mandar la orden no tenemos que saber la ip destinatario (o al menos no se trata de un dato imprescindible) sino que debemos conocer la dirección MAC de éste; para ello debemos comprobar físicamente la MAC de la tarjeta de red del equipo, o bien apuntar la MAC de éste mientras está encendido mediante el comando:

ifconfig eth0 |grep HWaddr |awk '{print $5}'

A sabiendas de la MAC de destino que va a recibir nuestro comando, para enviar el comando a dicha MAC habría que escribir:

wakeonlan 00:0c:29:87:fa:45

La  cuestión está que este comando a veces puede resultar muy agresivo a nivel de red, o incluso puede verse filtrado por un cortafuegos; además de que el comando solo puede contemplar una sola MAC de destino, así que si tuviésemos varias MACS habría que ir una por una lanzando el comando... con lo que aunque el comando en sí es efectivo, a veces es mejor valerse de ciertos parámetros que nos brinden la ayuda necesaria. Es por ello que existen 3 parámetros muy útiles que acompañan a este comando:

  • -p: Gracias a éste parámetro podemos especificar el puerto al que queremos enviar el comando wake on lan... Por defecto se usa el puerto 9, pero puede que algún cortafuegos lo filtre, con lo que podemos "esquivar" dicho filtro gracias a este parámetro.
  • -i: Podemos acotar y en vez de enviar el comando a todos los equipos de alrededor (y que solo se dé por aludida la MAC especificada), podemos enviar el comando a una dirección ip en concreto; dirección que el switch asociaría a una de sus bocas de red en concreto y a través de la cual enviaría el comando.
  • -f: En mi opinión el más útil de todos... Podemos almacenar una lista de direcciones MAC dentro de un fichero .txt que podría ser consultado mediante este parámetro; pudiendo enviar el comando a varias MAC simultáneamente.
Todos los parámetros son perfectamente combinables entre sí, con lo que si deseásemos enviar el comando wake on lan a varias MAC a la vez a través del puerto 10, habría que escribir:

wakeonlan -p 10 -f /home/ivan/lista_macs.txt

Mientras que si deseásemos enviar el comando a una mac, con una ip en concreto y a un puerto en concreto, el comando sería:

wakeonlan -i 192.168.1.7 -p 11 00:0c:29:87:fa:45

Si fuésemos muy paranoicos y no deseásemos que nuestro equipo fuese "despertado" remotamente, no nos quedaría otra que acceder a la BIOS de éste y deshabilitar la opción Wake On Lan.

Saludos.

miércoles, 18 de noviembre de 2015

ip: El comando que controla la tabla arp de linux

Hace ya tiempo dediqué un post a la tabla arp; tabla que también se encuentra estrechamente relacionada con el comando arpwatch.  Dicha tabla ARP (Address Resolution Protocol) suele ser controlado mediante el comando arp, valga la redundancia, si bien con el paso de los años el concepto ha ido evolucionando y ha sido absorbido/mejorado por otra herramienta muy conocida en el mundo de las redes: ip. Esta herramienta no solo ha ido ganando popularidad, sino que ha ido dejando obsoletos otros comandos, tales como ifconfig o route...  En este caso la equivalencia al comando arp sería ip neigh, y siempre estaría acompañado de más parámetros dependiendo de la función que queramos que cumpla.


Comencemos con lo básico

Lo primero y más importante consiste en saber cómo listar a nuestros "vecinos" y conocer su estado. Esto se asemeja en gran medida al comando arp -a, si bien en este caso obtenemos mensajes mucho más informativos; para lograr dicho listado lo que habría que escribir sería ip neigh show, comando que no solo mostrará la información de estos (ip, mac...) sino que además, a diferencia de arp, también mostrará su estado. Dicho estado se refleja en la última columna de la información mostrada, y puede ser uno de los siguientes:

  • REACHABLE: La entrada ARP es válida, y el destino en cuestión es accesible (se puede interactuar con éste, hacerle ping, etc..).
  • STALE: La entrada ARP es válida también, pero no hay conectividad entre ésta máquina y la máquina objetivo.
  • FAILED: No hay conectividad, pero además la MAC perteneciente a la ip en cuestión (sea cual sea) no ha podido ser detectada.
  • DELAY: Se ha enviado un paquete al destino para conocer la información de éste, si bien todavía no se ha recibido respuesta o confirmación alguna.

En definitiva, este listado de vecinos no solo nos da a conocer su existencia, sino que también su accesibilidad.


Limpiado de la caché de la tabla arp

Otra de las funcionalidades más fundamentales que ofrece esta utilidad, es la capacidad de borrar la caché ARP; esto viene bien para limpiar multitud de líneas que se muestra como FAILED o STALE, además de solventar algún que otro problema de red, pues solo elimina la caché, no la tabla... Para ello el comando al que recurriremos será ip neigh flush seguido de la entrada ARP que será borrada de la caché, que bien puede ser una ip en concreto, un rango de ips relacionados con una interfaz en concreto o simplemente todo. Por ejemplo:

Para borrar todo el contenido de la caché ARP, habría que escribir:

ip neigh flush all

En cambio para borrar solamente todo aquello relacionado con una interfaz, como por ejemplo eth0, en este caso habría que hacer referencia a la interfaz mediante el parámetro dev, seguido del nombre de ésta, tal y como vemos a continuación:

ip neigh flush dev eth0

Si quisiesemos ser más precisos y eliminar únicamente una entrada ARP en concreto, el comando se basaría en ip neigh flush, seguido de la ip que queremos eliminar; si por ejemplo deseasemos eliminar la entrada arp de la ip 192.168.10.1, sería:

ip neigh flush 192.168.1.10


Añadir una entrada ARP

Esta práctica no es demasiado común pues lo normal suele ser que las ips se agreguen automáticamente a la tabla ARP en caso de interactuar con éstas (una conexión, un ping, etc...), pero a veces puede resultar útil... Para añadir una entrada habría que recurrir al recurso ip neigh add y tiene la siguiente estructura:


ip neigh add ${IP} lladdr ${MAC} dev ${INTERFAZ}nud ${ESTADO}


El estado que especificaríamos sería uno de los comentados anteriormente; es decir ESTABLISHED, FAILED,etc.. Así que basándonos en esta estructura, para añadir la ip 192.168.1.5 y la mac 04:0b:a4:47:87:20 a la tabla arp de un interfaz de red en concreto, el comando que construiríamos sería:

ip neigh add 192.168.1.5 lladdr 04:0b:a4:47:87:20 dev eth0 nud REACHABLE


Eliminar una entrada ARP

En vez de borrar la caché de la tabla ARP, podemos ser más drásticos y borrarla directamente, lo cual es tan sencillo como escribir el comando ip neigh del ip que queremos borrar junto con la interfaz de red con la que está asociada; Para eliminar la entrada ARP que acabamos de añadir sería tan sencillo como escribir

ip neigh del 192.168.1.5 dev eth0

Con esto ya podremos manejar la tabla ARP a nuestro antojo, otorgandonos más poder sobre nuestro equipo y mayor consciencia sobre nuestros vecinos.

Espero que os haya resultado útil.

Saludos.

sábado, 14 de noviembre de 2015

Root o no root, esa es la cuestión

En muchas ocasiones se ha criticado el uso del usuario root para muchas operaciones realizadas dentro de Linux pero... ¿Es realmente tan peligroso este usuario? ¿Acaso no existen alternativas al uso de éste?

Una de las grandes virtudes que posee Linux con respecto a sus competidores es su la gestión de los permisos de los usuarios y las carpetas... Estos permisos son triviales para mantener la integridad del sistema e impiden a los usuarios normales el acceso a ciertos ficheros y la ejecución de comandos "delicados". Por ejemplo un usuario normal es capaz de leer el fichero /etc/resolv.conf, pero no de editarlo (si intenta guardar cambios en éste el sistema no se lo permitirá), mientras que el usuario root es capaz de hacer absolutamente todo... Obviamente no todo se reduce a ser root o no, pues también existen usuarios con permisos especiales llamados administradores. Estos administradores tienen la capacidad de realizar acciones con los mismos permisos que root, si bien no tienen la misma libertad con la que cuenta root; esto es debido a que los administradores cuentan con un recurso muy útil que únicamente ellos pueden usar llamado sudo.



El recurso sudo, es un recurso únicamente utilizable por los administradores que permite realizar determinadas acciones como si fuese root (sin serlo). Es decir que podría considerarse como un puente que permite lograr cosas que normalmente no seríamos capaces de hacer... Un ejemplo muy sencillo pero descriptivo, sería la consulta de la ip del equipo desde la consola. El comando para consultar las ips de las interfaces de nuestro equipo sería ifconfig, pero en caso de ser un "simple" usuario, el sistema nos diría que dicho comando no existe... Para eliminar dicha limitación, si el usuario es un administrador puede recurrir al recurso sudo tal que así:

sudo ifconfig

¿Sencillo cierto? Obviamente sudo sería necesario para cada acción que queramos realizar como administradores, con lo que habría que estar pendientes de utilizar dicho comando para cualquier tarea delicada, etc... pero indudablemente puede ayudarnos a evitar recurrir al todopoderoso root para cualquier acción "delicada".

Ahora bien, este recurso no es la panacea, hay veces en las que se debe recurrir directamente al usuario root, pues en caso contrario podemos tener problemas con algunos permisos y/o ficheros, con lo que... ¿Cuando habría que ser root?

Mientras que sudo nos permite ejecutar acciones "delicadas" en momentos determinados, root puede hacer lo que le de la gana sin restricción alguna, pudiendo crear graves daños involuntariamente... Para acciones concretas o aisladas, sudo es sin duda un recurso de gran valor... Además root es un usuario con demasiado poder como para cualquiera tenga la contraseña de éste, con lo que si queremos evitarnos dar la contraseña de este poderoso usuarios, más nos vale tener a mano unos cuantos usuarios con permisos de administrador... Aún así, es innegable que root puede ser de gran ayuda a la hora de querer gestionar/analizar con profundidad un equipo o servidor, con lo que si bien un usuario común nunca debería tener acceso a root, para los administradores del equipo es un usuario casi imprescindible...

Teniendo claro la utilidad de sudo y del usuario root, es muy recomendable aprender a sacarle partido a los administradores o sudoers, pues serán los que tendrán más privilegios que el resto y estarán justo debajo de root. Para tener nuestros administradores, lo primero de todo es cerciorarnos de que poseemos de la utilidad sudo instalada en nuestro equipo... La mayoría de los sistemas lo incluyen, pero para cerciorarnos al 100% escribiremos (como root):

apt-get install sudo

Esto no solo nos posibilitará escribir el comando sudo, sino que además creará un fichero llamado sudoers dentro de la carpeta /etc/.

Dicho fichero dictamina qué usuarios existentes estarán por encima del resto; es decir, que usuarios serán sudoers y estarán capacitados para usar el comando sudo... El fichero debe de ser editado por root y por defecto posee la siguiente estructura:

  1. Defaults        env_reset
  2. Defaults        mail_badpass
  3. Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  4. # User privilege specification
  5. root    ALL=(ALL:ALL) ALL


Cualquier usuario que queramos que se encuentre por encima del resto, tendrá de añadirse al archivo tal y como se ha hecho con root... Si por ejemplo deseásemos añadir al usuario ivan, deberíamos añadir la línea:

ivan    ALL=(ALL:ALL) ALL

La estructura que tienen cada una de estas líneas es:

usuario/Useralias  host_Alias=(runAsListaUsuarios:runAsListaGrupos) cmnd_Alias

Cada uno de estos "alias" tienen un significado y función especial, que permite realizar multitud de cosas... Si bien es cierto que lo más común es poner la línea que acabo de añadir, podemos sacarle mucho más partido a este fichero mediante los aliases para establecer unos sudoers mucho más personalizados y con permisos mucho más concretos que los que acabamos de poner para el usuario ivan, pues éste ahora mismo tiene acceso a prácticamente todo y a veces deseamos que el usuario esté un poco más limitado. Estos alias son

  • UserAlias: La primera sección de la línea puede referirse a un usuario en concreto o a un alias de usuario... Un alias de usuario no es nada más que un conjunto de usuarios a los que uno se puede referir mediante un nombre en concreto. Dicho alias tendría la estructura: User_Alias ALIAS = user1,user2. Es muy útil para establecer un comportamiento determinado a un grupo de ususarios.
  • Host_Alias: Se puede definir el host o el rango de ip desde los cuales se puede hacer el comando sudo... Este valor puede establecerse en una línea aparte como Host_Alias NOMBRE=ip1,rango_ip; no es una opción muy común, pero para casos muy concretos puede ser útil. Generalmente se le pone el valor ALL, pues significa que se puede ejecutar desde cualquier parte.
  • RunAs_Alias: Esta sección va entre parentesis y puede hacer referencia únicamente al runAsUserListAlias o por lo contrario a runAsUserListAlias:runAsGroupListAlias. Aquí podemos hacer referencia al groupid o al userid... Generalmente este valor es establecido a ALL, que significa que no hay restricciones de runAs.
  • cmnd_Alias: Claramente mi favorito. Este alias define uno o más comandos bajo un mismo nombre... estos comandos se pueden poner sueltos al final de la línea del usuario o alias que se esté tratando o, para mayor comodidad, se escribe el alias que agrupa a estos comandos... Para establecer dicho alias podemos poner en una línea aparte: cmnd_ALias ALIASCMD= /bin/bash, /bin/passwd. En caso de querer que pueda ejecutar todos los comandos, llamaremos al alias ALL. Estos serían los comandos "extra" que podría ejecutar el alias de usuario en cuestión tras escribir sudo.
Para ponernos en situación, he creado un pequeño fichero que representa estos conceptos:


  1. Defaults        env_reset
  2. Defaults        mail_badpass
  3. Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  4. # User privilege specification
  5. root    ALL=(ALL:ALL) ALL
  6. User_Alias LIMITADOS = invitado1,invitado2
  7. User_Alias ADMIN=jose, gorka
  8. cmnd_Alias LIMITADO/bin/bash/bin/passwd/sbin/ifconfig
  9. cmnd_Alias ESPECIAL/sbin/ifconfig/sbin/iptables, /sbin/fsck
  10. host_Alias LOCAL=192.168.1.0/24
  11. LIMITADOS LOCAL=(ALL) LIMITADO
  12. ADMIN   ALL=(ALL) ESPECIAL


Gracias a esto podemos usar usuarios con privilegios superiores al resto sin tener que darles acceso total y manteniendo la filosofía de sudo al mismo tiempo.  Teniendo esto presente, si bien es cierto que root sigue siendo un gran aliado, está claro que sudo puede brindarnos una estructura de permisos muy útil, sólida y estructurada...

Y vosotros ¿Sois más partidarios de usar sudo o de realizar las acciones como root? 

Saludos.

jueves, 12 de noviembre de 2015

Qué Linux usar?

La mayoría de los que optan por probar el mundo de Linux, tan pronto como empiezan a investigar el tema se dan cuenta de que Linux no todo es Ubuntu (sin intención de menospreciar el trabajo de éste) y qué existe un gran número de distribuciones en el mercado, pero... ¿En qué se caracterizan todos éstos? ¿Qué sistema deberíamos elegir? En está decisión influyen en gran parte los gustos y preferencias personales de cada uno, si bien hay algunos puntos que en mi opinión sería interesante tener en cuenta antes de optar por cualquier sistema operativo. Obviamente en este post sería imposible mencionar a todos, si bien intentaré mencionar a los más populares.

TUXES

Ubuntu

Comencemos con el sistema predilecto por la gran mayoría de la comunidad de Linux: Ubuntu, basado en Debian. El sistema más recomendado para aquellos que desean empezar en este mundo, aunque bien es cierto que hay mucha gente que tras probar este sistema decide no probar ningún otro debido a su gran satisfacción de éste. Querido por muchos, y odiado por otros muchos tambien, es sin duda el sistema más popular basado en Linux y uno de los que más ha dado que hablar debido a sus "arriesgadas" decisiones o a sus intentos de darle un toque más personal a su sistema operativo... No cabe duda que este sistema ha demostrado mucho y seguirá demostrando en el futuro, y además es sin duda uno de los sistemas más intuitivos que nos podemos encontrar en la actualidad... Muchas personas consideran a Ubuntu como el sistema de los principiantes exactamente por ese motivo, pero durante los últimos años ha demostrado que es una opción perfectamente válida para entornos empresariales y tareas "serias", además de ser uno de los sistemas operativos favoritos para las super computadoras.

Otro gran punto a su favor es que tiene una comunidad muy activa y que podemos encontrar una enorme cantidad de información en el foro de la comunidad y en su página oficial, con lo que en caso de tener un problema es muy probable que podamos solucionarlo.

Lo mejor: Muy intuitivo y con mucha información en internet. No requiere tener demasiados conocimientos para manejarlo a nivel de usuario y la gran mayoría del software desarrollado para Linux tiene en cuenta a este sistema, con lo que rara vez nos veremos "excluidos" con los paquetes de software.
Lo peor: A veces, en su intento de tener un toque "personal" y actualizado, Ubuntu ha tomado decisiones que no han gustado del todo a la comunidad; véase su entorno de escritorio propio (Unity) o la decisión de implantar versiones de software/kernel demasiado pronto.

Debian

No podría realizar este post sin mencionara a mi sistema favorito... Debian. En la actualidad podemos encontrar un enorme número de sistemas operativos basados en éste, sistemas que tienen una gran deuda con Debian. Debian destaca por ser el "padre" de una gran variedad de sistemas operativos, entre otros Ubuntu. El auge de éste sistema y sus hijos durante los últimos años ha posicionado al "grupo" de Debian e hijos a la cabeza de los sistemas más usados dentro del mundo de Linux, si bien existen algunas pequeñas, pero significativas diferencias entre Debian y el resto...

La primera diferencia que tiene es que todo el sistema en sí es muy robusto comparado con el resto debido a que todo paquete que instalado en Debian es bastante antiguo y a que hasta que el paquete no se haya demostrado que es "estable", no es implantado en Debian; Esto es bueno y malo al mismo tiempo, pues se posee un sistema muy robusto, pero nunca con las últimas versiones de software/kernel. 

Debian es uno de los pocos sistemas que se caracteriza por instalar lo mínimo indispensable para que el sistema funcione... Esto hace que el sistema tenga instalado únicamente lo que nosotros necesitemos; ahorrándonos molestos paquetes de software que nunca usaremos... Gracias a ésto el sistema requiere de bastante poco espacio mínimo en el disco duro. 

El sistema puede funcionar en equipos de bajas prestaciones sin problemas; es más, en un equipo de 512 MB puede correr un Debian 8 sin demasiadas complicaciones, cosa que muchos otros serían incapaces de conseguir.

Otro de los factores que hacen que Debian sea diferente a la mayoría es que tiene una filosofía de "Libertad" que otros (no todos, pero sí unos cuantos) carecen; ésta filosofía radica en que solo usan drivers "libres" cuyo código puede ser revisado para verificar que efectivamente hacen lo que dicen hacer... Esta decisión hace que el sistema operativo use drivers confiables, pero al mismo tiempo hace que no se tenga acceso a todos los drivers de todos los fabricantes y se tengan que optar por drivers "genéricos" que a veces pueden dar problemas (especialmente los drivers de red).

Lo mejor: Muy robusto y capaz de funcionar en equipos de bajas prestaciones. Además tiene una filosofía que respeta las libertades del usuario. Es el padre de una gran variedad de distribuciones con lo que se sabes defenderte en este sistema operativo, la curva de aprendizaje para desenvolverte en el resto es irrisorio.
Lo peor: Se pueden tener problemas con los drivers, cosa que hará que tengamos que comernos la cabeza en más de una ocasión... Además el sistema rara vez tendrá los paquetes de software más actuales.

Red Hat

El Linux más comercial y orientado a las empresas... Su largo soporte del sistema operativo (7 años) y su estabilidad lo hacen perfecto para las grandes empresas; si a eso le sumamos el hecho de que ofrecen asistencia técnica directa y a que es, con diferencia, el sistema que menos problemas tiene con los drivers, podría decirse que es probablemente el sistema más completo para los servidores, si bien todo esto se paga, y red hat solamente puede ser comprado (sus precios varían en función de las necesidades) o, en caso de querer disfrutarlo gratis, probarlo durante únicamente 30 días... Es innegable reconocer que red hat ofrece soluciones muy completas, aunque hay muchos servidores e incluso super computadoras que funcionan con Ubuntu y que no tienen problemas, todo depende de las necesidades de cada individuo y empresa.

Lo mejor: Muy completo en todos los sentidos. Rara vez habrá problemas de drivers. En caso de tener problemas se puede obtener soporte técnico del propio Red Hat. Ofrecen formación, certificación, etc... También es "padre" de un buen número de distribuciones como Fedora y CentOS.
Lo peor: Es una distribución de pago cuyo coste es bastante elevado. Si no tienes experiencia en Linux (sea la distribución que sea), no es recomendable usarlo.

Fedora

Uno de las principales alternativas a Red Hat y uno de los más usados en entornos de escritorio por aquellos que prefieren usar sistemas basados en éste. Este sistema destaca por tener siempre el software más reciente, cosa que hace que el equipo siempre esté a la última, con sus correspondientes ventajas y desventajas... No siempre lo más nuevo es lo mejor, y es por eso que a veces la implantación de versiones de software demasiado nuevas hace que el usuario final... Aún así desde que Red Hat compró esta compañía/sistema, es necesario reconocer que el sistema es más "estable" de lo que solía ser anteriormente... La gran pega de este sistema es su escaso soporte a las versiones de sistema que saca, pues son 13 meses (lo que viene a decirse prácticamente un año), lo que conlleva a una constante actualización de sistema operativo...

Lo mejor: Ofrece las últimas versiones de software para todo y es el sistema perfecto para adaptarse a los sistemas Red Hat.
Lo peor: Demasiado novedoso con algunos paquetes. El soporte que da a sus versiones es bastante corto.

OpenSuse

Una distribución un tanto diferente del resto basada en Suse... Es uno de los pocos que se han atrevido a "jugar" con btrfs, de la cual han podido sacar el magnifico snapper. No es ni de lejos tan conocido como los que he mencionado anteriormente, aunque bien es cierto que es un sistema muy estable y con cierto toque de distinción del resto... Snapper, Susestudio... Pequeños pero curiosos detalles muy interesantes... Además los paquetes descargados para este sistema son los más fáciles de instalar, aunque he de decir que no hay tantos programas como gustaría. Otro punto a favor es que se instala muy fácil y rápido.

Lo mejor: Facil de instalar y con aplicaciones y funcionalidades muy útiles e interesantes.
Lo peor: No es tan conocido como el resto, lo que puede hacer que probablemente cueste un poco más encontrar documentación en caso de tener problemas... Aún así, poco a poco está ganando popularidad.

Manjaro

Una distribución basada en Arch, podría considerarse como el Arch para dummies que, a diferencia de su "padre" puede ser instalado con facilidad... Comparte las mismas caracteristicas que Arch pero está diseñado para ser más "cercano" al usuario final... Eso significa que comparte prácticamente las mismas ventajas y desventajas que el otro: Es muy robusto y no requiere cambiar de versión pues va actualizandose constantemente... Al igual que Fedora, siempre va la última, con la diferencia de que aquí no hay versiones de sistema operativo sino que siempre es el mismo actualizandose constantemente. Obviamente es un sistema con varias desventajas: La curva de aprendizaje es un poco más dura que la que tiene el resto (en caso de querer recurrir a la consola) y aunque hay mucha documentación en internet de su padre, arch, es la rama de Linux con menos usuarios con diferencia, lo cual convierte al grupo "archer" en el más pequeño de todos y hace que pedir ayuda sea mucho más complicado que con el resto... Esa falta de popularidad también hace que cuente con muchos menos paquetes que el resto.

Lo mejor: Una vez instalado siempre se irá a la última y no requerirá instalar versiones de sistema operativo futuras.
Lo peor: Si se usa este sistema uno debe de concienciarse de que opta por la rama más compleja y menos apoyada de todas.

Estas serían a groso modo las características globales de cada distribución, aunque los gustos personales influyen en gran manera en la decisión de cada uno... Yo actualmente estoy encantado con Debian ¿Y vosotros? ¿Qué distribución usáis?

Saludos.