Vous êtes sur la page 1sur 14

Curso de administracin de sistemas UNIX

SSH
Definicin, configuracin avanzada del servidor, artculos sobre RSYNC, SCP, y SFTP, y ejercicios.

Secure Shell
De Wikipedia, la enciclopedia libre
SSH (Secure SHell) -intrprete de comandos seguro- es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a mquinas remotas a travs de una red. Permite manejar por completo la computadora mediante un intrprete de comandos, y tambin puede redirigir el trco de X para poder ejecutar programas grcos si tenemos un Servidor X (en sistemas Unix) corriendo. Adems de la conexin a otras mquinas, SSH nos permite copiar datos de forma segura (tanto cheros sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a las mquinas y pasar los datos de cualquier otra aplicacin por un canal seguro tunelizado mediante SSH.

Contenido
1 Seguridad 2 Historia 3 Vase tambin 4 Enlaces externos

Seguridad
SSH trabaja de forma similar a como se hace con telnet La diferencia principal es que SSH usa tcnicas de cifrado que hacen que la informacin que viaja por el medio de comunicacin vaya de manera no legible y ninguna tercera persona pueda descubrir el usuario y contrasea de la conexin ni lo que se escribe durante toda la sesin; aunque es posible atacar este tipo de sistemas por medio de ataques de REPLAY y manipular as la informacin entre destinos.

Historia
Al principio slo existan los r-commands, que eran los basados en el programa rlogin, el cual funciona de una forma similar a telnet. La primera versin del protocolo y el programa eran libres y los cre un nlands llamado Tatu Ylnen, pero su licencia fue cambiando y termin apareciendo la compaa SSH Communications Security, que lo ofreca gratuitamente para uso domstico y acadmico, pero exiga el pago a otras empresas. En el ao 1997 (dos aos despus de que se creara la primera versin) se propuso como borrador en la IETF. A principios de 1999 se empez a escribir una versin que se convertira en la implementacin libre por excelencia, la de OpenBSD, llamada OpenSSH.

Vase tambin
SSHFS

Enlaces externos
Seguridad de Debian (http://security.debian.org) Sitio ocial. (en ingls) Sitio Ocial de OpenSSH (http://www.openssh.org) (en ingls) [1] (http://www.guia-ubuntu.org/index.php?title=Servidor_ssh) Gua muy completa (en espaol) Tutorial para instalar conectarse a un proxy casero via tnel SSH (http://sozter.net /post/49922632/proxy-tunel-ssh) [2] (http://www.howtoforge.com/secure_mysql_connection_ssh_tunnel) Crear un tnel SSH al servidor MySQL. (en ingls) Herramientas libres PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/) para conexiones SSH (en ingls) Obtenido de "http://es.wikipedia.org/wiki/Secure_Shell" Categoras: Software para Unix | Software para Linux | Protocolos de Internet | Protocolos de nivel de aplicacin Esta pgina fue modicada por ltima vez el 16:48, 6 nov 2008. Contenido disponible bajo los trminos de la Licencia de documentacin libre de GNU (vase Derechos de autor). Wikipedia es una marca registrada de la organizacin sin nimo de lucro Wikimedia Foundation, Inc.

Publicado en TrucoLinux.com (http://trucolinux.com)


Inicio > Proteger el acceso por ssh

Proteger el acceso por ssh


Por queru Creado 03/02/2009 - 1:15am

SSH (Secure SHell) es el nombre de un protocolo [1] y del programa [2] que lo implementa, y sirve para acceder a mquinas remotas a travs de una red. Permite manejar por la computadora [3] mediante un el intrprete de comandos instalado en la misma (bash, ksh, etc..) [4], y tambin puede redirigir el trco de X-Windows [5] para poder ejecutar programas grcos si tenemos un Servidor X [6] arrancado en nuestra mquina local. Asegurando SSH: Aunque SSH en s es un protocolo seguro, podemos anar los parmetros de conguracin para hacer que su utilizacin resulte todava ms segura. Pasos que seguiremos: Deshabilitar SSH 1. Autenticacin basada en llave RSA. No permitir autenticacin mediante login/password. No Permitir acceso como root sin llave. Cambiar el puerto por Defecto. Banear IPs tras 5 logins errneos. Deshabilitar SSH 1: Puesto que en la versin del protocolo ssh 1 hay algunas inseguridades, es mejor usar slamente el protocolo 2, aunque en Debian ya viene as por defecto, para otras distros editaremos el chero de conguracin /etc/ssh/sshd_config y cambiaremos la opcin:
# /etc/ssh/sshd_config Protocol 2

Nota: Al efectuar cualquier cambio en la conguracin de SSH, debemos reiniciar el servicio para que sea efectivo en los siguientes accesos. La sesin a travs de la que estamos conectados no se ver afectada. Por ejempo en Debian ejecutaramos /etc/init.d/sshd restart.
# /etc/init.d/sshd restart

Autenticacin mediante llave RSA: Entrar con usuario y password est muy bien, pero nuestro servidor ser pasto de los niatos-scriptadores y de los lamers (el da que tenga tiempo me voy a dedicar a cascarles un HoneyPot [7] y a denunciarlos a la Guardia Civil) provistos de diccionarios de claves. En unos das observaremos como hay continuos intentos de autenticacin desde las mismas IPs, con vanos resultados si nuestra clave es medianamente complicada, pero... Por qu arriesgarse? Creando nuestra llave RSA:

Esto lo haremos en nuestra prpia mquina, porttil o desktop, no en el servidor que estamos forticando.
# ssh-keygen -t rsa

Este programa lo que hace es generar un par de claves rsa, con una parte pblica, que es la que pondremos en los servidores y la que podemos pasar a cualquiera sin problemas, por ejemplo a otro administrador para que la ponga en un servidor de un cliente y poder acceder nosotros tambin, y una privada, que deberemos conservar en secreto, en nuestro ordenador y con al menos una copia de seguridad a buen recaudo. Al ejecutar el comando anterior nos pedir una "passphrase" o "frase de paso", es decir, una clave. La podemos dejar en blanco si queremos, si nadie accede a nuestra llave privada RSA, el mtodo es seguro, no hace falta una passphrase que puede ser un poco incordio, pero si queremos una mayor seguridad, podemos asignarla, de esta forma el cliente SSH nos pedir la passphrase cada vez que necesite utilizar la llave, y aunque alguien se haga con nuestra llave, no se servir de mucho sin ella. Colocando nuestra llave en el servidor: Nuestra llave se guarda en el directorio .ssh de nuestra carpeta personal o home, concretamente nuestra llave pblica est en ~/.ssh/id_rsa.pub,y queremos ponerla en el chero /root/.ssh/authorized_keys del servidor. Podemos utilizar diversos medios para ello, por ejemplo hacer un cat del llave pblica, copiarla al portapapeles, editar el chero del servidor de llaves autorizadas y pegarla. As de fcil, eso funciona perfectamente. Pero como tenemos acceso con password vamos a hacer una de estas cosas de BOFHER [8] con las que los novatos se quedan pillaos una semana ;-), desde la mquina cliente:
# cat ~/.ssh/id_rsa.pub | ssh root@miserver.midominio.com
[9]

-C "cat - >> /root/.ssh/authorized_keys"

Virguero, pero es muy fcil, le tiramos la llave pblica al comando ssh por su entrada estndar, le decimos que comprima la transmisin (-C) y en la remota ejecutamos cat de la entrada estndar con redireccin aadida (>>) al chero de llaves autorizadas. Habilitar autenticacin mediante llave en el servidor: En Debian no hace falta, ya viene por defecto y ya podemos acceder al servidor con nuestra llave, en otras distribuciones es posible que tengamos que modicar el chero de conguracin /etc/ssh/sshd_config y cambiar estas opciones:
# /etc/ssh/sshd_config PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys

Deshabilitar la autenticacin por password: Para forticar de verdad el ssh deberamos desactivar la autenticacin mediante contrasea para todos los usuarios, especialmente para el root:
# /etc/ssh/sshd_config PasswordAuthentication no

Hay muchos admins que no permiten acceder como root al servidor (PermitRootLogin no) y te obligan a entrar con un usario no privilegiado y ejecutar todo con sudo. Personalmente opino que es innecesario y molesto en la mayor parte de los casos, suele ser suciente, y mucho ms cmodo, as:
# /etc/ssh/sshd_config PermitRootLogin withoutpassword

Es decir, se puede entrar como root pero slo con llave, no con contrasea. Cambiar el puerto por defecto: Es rizar el rizo, y a veces ganar mucha incomodidad por un poquito ms de seguridad, pero bueno, os contamos como hacerlo:

# /etc/ssh/sshd_config Port 25142

El puerto puede ser el que t quieras, no tiene porque sr el 25142, aunque es recomendable poner uno alto, por ejemplo el 6666 y aadir alguna medida de proteccin contra el escaneo de puertos, pero eso ya queda fuera del alcance de este artculo. En cualquier caso recuerda que no deberas utilizar los puertos privilegiados (< 1024) porque normalmente se utilizan para otros servicios y estn reservados, y que el nmero mximo de puerto es el 65535 (64K). Banear a las ips que hacen mas de 5 logeos erroneos: Para esto usaremos una herramienta llamada fail2ban, aunque hay otras como logcheck que pueden hacer un servicio similar. Instalamos fail2ban: En Debian:
# apt-get install fail2ban

Una vez instalado crearemos una directiva para ssh aadiendo lo siguiente al chero /etc/fail2ban /jail.local:
# vi /etc/fail2ban/jail.local [ssh] enabled port filter logpath maxretry = = = = = true 25142 sshd /var/log/auth.log 5

Reiniciamos fail2ban:
# /etc/init.d/fail2ban restart

Y listo! Recuerda: Al efectuar cualquier cambio en la conguracin de SSH, debemos reiniciar el servicio para que sea efectivo en los siguientes accesos. La sesin a travs de la que estamos conectados no se ver afectada. Por ejempo en Debian ejecutaramos /etc/init.d/sshd restart. --- Basado en un artculo original de TuXed --linux seguridad Unix Todo el contenido sujeto a contrato ColorIruris salvo que se especique lo contrario. Este sitio ha sido totalmente desarrollado y montado sobre software libre: Gentoo GNU/Linux, Apache, MySQL, PHP, Drupal... Sindicar contenidos: Noticias (RSS).
URL del envo: http://trucolinux.com/node/15 Enlaces: [1] http://es.wikipedia.org/wiki/Protocolo [2] http://es.wikipedia.org/wiki/Programa [3] http://es.wikipedia.org/wiki/Computadora [4] http://es.wikipedia.org/wiki/Intrprete_de_comandos [5] http://es.wikipedia.org/wiki/X_Window_System [6] http://es.wikipedia.org/w/index.php?title=Servidor_X&action=edit [7] http://es.wikipedia.org/wiki/Honeypot [8] http://es.wikipedia.org/wiki/Bastard_Operator_from_Hell [9] mailto:root@miserver.midominio.com

SSH LINUX USER

SSH, SCP Y SFTP

DESCANSO PLACENTERO
SSH proporciona un mtodo seguro para trabajar en mquinas remotas y transferencia de datos cifrados. Vamos a mostrarte otros beneficios de la shell segura. POR HEIKE JURZIK

CA. Knigsberg, Fotolia

SH viene de secure shell o shell segura, y hace referencia tanto al protocolo como al programa en s mismo. La suite OpenSSH [1], desarrollada por el proyecto OpenBSD, ofrece a los usuarios una alternativa SSH libre con todo lo necesario para usar conexiones cifradas en muchos sistemas operativos: herramientas de la lnea de comandos para trabajar en mquinas remotas, la facultad de ejecutar programas remotamente (incluyendo aplicaciones grficas a travs de X11) o tunelar servicios de Internet va SSH (y as asegurar una conexin a prueba de sniffing), herramientas para copia de ficheros segura, y ms. La Tabla 1 muestra una perspectiva de las principales aplicaciones. OpenSSH es un paquete estndar incluido en cualquier distribucin Linux reciente, de manera que la instalacin es bastante sencilla. La mayora de los sistemas ofrecen paquetes separados para el cliente y el servidor. Aunque el cliente normalmente est preinstalado, la configuracin del servidor es necesaria si deseamos acceder a nuestro ordenador Linux a travs de SSH desde otra mquina. Buscando openssh en nuestro administrador de paquetes debera revelar el paquete correcto. En este artculo examinaremos el uso de claves de host, cmo verificar huellas digi-

tales de clave de host, cmo administrar claves privadas con el agente SSH (incluyendo administracin temporal), cmo tunelar conexiones SSH con el proxy SOCKS integrado, y cmo transferir datos interactivamente va ftp seguro.

Clave de Host
La primera vez que establecemos contacto con una mquina corriendo ssh, revelar su huella digital de clave de host pblica

(Figura 1). Cuando se nos avise de que la autenticidad de la mquina no ha sido verificada, necesitaremos decirle yes, y seguidamente nos pedir que introduzcamos la contrasea. Las claves de host de los sistemas remotos se encuentran en el fichero ~/.ssh/ known_hosts. La prxima vez que nos registremos en la mquina, SSH lo comprobar para ver si la clave no se ha cambiado, en caso contrario rehusar cooperar: WAR-

Tabla 1: Suite OpenSSH


Programa ssh Funcin El cliente de la lnea de comandos establece conexiones cifradas a mquinas remotas y ejecuta comandos en esas mquinas en caso necesario. Para copiar ficheros localmente (no interactivamente) a o desde ordenadores remotos, podemos usar scp (secure copy). El cliente ftp (secure ftp) soporta copia interactiva. Como otros clientes ftp de la lnea de comandos, la herramienta ofrece otras muchas opciones adems de la copia, como cambiar y listar directorios, modificar permisos, borrar directorios y ficheros, y ms. El servidor SSH est implementado como un demonio y escucha en el puerto 22 por defecto. Los clientes SSH establecen conexiones a sshd. La herramienta ssh-keygen se usa para crear y convertir claves SSH. La herramienta ssh-keysign se usa para autenticacin basada en host. Esta aplicacin presenta claves hosts pblicas y las aade al fichero ~/.ssh/ known. El agente SSH administra claves SSH privadas y simplifica el manejo de contraseas. La herramienta ssh-add introduce el ssh-agent a nuevas claves.

scp sftp

sshd ssh-keygen ssh-keysign ssh-keyscan ssh-agent ssh-add

WWW.LINUX- MAGAZINE.ES

Nmero 41

83

LINUX USER SSH

NING: REMOTE HOST IDENTIFICATION HAS CHANGED!. Este ejemplo podra ser un intento deliberado de un ataque de hombre-de-enmedio, aunque un cambio en la clave host tiene a menudo una explicacin ms inofensiva. El administrador cambi la clave o reinstal el sistema. Si estamos seguros de que la explicacin es inofensiva, podemos arrancar un editor de texto, abrir el fichero .ssh/knwon_hosts y borrar la entrada en cuestin. El directorio /etc/ssh almacena las claves hosts tanto pblicas como privadas. Si un administrador ha publicado la huella digital de la clave pblica (/etc/ ssh_host_rsa_key.pub), podemos verificarla en el contacto inicial antes de aceptar la conexin, para lo cual es til la herramienta ssh-keygen. Configurando la opcin -l nos presenta la huella digital para la clave pblica que hemos pedido que nos especifique. Si, por ejemplo, un usuario llamado petronella quiere registrarse desde una mquina llamada samesame (Figura 1), y el administrador, en una mquina llamada macnugget, quiere verificar la huella digital de la clave host, deberia seguir los pasos del Listado 1.

Figura 1: En el login inicial, la mquina remota usa su clave host para identificarse a s misma.

la opcin -t es posible configurar un contador para ssh-agent como una funcionalidad de seguridad extra. Una vez agotado el perodo de preconfiguracin, el agente olvidar cualquier clave almacenada. Especificamos la vida de la contrasea con el parmetro -t. ssh-agent comprende varias unidades: ningun valor o s significan segundos, m minutos, h horas, d das y w semanas. Para arrancar el agente como un demonio independiente y configurarlo para que olvide todas las claves que hemos aadido despus de dos das, introducimos:
ssh-agent -t 2d

liza automticamente y elimina cualquier informacin de clave que utiliz. Debemos saber que algunas distribuciones, incluyendo las actuales versiones de Debian, arrancan el programa ssh-agent con el entorno X. Llamar a ps | grep, como muestra la Figura 2, es la mejor manera de comprobarlo. Cargar las claves en el agente sin restricciones de tiempo y luego olvidarnos de cerrar la pantalla puede significar abrir una vulnerabilidad en la seguridad. Para evitar estos malos hbitos deberemos modificar nuestro fichero /etc/X11/Xsession.options y comentar la lnea
use-ssh-agent

El Agente X est Observando


Crear una clave SSH, lo que supone soportar una autenticacin sin introducir contrasea, evitara tener que escribirla, pero podra comprometer la seguridad. La claves privadas, locales no se salvaguardan, lo que abre la puerta a que un atacante las encuentre. El programa ssh-agent ofrece un mtodo ms sensato para la administracin de nuestras claves privadas. Al inicio de una sesin ssh-agent slo necesitamos introducir nuestra contrasea una vez por clave. El verstil agente se ejecutar en el fondo como un demonio o podemos llamarlo como cualquier otro programa normal. Con

La salida muestra qu valores configurar para las variables de entorno $ssh_auth_sock y $SSH_AGENT_PID para que ssh-agent funcione adecuadamente. Para evaluar la salida, podemos copiarla y pegarla o usar eval cuando arranquemos el programa:
$ eval $(shh-agent -t 2d)

insertando un smbolo de almohadilla (#) al comienzo de la misma.

Claves para Agentes


Despus de arrancar el agente necesitamos aadir nuestras claves privadas. El programa encargado de esto es ssh-agent. Sin parmetros adicionales, podemos llamar a la herramienta y permitirle que busque automticamente el directorio ~/.ssh para claves privadas y solicitar una identidad para la contrasea, o podemos pasarlo en un fichero clave:
$ ssh-add ~/.ssh/id_dsa

En el arranque, el programa revela su ID de proceso, como confirma la llamada correspondiente a ps (Figura 2). Incluso si cerramos la shell, el agente no finalizar por s mismo. Para finalizar el programa, necesitamos llamar a ssh-agent -k en la shell en la que arrancamos ssh-agent. Si no podemos hacerlo, porque la shell llamada no est ya ejecutndose, por ejemplo, la nica opcin que nos queda es el comando kill:
$ kill 29692

Listado 1: Verificacin Clave Huella Digital Host


01 # ssh-keygen -l 02 Enter file in which the key is (/root/.ssh/id_rsa): /etc/ssh/ssh_host_rsa_key 03 2048 a0:0a:aa:3b_d3:08:fl:90:45:4f: 48:c9:f6:cb:92:37 /etc/ssh/ssh_host_rsa_key.pub

Para ejecutar ssh-agent con una aplicacin, como un programa terminal, antes que como un demonio, ejecutamos el nombre del ejecutable en la lnea de comandos,
$ ssh-agent gnome-terminal &

Al teclear la contrasea apropiada, el agente presentar un mensaje de xito (Listado 2). De nuevo, una opcin (-t) puede ofrecernos mayor seguridad. Justo cuando se inicia (ssh-agent), podemos usar este parmetro para especificar cunto tiempo se mantendrn las claves. El comando en la lnea 1 del Listado 3 configura el contador para 10

Listado 2: Contrasea Coincidente


01 Enter passphrase for /home/petronella/.ssh/id_dsa: 02 Identify added: /home/petronella/.ssh/id_dsa (/home/petronella/.ssh/id_dsa)

el cual restringe el agente a esta aplicacin y a los programas arrancados en l. Si abandonamos la terminal, shh-agent fina-

84

Nmero 41

WWW.LINUX- MAGAZINE.ES

SSH LINUX USER

minutos. La opcin -l devuelve una lista de claves privadas administradas por el agente (lnea 5). La salida muestra el tamao (1.024 bits) y la huella digital para la clave que hemos aadido. Ahora podemos iniciar sesiones SSH desde esta shell (y desde otras sesiones configurando las dos variables de entorno $SSH_AUTH_SOCK y $SSH_AGENT_PID) y entrar en las mquinas objetivo sin introducir una contrasea. La opcin -d, en combinacin con el nombre del fichero de la clave, la elimina (Listado 3, lnea 7). Para eliminar todas las identidades de una sola vez especificaremos la opcin -D.

Figura 2: ssh-agent requiere varias variables de entorno y revela su PID cuando se inicia.

Luz al Final del Tnel


La shell segura nos brinda una opcin para asegurar otros servicios de Internet contra el sniffing va tunelado. Es lgico asegurar un protocolo que de otra forma no estara cifrado (como POP3) reenviando conexiones TCP/IP a una mquina remota por medio de un protocolo cifrado . El uso de SSH como un proxy SOCKS es otra elegante aplicacin que permite a los usuarios transferir datos cifrados mediante un navegador web. Configurar un tnel a un proxy tambin evita la censura de contenidos web, una til funcionalidad en pases que bloquean algunos sitios web. Si poseemos una cuenta shell en una mquina en un pas menos restrictivo, este mtodo puede darnos acceso web sin ningn obstculo. Para comenzar, habilitamos el proxy con la opcin -D de SSH y, al mismo tiempo, lo pasamos a un nmero de puerto que seleccionaremos entre los libres. En este escenario, los parmetros -f y -N son tambin tiles. El primero pasa ssh a un segundo plano tras el registro y antes de ejecutar los comandos, y el ltimo le dice a ssh que no hay ningn comando ms. Por ejemplo:
$ ssh -fN -D 1080 <i>Proxy<i>

En Conexiones, pulsamos Configuracin, habilitamos la configuracin de proxy manual, introducimos la direccin IP 127.0.0.1 y el puerto que seleccionamos previamente en el campo SOCKS Host. Se encuentran disponibles las versiones 4 y 5 de SOCKS; cuando tengamos alguna duda, comprobamos la pgina man de ssh para ver qu versin soporta nuestra instalacin SSH. Despus de aceptar estos cambios en Firefox, podemos introducir una direccin en nuestro cuadro de direcciones del navegador para verificar la conexin: http:// www.mi-direccionIP.com/. Deberamos ver la IP para la mquina remota.

xin en el ordenador objetivo en la lnea de comandos:


$ sftp huhn@macnugget

Interactivo con sftp


A diferencia de scp, los usuarios trabajan interactivamente con sftp, al igual que en cualquier sesin ftp normal. Un ftp seguro no espera un servidor ftp en el otro extremo de la conexin, sino ms bien un demonio SSH y, cmo no, una cuenta shell. Como con SSH, configuramos una cone-

Listado 3: Eliminar la Clave


01 $ ssh-add -t 10m ~/.ssh/id_dsa 02 Enter passphrase for /home/petronella/.ssh/id_dsa: 03 Identify added: /home/petronella/.ssh/id_dsa: home/petronella/.ssh/id_dsa 04 Lifetime set to 600 seconds 05 $ ssh-add -l 06 1024 f3:c9:b6:5d:23:3a:9d:61:50:19: 63:3c:e8:22:7c:86 /home/petronella/.ssh/id_dsa (DSA) 07 $ ssh-add -d /home/petronella/.ssh/id_dsa 08 Identify removed: /home/petronella/.ssh/id_dsa (/home/petronella/.ssh/id_dsa. pub)

Tras introducir nuestra contrasea deberamos ver el prompt sftp>, que nos dice que el programa est listo y esperando ms entradas. El programa sftp no es muy diferente de aqullos usados por clientes ftp basados en shell. Sin embargo, no podemos establecer el modo transferencia (ASCII o binario) antes de transferir los datos, porque los ficheros se envan tal cual a travs de la red. Un ftp seguro tambin tiene algunas funciones avanzadas para modificar los permisos de los ficheros y propietarios. Para obtener una resumen de los comandos disponibles puede verse el comando help. Algunas opciones prcticas de la lnea de comandos facilitan el trabajo con sftp. Por ejemplo, el parmetro -C para habilitar la compresin de datos no slo se encuentra disponible para ssh y scp, sino tambin para sftp. La opcin -b <fichero> nos permite pasar a un fichero de lotes con los comandos que deseamos ejecutar a sftp. Sin embargo, esto slo funcionar si no necesitamos introducir una contrasea para registrarnos. Si estamos interesados en un cliente grfico para sftp, la respuesta es bastante simple: Tanto Konqueror de KDE como Nautilus de Gnome soportan sftp perfectamente. Introducimos lo siguiente en la lnea de direcciones o en la aplicacin,
sftp://usuario@servidor

Despus de introducir la contrasea reaparece el prompt y la shell se encuentra lista para aceptar ms instrucciones. Y esto es lo que hay: el proxy SOCKS est esperando hacer algo. El paso siguiente es configurar el cliente SSH como un proxy SOCKS en la configuracin de red para el programa en cuestin. Si ste es el navegador web Firefox, podemos seleccionar Editar | Preferencias e ir a General | Red.

y luego nos autenticamos con la contrasea correcta para usar sftp, al igual que nuestro I administrar de fichero local.

RECURSOS
[1] Implementacin SSH libre, Open SSH: http://openssh.org

WWW.LINUX- MAGAZINE.ES

Nmero 41

85

BackUps ADMINISTRACIN

Copias de seguridad con Rsync y SSH

PUERTOS SEGUROS

A menudo es ineficiente el uso de cintas de backup cuando se necesita salvar algunos ficheros o restaurar una copia de seguridad. La herramienta Rsync enva los ficheros crticos a otro ordenador secundario, al que se puede acceder fcilmente. POR MARC ANDR SELIG
na copia de seguridad completa en un medio independiente es una parte vital de cualquier estrategia de backups. Sin embargo, la tarea de restaurar copias de seguridad desde una cinta, CDs o DVDs es a menudo una tarea que requiere bastante tiempo. A veces incluso compensa hacer backups online. Existen algunas soluciones disponibles para realizar backups online, como Rsnapshot. Este mes en el taller del administrador veremos una solucin basada en un script que hace uso de Rsync y SSH.

Cooperacin
La herramienta Rsync, combinada con SSH, se encarga del transporte de las copias de seguridad por la red. Esta herramienta soluciona dos problemas a

los administradores. Primero, ahorran ancho de banda, ya que Rsync comprime los datos si se le pide que lo haga. Segundo, SSH se asegura de que los sniffers que puedan haber en la red no se hagan con los datos de las copias. Una ventaja adicional de Rsync es que transfiere tan solo los cambios por la red y los fusiona con la ltima copia completa que se tenga en la mquina destino, proporcionando la simplicidad de los backups completos con la eficiencia de los backups incrementales. Para averiguar qu datos han cambiado desde el ltimo backup, Rsync compara una combinacin de los tamaos de los ficheros y sus fechas o un checksum MD4 de cada fichero. Una de las caractersticas especiales de Rsync es un meca-

nismo sofisticado que, cuando se enfrenta a un fichero enorme, no copia el fichero completo, sino tan solo las partes que hayan cambiado. Rsync no maneja el transporte de los datos por la re, sino que son los usuarios los que han de establecer un tnel arbitrario. La solucin tradicional para realizarlo era hacer uso de la shell remota, rsh, pero ahora SSH est mejor capacitado para realizar esta tarea, ya que encripta los datos que se transmiten. La Figura 1 muestra como funciona un backup con Rsync y SSH. Para proporcionarle a Rsync la mxima proteccin en entornos hostiles, habr que configurar el servicio SSH con la mxima seguridad. Si se comete un error aqu, se puede exponer al sistema a

WWW.LINUX-MAGAZINE.ES

Nmero 08

75

ADMINISTRACIN BackUps

accesos no autorizados. Como sucesor legtimo de la shell remota, SSH se usa principalmente para la administracin remota. Invocando ssh usuario@maquina se proporcionar una shell de la mquina remota.

Las Claves Preferidas


Sin instrucciones especficas, SSH por defecto comprobar la clave del usuario para la autenticacin. Adems de esto, el servidor donde el usuario se est conectando tambin puede autenticarse. SSH usa algoritmos criptogrficos para realizar estas tareas. Suponiendo que las entidades implicadas en la transaccin se hayan autenticado correctamente, los datos sern encriptados y enviados por la red. Los administradores, normalmente, no desean lanzar los scripts de backup manualmente ya que tienen que introducir sus claves SSH. Normalmente cron se encarga de lanzar los trabajos de backup. Aqu es donde surge un gran problema con las peticiones de las claves. Para evitarlo, los administradores pueden optar por un modo de autenticacin que utilice un par de claves asimtricas para la autenticacin en vez de las tpicas contraseas. El par de claves, que corresponden a una clave pblica y a otra privada, identifican de forma unvoca a un usuario. El comando ssh-keygen -t dsa genera un par de claves asimtricas DSA. La clave privada, que el programa almacena en ~/.ssh/id_dsa por defecto, permanece en la mquina local. Los usuarios tienen que copiar la clave pblica, ~/.ssh/id_dsa.pub, a todas las mquinas desde las que tenga que conectarse. Para ello, se copia el contenido de la clave pblica en la mquina destino como ~/.ssh/authorized_keys. Este fichero puede contener mltiples claves,

Figura 1: Rsync crea copias de seguridad y utiliza SSH para enviarlos a una segunda mquina. SSH utiliza una simple tubera para aceptar los datos. En el otro extremo, el demonio SSH pasa la copia de seguridad al proceso Rsync. Rsync no transfiere ficheros que no hayan sido modificados, esto ahorra ancho de banda.

para escenarios en los que los usuarios puedan tener mltiples pares de claves. A partir de ahora, la autenticacin se manejar por la solucin ms segura basada en claves asimtricas. El usuario root, normalmente, no tiene permiso para conectarse remotamente. El servicio SSH ignorar el fichero llamado /root/.ssh/authorized_keys. Si los administradores desean una conexin remota SSH para el root, tendrn que establecer la variable PermitRootLogin a yes en el fichero /etc/ssh/sshd_config.

Conexin Automtica
El programa ssh-keygen solicita al usuario una frase de paso cuando genera el par de claves. La frase de paso se utiliza para encriptar la clave privada. Esto impide a un atacante que haya conseguido colarse en el directorio home de un usuario que use la clave privada para conectarse a otras mquinas. Desde luego, no se puede suministrar la frase de paso al script automticamente. Por esta razn, ssh-keygen permite que no se tenga que poner la frase de paso, aunque esto deja a la clave privada

expuesta en el disco duro local. Una solucin ms segura sera utilizar un agente SSH. El agente desencripta la clave privada despus de introducir la frase de paso y almacena la clave en la RAM. Si se tiene acceso al agente sshagent que se ejecuta en el sistema, se podr hacer uso de la clave privada. Pero los atacantes tendrn que leer la memoria principal para comprometer la frase de paso. Si se quiere usar el agente con cron y otros scripts, se puede llamar a ssh-agent una sola vez en el proceso de arranque, o despus de arrancar, y encauzar los resultados en un fichero. Entonces, el fichero contendr las dos variables de entorno que SSH necesita para acceder al agente. Los administradores normalmente desean aadir el fichero a sus entornos usando el comando . ; esto se sigue de ssh-add y la frase de paso. As pues el agente tiene almacenado en memoria la clave privada de forma segura:
$ ssh-agent >~mas/tmp/agent.sh $ . ~mas/tmp/agent.sh Agent pid 21681 $ ssh-add Enter passphrase for U /Users/mas/.ssh/id_dsa: $

Tabla 1: Opciones de Rsync


-a -v -c -C -u -H -n -e ssh --delete --modify-window=N -z Archivo: recursivo con enlaces y todos los permisos Indicador de progreso Compara los checksums del fichero Ignora los ficheros no-crticos Update: no sobrescribe ficheros nuevos Sincroniza los enlaces duros en el destino No hace nada, simula lo que podra pasar Utiliza SSh para la conexin Elimina ficheros borrados localmente desde el destino Tolerancia para los timestamp que Rsync debe mantener como equivalente Zip: Comprime los ficheros antes de transferirlos

Los programas que requieren acceder al agente tan slo necesitan el fichero.

Haciendo Tnel con Rsync


Adems de un simple login en una mquina remota, SSH proporciona un importante servicio para las copias de seguridad del sistema. Transfiere cualquier dato que

76

Nmero 08

WWW.LINUX-MAGAZINE.ES

BackUps ADMINISTRACIN

reciba por la tubera a travs de una conexin encriptada al servicio SSH remoto. Esto permite copiar un directorio a otro ordenador con un slo comando: cd directorio && tar cf- . | ssh usuario@ordenador tar xf-. El fichero creado por el tar es enviado a SSH y SSH lo reenva al servicio remoto SSH, el cual llama a tar para desempaquetar el archivo. Rsync hace uso de esta solucin. El parmetro -e ssh le dice a Rsync que pase cualquier fichero a SSH. Como alternativa, podra establecer la variable de entorno RSYNC_RSH:
$ RSYNC_RSH=ssh $ export RSYNC_RSH

cado, incluyendo subdirectorios, ficheros, enlaces simblicos, permisos y fechas, propietarios, grupos y ficheros de dispositivos. -v es otra opcin til, que muestra cada fichero que ha sido transferido correctamente, como -H que realiza un chequeo y transfiere los enlaces duros. Tambin se podra querer especificar la opcin --delete que elimina cualquier fichero borrado localmente desde el medio de almacenamiento remoto, esto proporciona una copia exacta del directorio sin ficheros antiguos. La Tabla 1 tiene algunas opciones ms.

Listado 1:Backup Inseguro


01 #!/bin/sh 02 03 . ~mas/tmp/agent.sh 04 /usr/bin/rsync -rlptH --delete /Users/backupuser@backuphost:/ export/backup

Ejemplo
El Listado 1 muestra un ejemplo trivial que copia el directorio /Users a /export/backup en la mquina backuphost. La lnea cuatro de este programa lee el fichero generado previamente para el acceso del agente SSH. Esto no es necesario si el administrador opta por una clave sin proteccin. A continuacin el script llama a Rsync. El usuario backupuser se identifica en el

Para evitar tener que establecer la variable manualmente, simplemente se puede aadir las dos lneas como se muestra arriba al .bashrc en el directorio home del usuario. Para tareas de cron, los administradores necesitan establecer la variable en el crontab apropiado. -a, para el modo fichero, es otra opcin importante Rsync. Esta opcin le dice a Rsync que transfiera todo el directorio especifi-

sistema y accede al directorio especificado. En vez de usar la opcin -a, ahora las opciones -rlpt se usan para copiar un directorio recursivamente con todos sus enlaces, permisos y tiempos. Para guardar los permisos de propietarios y de grupos en la copia de seguridad, el script necesitara identificarse en el host de backup como root. Adicionalmente, -H y --delete le dice a Rsync que sincronice los enlaces duros y elimine los datos borrados del ordenador remoto. El script necesita privilegios de root para realizar un backup automatizado completamente de todos los directorios home. La siguiente entrada en el fichero /etc/crontab llama al script cada noche a las 02:03 a.m.:

ADMINISTRACIN BackUps

3 2 * * * root U /usr/local/bin/Ursync-backup.sh

Script de Seguridad
En el Listado 1, el usuario mas ha creado un fichero agent.sh y lo ha almacenado en su directorio home. El root regularmente lee y ejecuta este fichero. Cualquier usuario con acceso a la cuenta mas (incluyendo a mas) puede ejecutar comandos con privilegios de root! El Listado 2 elimina esta vulnerabilidad. El fichero agent.sh se mueve desde el directorio home del usuario al directorio home del root, que est (afortunadamente) protegido contra accesos de escritura. El Listado 2 tambin verifica el usuario y los permisos de agent.sh. Como se deca, debera ser preferible para el programa de backup el no necesitar los privilegios de root. Desafortunadamente, esto es imposible a

Propietarios y Backups
El sistema de backups de nuestro ejemplo crea una imagen completa del directorio de la copia de seguridad en la mquina destino. Se puede restaurar estos directorios al vuelo, sin tener que cambiar cintas o esperar pacientemente a que se complete el trabajo. Por razones de seguridad, el sistema almacenar los datos con los privilegios equivalente a nobody en los dispositivos destino. Esto se hace imposible para ficheros de backup propietarios y con permisos de grupo. Si se est haciendo backup de directorios home, hay una forma de hacer esto, como el nombre de usuario y grupo de los ficheros en un directorio es normalmente parte del nombre de directorio: chown -R mas:users mas restaura el propietario para que el directorio home pertenezca a mas. Pero solo funcionar en equipos con cuentas idnticas. El siguiente script restaura los permisos para todos los directorios home en la carpeta de backup de referencia a los nombres de los directorios: #!/bin/sh cd /backup for i in *; do chown -R $i:users $i done<C> Como alternativa, se podra permitir a la cuenta de root ejecutar las copias de seguridad con todas las estrategias de seguridad que implica.

menos que simplemente se quiera hacer una copia de seguridad de un slo directorio home, en tal caso el programa puede ejecutarse con los privilegios propietarios. Los clientes no son los nicos ordenadores con una posible vulnerabilidad. El equipo que contiene la copia de seguridad tambin necesita proteccin. El script del Listado 1 y 2 evitan el uso de la cuenta de root en la mquina remota y se registran como usuarios sin privilegios. Lo nico que esta cuenta necesita hacer es almacenar los backups. Aunque la clave SSH est protegida adecuadamente por una frase de paso y el agente

SSH, an es un punto dbil que un atacante podra explotar para comprometer el servidor de backup. Y si el programa de backup se conectara como root, el atacante podra tener control completo sobre el servidor.

Una Sola Cuenta de Backup Protege los Datos


Sera interesante proporcionarle tan slo los permisos mnimos a la cuenta de backup, justo los necesarios para poder realizar el trabajo. La cuenta necesita permisos de escritura en todos los directorios donde tenga que almacenar las copias. Como se suele decir, la cuenta debe tener los permisos necesarios para almacenar las copias. En el ejemplo, se le permite copiar el conjunto completo de directorios home. Dependiendo de quien sean los datos almacenados en estos directorios, podra ser lo nico que un atacante necesitara para irrumpir en algunas de las mquinas de backup. Dicho de otro modo, la cuenta y la mquina remota pueden quedar comprometidas por los datos almacenados en ellos, y al mismo tiempo, la mquina puede facilitar un ataque a ellas. Tiene que haber una relacin especial de confianza entre las mquinas desde las que se hacen las copias de seguridad con la mquina donde se albergan dichas copias y los administradores no deben subestimar el significado de esta confianza. SSH permite restringir que programas pueden ejecutar los usuarios especficos. Y esta clase de autorizacin ayudar a mitigar el dao que un atacan te pueda ocasionar en las mquinas. I

Listado 2: El mejor Backup


01 #!/bin/sh 02 03 AGENT=/root/agent.sh 04 05 # $AGENT debe pertenecer a root y no debe tener permiso de escritura. 06 # En otro caso: cancele ! 07 [ -O $AGENT -a ! -w $AGENT ] || exit 255 08 09 # Si todo est correcto, accede y permite conexiones 10 # al agente SSH 11 12 . $AGENT 13 14 /usr/bin/rsync -rlHpt --delete 15 /Users/ backupuser@backuphost: 16 /export/backup

78

Nmero 08

WWW.LINUX-MAGAZINE.ES

Ejercicios SSH - Curso de adminsitracin de sis temas UNIX.


1.- Cree un nuevo usuario en el sistema con el nombre "prueba", cambie a ese usuario y genere un par de llave RSA de 2048bytes. Averigue que ficheros se han creado y donde y antelos aqu indicando tamaos y permisos.

2.- Instale en Windows el programa Putty (cliente ssh) y genere de nuevo un par de llaves. Intente acceder desde este programa a su sistema servidor y observe que aparece en el log de dicho servidor. Anote aqu una de las lneas de log.

4.- Averigue como se llama el fichero de llaves autorizadas de un usuario y anote aqu donde debera ir y con qu permis os.

3.- Cree el fichero de llaves autorizadas para el usuario root e introduzca en l la llave p blica del usuario "pruebas", despus intente hacer SSH desde el usuario pruebas al localhost y anote el resultado.

4.- Introduzca la llave de "put ty" en el fichero de llaves autoriz adas del us uario "pruebas", acceda desde putty al servidor con dicho usuario. Anote "OK" aqu si lo consigue.

5.- Recolecte todas las llaves pblicas de s us compaeros de clas e, cree un usuario para cada uno de ellos y cree los ficheros neces arios para que puedan acceder mediante ss h utilizando su llave RSA. Sus compaeros debern probar el acceso y escribir en su " home" el fichero "acceso_comprobado.txt" conteniendo la palabra "O K". A note aqu el nombre de usuario de cada uno de ellos y un "OK" junto a l si ha comprobado que se ha creado dicho fichero.

Vous aimerez peut-être aussi