Archivo

Entradas Etiquetadas ‘seguridad’

Guía de supervivencia para disfrutar de Linux Mint Debian Edition XFCE (III : ssh, nfs, y algunas utilidades para consola)

Jueves, 22 de Septiembre de 2011 Gaspar Fernández Sin comentarios

Cosas que no vienen instaladas de serie y deberían, herramientas para redes y administración remota que nos permitirán, sobre todo jugar y aprender. Quiero que esta sea una guía completa para personas que se inician en el mundo Linux por lo que no profundizaré mucho en algunos aspectos y en ocasiones, como esta, serán cosas muy básicas.

Servidor SSH

Cuando tienes en casa varios ordenadores, en ocasiones tenemos la necesidad de acceder a uno de los otros ordenadores y ejecutar algo allí, ya sea porque tengamos archivos en ese ordenador que no tengamos en el que tenemos delante, porque vamos a realizar algo pesado y la otra máquina es más larga, o bien porque no tenemos acceso físico a dicha máquina.

Lo primero es instalar el servidor SSH en la máquina a la que queremos acceder:

$ sudo apt-get install openssh_server

El cliente debemos instalarlo en la máquina desde la que accedemos

$ sudo apt-get install openssh_client

Aunque dado lo poco que ocupan, podemos, sin peligro instalar los dos en nuestro ordenador… nunca se sabe cuándo podemos utilizarlo.

La configuración que viene por defecto es buena para empezar. Ahora, si estamos en la máquina A y queremos conectar a la máquina B, podemos hacer desde un terminal:

$ ssh usuario@DIRECCION_IP_DE_B

y podremos ejecutar comandos en la máquina B

Compartir directorios por NFS

Imagina que estoy en la máquina A y toda mi colección de música está en la máquina B, si quiero reproducirla tendré dos opciones: grabarla en un sopore extraíble, lo cual requiere acceso físico (y tener un soporte para copiar), o compartirla por red local. Para esta segunda tenemos el protocolo NFS.

En la máquina B, la que tiene toda la música, debemos instalar el servidor:

$ sudo apt-get install nfs-server

y en la máquina A, el cliente:

$ sudo apt-get install nfs-client

Ahora debemos configurar qué queremos compartir. En muchos entornos tenemos aplicaciones para configurar los directorios compartidos de forma gráfica, pero para los que no, debemos abrir un terminal y ejecutar:

$ editor /etc/exports

# editor carga el editor de texto por defecto… os gusta nano ? vim ? emacs ? joe?

Dentro del archivo tenemos que introducir el directorio a compartir y el host con el que lo compartimos. Si somos la mágina B:

/directorio/a/compartir      DIRECCION_DE_A(ro,sync,no_subtree_check)

A partir de ahí podemos incluir tantos directorios compartidos como queramos, siempre en el mismo formato. He colocado unos atributos por defecto: ro,sync,no_subtree_check, podemos (y a veces debemos) cambiarlos:

  • ro - Comparte el recurso como sólo lectura. Si queremos compartirlo tanto para lectura como para escritura, debemos poner rw (read/write).
  • sync - Sincroniza las escrituras enviando notificaciones al cliente cuando se escriben para que pueda continuar. Podemos poner async, y en este caso no se envían notificaciones y las escrituras son más rápidas.
  • no_subtree_check. No verifica los permisos en directorios anteriores a la ruta especificada, puede que el usuario ptolomeo no tenga acceso a /home/pitagoras/ pero sí pueda acceder a /home/pitagoras/compartido ; si esta opción es subtree_check, provocaríamos que ptolomeo no acceda a /home/pitagoras/compartido porque no tiene acceso al directorio anterior.

Ahora vamos a la parte del cliente, éste tiene que montar los recursos compartidos. Imaginémonos que el usuario ptolomeo quiere montar en /home/ptolomeo/amigos/pitagoras el recurso compartido que éste tiene en /home/pitagoras/compartido. Ptolomeo deberá hacer:

$ sudo mount -t nfs IP_DEL_ORDENADOR_DE_PITAGORAS:/home/pitagoras/compartido /home/ptolomeo/amigos/pitagoras

Por otra parte, si tenemos un servidor NFS y queremos ver qué recursos tiene compartidos, podemos verlo haciendo:

$ sudo showmount -e IP_DEL_SERVIDOR

La seguridad ante todo

Está bien tener un servidor ssh y nfs ; pero en ocasiones, nos conectamos a una red pública, o directamente a Internet, por lo que no nos interesa compartir nuestros archivos con cualquiera que pueda entrar, para ello tenemos los archivos hosts.deny (que deniega el acceso a nuestros servicios a diferentes máquinas) y hosts.allow (que da permiso para que dichas máquinas accedan a nuestro ordenador).

Ambos archivos funcionan de forma parecida, escribimos en una línea:

SERVICIO : IP/HOST1, IP/HOST2, IP/HOST3, ….

donde SERVICIO, puede ser, por ejemplo ssh, luego ponemos dos puntos (:) y una lista de IP o nombres de host separados por comas. Dependiendo de si esa línea la ponemos en hosts.deny o hosts.allow, denegaremos o permitiremos el acceso a esa máquina.

Para hacer una configuración segura, en hosts.deny podemos poner:

ALL : ALL

Lo que bloqueará TODOS los servicios para TODOS los ordenadores remotos, así tendremos nuestro ordenador cerrado al exterior. Ahora, en hosts.allow, queremos dar permiso a ptolomeo para que acceda a nuestro servicio ssh:

sshd : ptolomeo

también queremos dar permiso al ordenador con IP 192.168.1.28, al ordenador pitagoras y a 192.168.1.20 para acceder al servicio httpd (servidor web, imaginemos que lo tenemos instalado):

httpd: 192.168.1.28, pitagoras, 192.168.1.20

Por otra parte, el servicio nfs, hemos visto que compartimos directorios con máquinas determinadas, por lo que así podríamos restringirlo, además, si en hosts.deny ponemos ALL:ALL no va a arrancar el demonio; tenemos dos posibles soluciones:

  1. Poner en hosts.deny
    ALL : ALL EXCEPT LOCAL
    Para que no se bloqueen conexiones locales
  2. Poner en hosts.allow
    rpcbind : localhost
    Para no bloquear conexión local al demonio rpcbind

Si queremos permitirlo todo, también podemos poner en hosts.allow:

ALL : ALL

pero no se recomienda, sólo debemos hacer esto para equipos de pruebas o máquinas que tengan una conexión limitada (es decir, que sólo estén conectadas con uno o dos hosts y esté todo controlado).

Instalar nmap

Este programa tiene muchas utilidades, una de las más comunes es saber qué servicios tiene abiertos una máquina, o por ejemplo, nuestro router tiene un servidor DHCP para darnos una dirección IP en nuestra red (es la configuración más común), cada vez que encendamos nuestro ordenador, lo más probable es que tengamos una IP diferente asignada, y si hay varios ordenadores conectados, ya sí que es difícil saber la IP que tiene cada máquina, nmap nos puede ayudar a eso.

Además, podemos utilizar nmap para averiguar si hay intrusos en nuestra red.

$ sudo apt-get install nmap

Si queremos ver cuánta gente hay conectada en nuestra red, y quiénes son los que están conectados, podemos hacer lo siguiente (si nuestra IP es, por ejemplo 192.168.1.10:

$ nmap 192.168.1.*

Al cabo de unos segundos nos dirá qué máquinas hay conectadas (esto es muy útil si conectamos a través de la red de nuestra facultad y queremos saber lo archivos y servicios que tienen compartidos ver quién está conectado.

Instalar pmount

Yo soy un usuario más de consola, y a veces tengo varios equipos en red local y en diferentes habitaciones. Cuando no tienes entorno gráfico no hay icono para hacer click con el derecho y montarlo. Así que tenemos dos posibilidades, en el caso de querer montar un dispositivo usb flash que está en /dev/sdc1:

$ sudo mkdir /media/pendrive

$ mount /dev/sdc1 /media/pendrive

O utilizar pmount, es más se puede utilizar como un usuario normal (siempre que esté en el grupo plugdev):

$ pmount /dev/sdc1

Automáticamente creará el punto de montaje, que se borrará cuando desmontemos con:

$ pumount /dev/sdc1

Por lo tanto, para instalar este pequeño pero útil programa:

$ sudo apt-get install pmount

$ sudo gpasswd -a USUARIO plugdev

La última línea corresponde a la inclusión del usuario USUARIO en el grupo plugdev para poder montar los dispositivos.

Generador de contraseñas en consola

Una gran utilidad que uso a menudo es un generador de contraseñas y es que, para tener seguridad, es conveniente tener una contraseña para cada servicio/web/cosa que tengamos en el sistema, e incluso si se está creando una base de datos, con un usuario que tenga acceso a ella (sobre todo si no está en nuestro ordenador), es conveniente darle una contraseña “aleatoria”, o al menos difícil de sacar. Para ello tenemos pwgen:

$ sudo apt-get install pwgen

$ pwgen

So9eejei Eej9youf Iex0ga3y rooV0aRi loXi8ooD Eilah4ru eeD7iego ieX6eth9
ohz9Que9 eiJohz5i ku9doo7E Ooghie6U zee9TeiB phei0eeG ith3Aex4 coiYa0ca
mah3aPae YahxaiM9 quiqu9Oi Voh9olub xanoo1Ae ohn8Ahng aiyoh6eG Coo3quok
eiXou6Zi Eis2poo1 bu1iBahf Aey0eeng aethee3K Thoh2ood Aepai6ph iRah2awo
eePei8si tahf5Pe0 Aegh0phu AeR0eech quohce3A siSh8Hit eeQuu4Ei ahGhal5f
Kahgh9ah aJoh7ex6 teeF4Eil Eehue3ee ooca8EiT huzaev8P eiK2quoh muuzae6O
aj6Mu3Ae UPheew2o deiHee8N abeesh4M thei8ohZ Ei3Aingo Phie7eep av0koo5U
koh2Jahb caiv1Cho Oa6fohvu OochaeW9 TeeN2Lee ahlaeH8o sad9Aegh Taiz6gae
looF2mie jahjoaS4 laineiN9 ush1oa0I ipob2Ohs Ha1ohjai OoL5wa7u Eipohva7
aimoox9K Keey4ieW labah4Ci oowaiJ2i pahxaiB1 eiWai3ei bethaF0r fu8eiV7u
Wo3Te1iu roeZ3eil Oorohs8k cah7ESo9 Yohg1aix ohz9Choo Ogooc1ph Eh7eeghi
eeh8Aer2 eph4Ehoh Eis0Ieva Yeochoh9 Aizahn4i eepahH6o wahBae5o eeZiang6
aep0ahPh haewoh7B aidoh9Ea ia7tai8L Tohx5gae OSeexee2 ooN6liWo Pai8Ohs0
ZeiX6iay zie3Iexe Oog2caek Ohoo9eit yoo4eiSe bai0Ooth ieHa5Aig Xie8eeph
Uasoov2a Iesh6EiR ne1Aothi oo7oob7O Lohy5wai zea1Xie3 ooH3be9i fe7Ohnoo
ooSosae2 phei3AeB aerie9Ai ku9ohBoh peegieX5 Eiph0ool choQuoo3 Reew9Ohp
Kohm3aXi Kui9ohCh reifieM0 sha3Yaos emohFo2i ca5zaeP5 Mu4vohgh naiV8Chi
ue7Pooso eePahth6 waLuu7oh Yee8teir eth9Tai8 cho7Poog ooSee6yu Uquai6aa
uqu8Li2u eegooL0i ieth9Aem Miex4Nah ii5Eephi iChae5do fahX9foh eMaexu8i
koh2Ca7J Theem9co eiH4zev4 chofeW9f doh5eK8f ori7ohV5 zo4zohNg saeKah9N

Nada más ejecutarlo nos dará muchas contraseñas para elegir. E incluso podemos personalizar la salida con algunos modificadores (-s para incrementar la seguridad; -y para incluir símbolos; y algunos más)

Links, un navegador web en modo texto

Y el usuario de a pie se preguntará: “¿para qué quiero yo un navegador web en modo texto?”, y es cierto, muchos de nosotros arrancamos el navegador y vemos las imágenes y ejecutamos scripts y “disfrutamos” de la experiencia web; aunque en ocasiones nos puede sacar de algún apuro o por ejemplo, hace muy fácil la creación de scripts que interactúen con un componente web. Por ejemplo:

$ links -dump http://checkip.dyndns.org

Current IP Address: 94.56.107.7

Con lo que nos conectamos a la web http://checkip.dyndns.org para saber nuestra dirección IP (con la que conectamos a Internet). O por ejemplo, si queremos ver la fecha y hora actual descargadas de un servidor de Internet:

$ links -dump  http://www.timeanddate.com/worldclock/city.html?n=141  | grep Current | sed ‘2!d’

Para instalar este programa:

$ sudo apt-get install links

Limitar el ancho de banda de nuestros servicios

Imagina que estamos subiendo un archivo a un FTP de un amigo, descargando nuestra distribución de Linux preferida, enviando imágenes de nuestra webcam a Internet, además, mientras estás escuchando la radio o viendo la tele por Internet, nuestros recursos son limitados y si tienes una conexión de 10Mbps  de bajada y 500Kbps de subida, aparte de dar las gracias, tienes que repartirla sabiamente. Tal vez el FTP de nuestro amigo se va a coger todo el ancho de banda de subida que tengamos, porque puede, y luego las imágenes de la webcam, a lo mejor no se suben al mismo ritmo; por otra parte, la distribución de Linux irá muy rápido, pero a lo mejor se resiente el canal de TV online que estamos viendo. Para eso tenemos trickle, una herramienta capaz de limitar el ancho de banda de red que consume una aplicación. Podemos limitar el ancho de banda de la descarga de nuestra distribución Linux:

$ trickle -d 100 wget http://mirror.linuxmint-fr.net/linuxmint.com/stable/debian/linuxmint-xfce-201104-dvd-32bit.iso

Para limitar la descarga a 100Kb/s

Para instalar:

$ sudo apt-get install trickle

Ver tareas en ejecución en colores desde consola

LMDE GnomeA veces, para ver los procesos en ejecución, top, no es suficiente. No nos deja ver todos los procesos, y a veces la información es algo escasa, para eso tenemos htop, podemos ver una captura de la ejecución de htop en una máquina remota con LMDE Gnome.

$ sudo apt-get install htop

Para terminar

Hay muchas más aplicaciones muy útiles para consola, estas son algunas, una mínima muestra de toda la potencia que encierra nuestra máquina Linux y que no vienen instaladas de serie en Linux Mint Debian Edition; aunque algunas de ellas sí que vienen en otras distribuciones.

Recopilación de soluciones para los retos de #tuentiContest . Challenge #20

Jueves, 30 de Junio de 2011 Gaspar Fernández Sin comentarios

Últimamente he hablado acerca del I concurso de programación de Tuenti. Un concurso de programación Online que se llevó acabo durante la semana pasada (del 13 al 20 de Junio, muy mala fecha).

Podéis ver los enunciados de todos los problemas, con ejemplos sobre la entrada y salida (aunque a veces no hay que hacerles mucho caso) en la web oficial del concurso, pero en Vidas Concurrentes lo encontramos todo en español.

Challenge #20 : The Clumsy Programmer

Tenemos un viejo Debian de 32bits y hemos borrado nuestro home, además hemos perdido las claves para descifrar nuestros datos, ¡tenemos que recuperarla!

Este reto, casi nadie lo completamos, y en principio yo pensaba que era más difícil de lo que era. Romper un RSA de 1024 es algo muy lento, y vi que algunos lo resolvían en menos de 20 minutos. Cuando me enteré me arrepentí de no haber pasado un poco más de tiempo buscando información en lugar de abandonar, la verdad es que llevaba un ritmo de sueño muy raro esa semana, y preferí dormir un poco.

Para resolverlo, teníamos que tener en cuanta la época, no nos decían cuando, pero era un viejo Debian, era de 32bits y estábamos utilizando openssl. Parece ser que allá por 2008 se descubrió un fallo en la versión de OpenSSL que instalaba Debian (y derivados), en la que los números aleatorios necesarios para la clave RSA, en lugar de ser a través de /dev/random eran a través de la PID de OpenSSL, con lo cual tenemos muy pocas posibilidades teniendo en cuenta que muchas veces, las PID no es muy alta (más de 500 y menos de 15000, vamos generalmente), es decir, tenemos un número muy acotado de posibles claves RSA a utilizar, por lo que podemos hacer un script en bash para probarlas todas.

Para más información, podéis visitar:

Soluciones:

Si no estás en la lista y quieres plantear tu solución, deja un comentario con tu link !

Actualización 2011/07/03 01:52 : Añadida solución de @frisco82
Actualización 2011/07/03 13:52 : Añadida solución de @Rosapolis

La pesadilla de cambiarse a Windows

Lunes, 13 de Septiembre de 2010 Gaspar Fernández Sin comentarios

No suelo hacer un post sólo para enlazar un artículo, pero este me ha parecido interesante.

Y es que muchos vez un cambio a Linux como algo oscuro y siniestro, pero hay personas que consideramos el cambio a Windows como algo tremendamente difícil.

La pesadilla de cambiarse a Windows - Paraíso Linux

Personalmente, ¿ por qué uso Linux ?

  • Me hace más productivo
  • Me da más sensación de seguridad
  • Me permite hacer más cosas
  • Me gusta aprender algo cada día

Todo va mucho más allá de la filosofía del software libre.

Sed… de venganza (1): Sustituyendo cadenas en múltiples archivos

Lunes, 28 de Junio de 2010 Gaspar Fernández 1 comentario

3846929292_60721fb24e

Es uno de los grandes desconocidos y tan temidos comandos de que disponemos. Y es cierto que a veces da pereza mirarse el manual cuando queremos hacer algo que sed podría hacer rápidamente.

Lo que cuento hoy es su uso más popular (porque sed se puede usar para muuuuuchas cosas) y es muy simple, sustituir en un stream un texto por otro (Donde dije digo, digo Diego).

Imaginemos un fichero de texto, para ser originales llamémosle README, y en el texto queremos cambiar la palabra “Ireland” por “Spain”. Podemos hacer lo siguiente:

$ sed ’s/Ireland/Spain/g’ README

y veremos en pantalla el texto. Para guardarlo en el mismo archivo, si buscamos por Internet, veremos cómo la gente se complica la vida (que no digo que sea malo, yo también me la complico un poco más abajo), pero podemos usar el modificador -i (que tiene algunas funciones curiosas).

Si ahora hacemos:

$ sed -i ’s/Ireland/Spain/g’ README

Los cambios se guardarán automáticamente en el fichero README. Pero si investigamos un poco más, y queremos rematar la faena podemos hacer:

$ sed -i~ ’s/Ireland/Spain/g’ README

En este caso, guardaremos el cambio en el fichero README y grabaremos en README~ una copia de seguridad del fichero antiguo. La extensión de la copia de seguridad podemos cambiarla haciendo por ejemplo:

$ sed -i.bak ’s/Ireland/Spain/g’ README

Para que la copia sea README.bak

Pero ahora viene algo interesante, con el parámetro -i podemos modificar todos los archivos que queramos, sed acepta en la entrada múltiples archivos, por lo que si en un directorio con muchos archivos queremos cambiar un texto (imaginad que habéis hecho un proyecto relativamente grande, y hay una función con un nombre un poco ridículo, curiosamente es la que más veces llamáis, y como vamos a enseñar el código fuente, no queremos que nadie lea eso), podremos hacer:

$ sed -i ’s/nombre_ridiculo/nombre_elegante/g’ *

Ahora bien, si el proyecto está en múltiples directorios, siempre podemos usar find para localizar los archivos de la siguiente forma:

find -name ‘*.c’ -exec sed -i ’s/nombre_ridiculo/nombre_elegante/g’ {} \;

Con toda esta línea, buscaremos todos los archivos con extensión .c dentro del directorio actual y subdirectorios y se los pasaremos a sed, con el modificador -exec de find, ejecutaremos el comando que especificamos, donde {} indica el nombre de archivo (que nos lo da find) y con \; indicamos el fin del comando y sus parametros.

Pero esto no termina aquí, sed soporta expresiones regulares, y si por ejemplo queremos coger todas las imágenes de un fichero html, cambiarlas de directorio y añadirles un class (inicialmente encontramos <img src=”foto.jpg” alt=”" /> , y queremos que salga <img class=”imagen” src=”/static/foto.jpg” alt=”" />) podemos hacer lo siguiente:

sed ’s/src=”\(.[a-zA-Z\.\_\/]*\)”/src=”\/static\/\1” class=”imagen”/g’ fichero.html

Lo que hay en negrita, corresponde a la expresión regular que determina el nombre del archivo (caracteres de la a a la z, de la A a la Z, puntos, guiones bajos, y barras (en la cadena de origen), en la cadena de destino escribimos \1 donde queremos que coloque el texto correspondiente a la expresión anterior, es decir donde queremos que coloque el nombre del archivo.

Ni que decir tiene que podemos hacer una mezcla de todo lo dicho en este post ( expresiones regulares, y sustitución en múltiples archivos dentro de múltiples subdirectorios y guardando backups ), y estaremos delante de una potente herramienta.

Lo malo de ejecutar sed, es que tenemos que escapar muchos caracteres,por lo menos ), (, ., \, / y seguro que encontramos alguno más; para ello, siempre que queramos introducir un carácter de esos, debemos poner una contra barra (\) delante.

Foto: albertopveiga (Flickr)

Extraer una copia de seguridad de Plesk

Martes, 6 de Abril de 2010 Gaspar Fernández Sin comentarios

discoduroMuchos proveedores utilizan Plesk como panel de control, y en ocasiones, es necesario extraer dichas copias de seguridad, no sólo restaurarlas automáticamente vía Plesk.

Necesitamos el paquete munpack (la mayoría de las distribuciones lo traen en sus repositorios, si no, siempre podemos compilarlo desde el código fuente ( ftp://ftp.andrew.cmu.edu/pub/mpack/ ).

Si el fichero de copia de seguridad es copia_plesk, hacemos lo siguiente:

$ zcat copia_plesk > copia_plesk_descomprimida
$ cat copia_plesk_descomprimida | munpack

En este punto tendremos muchos ficheros tar (tal vez el correo, las páginas web que tengamos, los logs y demás servicios que tengamos contratados), sólo tendremos que extraer los archivos:

$ tar xvf [archivo_tar_a_extraer]

Debemos procurar que los archivos generados por plesk no sean de más de 2Gb (el panel de control tiene la opción de fragmentar los archivos), ya que munpack se quejará en este caso, tendríamos que recortar el fichero descomprimido.

Foto: shkumbin (Flickr)

Categories: Bash, General Tags: , , , ,

Visita otras webs de la red