miércoles, 17 de julio de 2013

SSH, SCP y SSHFS, conexiones seguras remotas.

Introducción.
SSH (Secure Shell, en español: interprete de ordenes seguras) es un protocolo que nos sirve para acceder a una maquina remota a través de la red y estando en otra maquina, parecer que estamos en ella. Un servidor SSH escucha por defecto en el puerto 22.

SSH trabaja de forma parecida a telnet, pero lo hace de forma cifrada, por lo que si interceptan el mensaje y no tienen la contraseña no podrán leer el contenido.

Además de la conexión a otros dispositivos, SSH nos permite copiar datos de forma segura (tanto ficheros sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH.

Instalación del cliente:
# aptitude install openssh-client

Instalación del servidor:
# aptitude install openssh-server

Ficheros de configuración:
Los ficheros de configuración principales se encuentran en el directorio: /etc/ssh y son:
-ssh_config: fichero de configuración del cliente.
-sshd_config: fichero de configuración del servidor.

Configuración del servidor.
Tras la instalación del servidor nos podemos conectar a el. Se instala con los parámetros por defectos y los podemos encontrar en el fichero de configuración sshd_config. Algunas lineas que nos pueden interesar (Muchas lineas están comentadas, para que funcionen tienes que quitar el # y otras no se encuentran y tienes que añadirlas):
-Port: en el especificamos el puerto en el que escucha nuestro servidor, por defecto el 22. Cambiar el puerto evita los ataques automáticos a el puerto 22.
-Protocol: protocolo ssh que utilizamos, es preferible utilizar solo el 2, ya que el 1 es mas inseguro.
-PermitRootLogin: esta opción por defecto esta en yes, no es muy aconsejable conectarse directamente como root, yo aconsejaría ponerla en no.
-MaxAuthTries: en esta linea especificamos el numero de intentos fallidos de autenticación. Si fallas ese numero de veces, te desconectas.
-ListenAddress:  dirección en la que escucha el servidor.
-AllowUsers: por defecto están todos los usuarios, si ponemos esta directiva, solo podrán conectarse los usuarios que pongamos separados por espacios.

Tras la modificación de algunos de las opciones anteriores tenemos que reiniciar el servidor para que funcione con ellas:
/etc/init.d/ssh restart

Otros ficheros que tenemos que tener en cuenta a la hora de la seguridad de nuestro servidor son los ficheros /etc/hosts.allow y /etc/hosts.deny.
hosts.deny: este fichero sirve para denegar el acceso, yo por defecto lo tengo todo denegado.
ALL : ALL

hosts.allow: este fichero sirve para permitir el acceso. En nuestro caso solo tenemos que darle acceso a el servidor ssh. Yo le he dado permiso a todas las redes, podríamos ser mas estrictos.
sshd : ALL

Comandos básicos del cliente.
La conexión mas sencilla, seria:
$ ssh usuario@servidor

Si el usuario con el que nos conectamos se llama igual que con el que nos conectamos, podemos omitir el nombre de usuario:
$ ssh servidor

Para conectarnos a un puerto diferente utilizamos la opción -p y el puerto, por ejemplo el 2222:
$ ssh -p 2222 usuario@servidor

Si nos va a hacer falta ejecutar programas que necesitan interfaz gráfica utilizamos la opción -X(es mayúscula):
$ ssh -X usuario@servidor

Copia remota de archivos(SCP).
Esto es muy útil para pasar archivos de una maquina a otra. Para copiar archivos de un servidor (/ruta/archivo) a nuestra maquina (/home/usuario):
$ scp -r -p usuario@servidor:/ruta/archivo /home/usuario
Las opciones -r y -p son opcionales. Su funciones son:
-r: copiado recursivo.
-p: preservar los atributos de los archivos.

También podemos hacerlo al revés y copiar archivos locales a un servidor:
$ scp /home/usuario/archivo usuario@servidor:/ruta/

Utilización de llaves de autenticación.
Lo primero es crear la llave del cliente, para esto, en la maquina del cliente y con el usuario que queremos acceder ejecutamos:
$ ssh-keygen -t rsa -b 2048

Este comando te pregunta donde desea guardar las claves y si quieres ponerle contraseña. Si no le ponemos contraseña cualquiera puede utilizar la clave. Ahora tenemos que enviar la clave a el servidor, ya sea con un USB, DVD, CD... lo que deseen, yo suelo optar por el scp:
$ scp ~/.ssh/id_rsa.pub usuario@servidor:~

Ya tenemos la clave en nuestro servidor, ahora tenemos que agregarla a nuestras claves autorizadas. Para esto ejecutamos (desde el servidor):
$ cat id_rsa.pub >> .ssh/authorized_keys || rm id_rsa.pub

Tenemos que tener la lista de claves bien protegidas:
$ chmod 600 ~/.ssh/authorized_keys

Esto puede ser utilizado cuando queremos que dos servidores automaticen cosas uno del otro, así puede acceder automáticamente.

Montar un sistema de archivos remoto (SSHFS).

Con esta herramienta podemos montar un sistema de archivos, como si estuvieran en nuestra maquina. Lo primero es la instalación:
# aptitude install sshfs

Comprobamos que tenemos cargado el modulo fuse, de no ser asi lo cagamos:
# lsmod | grep fuse
Si no aparece:
# modprobe fuse

Si queremos utilizar esta herramienta con un usuario que no sea el superusuario tendremos que agregarlo al el grupo fuse en el fichero /etc/group. Tras agregarlo cerrar e iniciar sesión de nuevo para que coja los cambios.

Bibliografía:
http://wiki.debian.org/SSH
https://wiki.archlinux.org/index.php/Secure_Shell_(Espa%C3%B1ol)
http://wiki.debianchile.org/SSH#Uso_de_SSH# aptitude install openssh-server

Ficheros de configuración:
Los ficheros de configuración principales se encuentran en el directorio: /etc/ssh y son:
-ssh_config: fichero de configuración del cliente.
-sshd_config: fichero de configuración del servidor.

Configuración del servidor.
Tras la instalación del servidor nos podemos conectar a el. Se instala con los parámetros por defectos y los podemos encontrar en el fichero de configuración sshd_config. Algunas lineas que nos pueden interesar (Muchas lineas están comentadas, para que funcionen tienes que quitar el # y otras no se encuentran y tienes que añadirlas):
-Port: en el especificamos el puerto en el que escucha nuestro servidor, por defecto el 22. Cambiar el puerto evita los ataques automáticos a el puerto 22.
-Protocol: protocolo ssh qu e utilizamos, es preferible utilizar solo el 2, ya que el 1 es mas inseguro.
-PermitRootLogin: esta opción por defecto esta en yes, no es muy aconsejable conectarse directamente como root, yo aconsejaría ponerla en no.
-MaxAuthTries: en esta linea especificamos el numero de intentos fallidos de autenticación. Si fallas ese numero de veces, te desconectas.
-ListenAddress:  dirección en la que escucha el servidor.
-AllowUsers: por defecto están todos los usuarios, si ponemos esta directiva, solo podrán conectarse los usuarios que pongamos separados por espacios.

Tras la modificación de algunos de las opciones anteriores tenemos que reiniciar el servidor para que funcione con ellas:
/etc/init.d/ssh restart

Otros ficheros que tenemos que tener en cuenta a la hora de la seguridad de nuestro servidor son los ficheros /etc/hosts.allow y /etc/hosts.deny.
hosts.deny: este fichero sirve para denegar el acceso, yo por defecto lo tengo todo denegado.
ALL : ALL

hosts.allow: este fichero sirve para permitir el acceso. En nuestro caso solo tenemos que darle acceso a el servidor ssh. Yo le he dado permiso a todas las redes, podríamos ser mas estrictos.
sshd : ALL

Comandos básicos del cliente.
La conexión mas sencilla, seria:
$ ssh usuario@servidor

Si el usuario con el que nos conectamos se llama igual que con el que nos conectamos, podemos omitir el nombre de usuario:
$ ssh servidor

Para conectarnos a un puerto diferente utilizamos la opción -p y el puerto, por ejemplo el 2222:
$ ssh -p 2222 usuario@servidor

Si nos va a hacer falta ejecutar programas que necesitan interfaz gráfica utilizamos la opción -X(es mayúscula):
$ ssh -X usuario@servidor

Copia remota de archivos(SCP).
Esto es muy útil para pasar archivos de una maquina a otra. Para copiar archivos de un servidor (/ruta/archivo) a nuestra maquina (/home/usuario):
$ scp -r -p usuario@servidor:/ruta/archivo /home/usuario
Las opciones -r y -p son opcionales. Su funciones son:
-r: copiado recursivo.
-p: preservar los atributos de los archivos.

También podemos hacerlo al revés y copiar archivos locales a un servidor:
$ scp /home/usuario/archivo usuario@servidor:/ruta/

Utilización de llaves de autenticación.
Lo primero es crear la llave del cliente, para esto, en la maquina del cliente y con el usuario que queremos acceder ejecutamos:
$ ssh-keygen -t rsa -b 2048

Este comando te pregunta donde desea guardar las claves y si quieres ponerle contraseña. Si no le ponemos contraseña cualquiera puede utilizar la clave. Ahora tenemos que enviar la clave a el servidor, ya sea con un USB, DVD, CD... lo que deseen, yo suelo optar por el scp:
$ scp ~/.ssh/id_rsa.pub usuario@servidor:~

Ya tenemos la clave en nuestro servidor, ahora tenemos que agregarla a nuestras claves autorizadas. Para esto ejecutamos (desde el servidor):
$ cat id_rsa.pub >> .ssh/authorized_keys || rm id_rsa.pub

Tenemos que tener la lista de claves bien protegidas:
$ chmod 600 ~/.ssh/authorized_keys

Esto puede ser utilizado cuando queremos que dos servidores automaticen cosas uno del otro, así puede acceder automáticamente.

Montar un sistema de archivos remoto (SSHFS).

Con esta herramienta podemos montar un sistema de archivos, como si estuvieran en nuestra maquina. Lo primero es la instalación:
# aptitude install sshfs

Comprobamos que tenemos cargado el modulo fuse, de no ser asi lo cagamos:
# lsmod | grep fuse
Si no aparece:
# modprobe fuse

Si queremos utilizar esta herramienta con un usuario que no sea el superusuario tendremos que agregarlo al el grupo fuse en el fichero /etc/group. Tras agregarlo cerrar e iniciar sesión de nuevo para que coja los cambios.

Bibliografía:
http://wiki.debian.org/SSH
https://wiki.archlinux.org/index.php/Secure_Shell_(Espa%C3%B1ol)
http://wiki.debianchile.org/SSH#Uso_de_SSH

viernes, 14 de junio de 2013

Instalar Debian Wheezy con Firmware brcm43xx

Un poco de información:
Algunos dispositivos hardware requieren algo llamado firmware o microcode, que se debe cargar en el dispositivo antes de poder funcionar. Es especialmente común en tarjetas de red aunque también se puede necesitar en otros dispositivos. Algunas tarjetas gráficas las funciones básicas están disponibles sin hardware adicional pero algunas funciones avanzadas requieren de la instalación de un fichero firmware.

En dispositivos antiguos este firmware estaba almacenado de forma constante en un procesador EEPROM/Flash en el mismo dispositivo. Actualmente la mayoría de los dispositivos no integra de esta manera el firmware, por que tiene que ser cargado por el sistema operativo

En la mayoría de los casos es no-libre de acuerdo con los criterios utilizados por el proyecto Debian GNU/Linux y por lo tanto no se puede incluir en la distribución principal o en el sistema de instalación.

Para la instalación del firmware podemos hacerlo de varias maneras:
  • Si no es un dispositivo que nos sea de especial necesidad en la instalación, podemos instalar el sistema y tras la instalación añadir los repositorios non-free e instalar los paquetes necesarios.
  • También podemos encontrar CD no oficiales que contienen firmware no libre en http://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/
  • Por ultimo y por la que he optado, podemos preparar un medio extraíble en el que cargaremos nuestro firmware. (Este es el método por el que optado)

Preparación de la memoria USB:
Es preferible que la memoria USB que utilicemos este en FAT para tener menos complicaciones.

Para obtener el firmware podemos obtenerlos de los repositorios de Debian, en mi caso, tengo un portátil HP G62 con una tarjeta wifi broadcom y el paquete que necesitaba es este.

Una vez que tenemos el paquete descargado, lo descomprimimos y en la ruta lib/firmware/brcm/ encontraremos dos ficheros con extensión .fw. Estos dos archivos los tendremos que copiar en la raíz de nuestra memoria USB.

$ cd Descargas/
$ dpkg-deb --extract firmware-brcm80211_0.36+wheezy.1_all.deb .
$ cp lib/firmware/brcm/*.fw /media/miMemoria/


Una vez que empecemos la instalación en los primeros pasos no saldrá un cartel preguntándonos si queremos cargar el firmware desde un medio extraíble.


Seleccionamos si y listo, ya nos aparecerá nuestra tarjeta de red.


Saludos y espero que os sea de utilidad.

Bibliografía:

Forma sencilla de crear una memoria USB booteable de Debian Wheezy

Bueno, esto es un corto tutorial para crear con un solo comando una memoria USB booteable de Debian Wheezy.

Con las memorias USB los CDs y DVDs se están quedando anticuados y aunque normalmente las distribuciones estén echas para que se graben en CD si tenemos una memoria USB, nos ahorraríamos el tener que gastar un CD.

Para la creación de memorias booteable, hay muchos métodos y programas, pero para mi el más cómodo y sencillo que he probado, es el que os traigo. En mi caso lo he hecho con Debian Wheezy, pero supongo que valdrá también para otras distribuciones.

El método es tan sencillo como tras tener nuestra imagen ISO descargada, yo me descargue un CD de Debian Wheezy estable , copiarla en la raíz de nuestra memoria tal y como hago:

(Antes de esto, tengan en cuenta que todo lo que contengan en su memoria USB sera borrado)
# cp Descargas/debian-testing-i386-CD-1.iso /dev/sdx

Con solo este comando tendremos una memoria USB booteable. Por ultimo tengo que decir que en un ordenador viejo que tengo no me funciono, pero no se si es por lo viejo que era, 10 años, o por que tenia un poco estropeada la placa base.

Saludos y espero que os sea de utilidad.

jueves, 16 de febrero de 2012

CHerokee, autentificación digest



    Terminando con cherokee, os traigo autenticación digest. Esta autenticación es igual que la utilizada en Apache, es más, necesitamos instalar las apache2-utils.
# aptitude install apache2-utils

    Una vez tenemos instalada estas herramientas, pasamos a crear el archivo donde se encuentran los reinos, usuarios y claves de usuarios.
# mkdir /claves
# htdigest -c /claves/digest.txt cherokee juanlu
Adding password for juanlu in realm cherokee.
New password:
# chown -R www-data.www-data /claves

    Con esto ya tenemos nuestro archivo creado con un reino, usuario y una clave. Si queremos añadir otro usuario, al igual que en apache, el comando va sin la opción -c, la cual se utiliza la primera vez para crear un usuario.

    La contraseña se la aplicaremos a un virtualhost, el cual he hecho anteriormente. Así que para configurar la contraseña nos vamos a el administrador web de cherokee y nos vamos a la pestaña vServers. En esta pestaña picamos sobre el virtualhost que queramos, nos vamos a la pestaña Comportamiento y le damos a Rule Management. Esta es la ventana que manejamos para añadir el php.

 
    Ahora tenemos que seleccionar la regla por defecto e irnos a la pestaña Seguridad. En esta pestaña seleccionamos el método de autenticación, Fichero Htdigest, y el metodo, digest. También tenemos que poner donde se encuentra el fichero con la contraseña, /claves/digest.txt y el reino, cherokee. Por ultimo le damos a guardar y reiniciamos cherokee.

 

   Ahora si intentamos entrar en el virtualhost, nos pide usuario y contraseña.
 

lunes, 6 de febrero de 2012

Cherokee, ejecución de scripts PHP.


   Para ejecutar PHP en cherokee, lo primero sera instalar phpcgi, no puede ser php normal ya que cherokee es multi hilos por defecto, en verdad es una mezcla, por lo que no se puede utilizar php normal.
# apt-get install php5-cgi


   Tras esto tenemos que modificar el fichero /etc/php5/cgi/php.ini y tenemos que descomentar la linea que dice:
# cgi.fix_pathinfo=1


    Tras esto nos metemos en el virtual host que queramos y nos vamos a el apartado de Comportamiento. Una vez en este apartado le damos a “Rule Management”.


    Ahora para que nuestro sitio pueda interpretar php, tenemos que darle primero a Nuevo.

    Esto nos abrirá una ventana, donde en el lateral izquierdo tenemos varias opciones, pues nos vamos a el apartado Lenguajes y seleccionamos PHP. Tras esto le damos a Añadir.

    Y nos saldrá otra ventana a la que le daremos a crear.

    Tras esto se nos añade en el panel de la izquierda una nueva opción. En esta opción si nos vamos a la pestaña Gestor, podemos elegir que tipo de gestor queremos (FastCGI, CGI...) yo puse FastCGI, que es el mas rápido.

   Tras estos pasos le damos a Guardar y reinicio Forzado.

    A mi a lo primero me saltaba error en los permisos, así que me fui a la pestaña Seguridad y en la opción de Permitir desde, puse 0.0.0.0/0.0.0.0. Tras esto, guarde y reinicie.

 
    Para comprobar, que todo funciona bien me cree el siguiente archivo:
# cat /var/www/info.php
<?php phpinfo(); ?>

    Y aquí esta el resultado.