SSH (OpenSSH)

Fernando Reyero Noya

Universidad de León, España

camarlengo@yahoo.es

Sinopsis

OpenSSH es un sustituto del conjunto de protocolos SSH libre (en el sentido de libertad. Ver Proyecto GNU (http://www.gnu.org/philosophy/free-sw.es.html)), que permite la comunicación segura o la sustitución de servicios como telnet, rlogin o ftp. OpenSSH encripta todo el tráfico (incluyendo contraseñas) para evitar distintos tipos de ataques de red. Además, proporciona múltiples capacidades de tunneling y métodos de autentificación.

OpenSSH es desarrollado de forma primordial por el Proyecto OpenBSD

(http://www.openbsd.org).

Página oficial de OpenSSH (http://www.openssh.com)

Introducción

El paquete ssh que incluye Debian recoge OpenSSH, la implementación libre de SSH (versiones 1 y 2) que lleva a cabo principalmente OpenBSD. Dentro del paquete, se encuentra un conjunto de herramientas seguras como:

• ssh : el sustituto de rloginy telnet

• scp : que sustituye a rcp

• sftp : el reemplazo de ftp

• ssh-agent , ssh-keygeno sftp-server

El uso de SSH es fundamental en las comunicaciones actuales, ya que la mayoría de servicios de red se llevan a cabo sin cifrar. Como consecuencia, cualquiera puede "escuchar" los datos que transferimos o recibimos.

La versión que usa Debian, al igual que el resto de sistemas que no son OpenBSD, es la basada en las "versiones p". El desarrollo de OpenSSH se centra en dos equipos: el primero realiza el código más limpio y sencillo posible, teniendo en mente OpenBSD; el segundo toma esta versión y la porta a otro sistemas.

El paquete usado se basaba en la vesión 3.0.2p1

Instalación

La instalación de ssh es realmente sencilla. El paquete Debian no sólo contiene el servidor SSH (sshd), sino también los clientes y un conjunto amplio de aplicaciones. En capítulos posteriores, nos centraremos prioritariamente en la configuración del servidor SSH, que es lo que más concierne a este proyecto.

En la sección de ports (http://www.openssh.com/es/portable.html) de la página oficial de OpenSSH podrás encontrar enlaces a los paquetes correspondientes a cada sistema.

La instalación se reducirá al paquete ssh. El resto de paquetes necesarios son gestionados como dependencias de este. Para realizar la instalación, siendo superusuario, escribe en la consola:

potasio:/~# apt-get install ssh

Debian se encargará de instalar la aplicación, realizar una configuración básica y situar los cada fichero en el lugar adecuado. Visita /usr/share/doc/ssh/ para obtener más detalles sobre SSH: su changelog, los comentarios del mantenedor,...

Configuración

Generalmente, por no decir casi siempre, la configuración por defecto de un paquete Debian permite al usuario comenzar a trabajar al instante. En la mayoría de los casos, esta es la situación del paquete ssh. Así todo, es muy conveniente repasar alguna de sus posibilidades, con el fin de adecuar el daemon a nuestras necesidades.

Pasar una opción a sshd se puede realizar de dos maneras: mediante una opción en la línea de comandos o el fichero de configuración situado en /etc/ssh/sshd_config.

Se debe tener en cuenta que las opciones de la línea de comandos se imponen sobre los valores contenidos en el fichero de configuración y que el envío de una señal SIGHUPfuerza al daemon a releer

sshd_config.

A continuación repasaremos alguna de las opciones más interesantes que aporta sshd_config

Opciones de configuración

AllowGroups

Esta opción puede ir seguida de una lista de grupos de nombres, separados por espacios. Si se especifica, sólo se permite realizar un login a los usuarios cuyo grupo principal o suplementarios coincida con uno de los patrones establecidos. Se puede usar ’*’ y ’?’ como comodines en los patrones. Sólo se aceptan nombres de grupo; identificadores numéricos de grupo no están reconocidos. Por defecto, se acepta el login independientemente del grupo de pertenencia.

AllowUsers

Esta opción puede ir seguida de una lista de usuarios, separados por espacios. Si se especifica, sólo se permite realizar login a los usuarios cuyo nombre concuerde con el patrón. Se pueden usar ’*’ y ’?’ para la construcción de patrones. Sólo se admiten nombres de usuario; nada de identificadores numéricos. Por defecto, se permite realizar login independientemente del nombre de usuario. Si los patrones siguen la foma USUARIO@HOST, entonces USUARIO y HOST se comprueban por separado, restringiéndose el acceso a determinados usuarios de ciertos equipos.

Ciphers

Especifica que cifrados son admitidos para la versión 2. Si especificas múltiples cifrados, sepáralos con comas. El valor por defecto es "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour".

ClientAliveInterval

Establece el tiempo (en segundos) después del cual, si no se ha recibido datos del cliente, sshd enviará un mensaje a través de un canal encriptado solicitando respuesta al cliente. El valor por defecto es 0, indicando que no se envía mensaje alguno. Esta opción sólo concierne a SSH2.

ClientAliveCountMax

Establece el número de mensajes solicitando una respuesta (ver la opción anterior) que se enviarán sin ninguna contestación por parte del cliente. Si se alcanza este límite, sshd desconectará al cliente, terminando la sesión. Es importante hacer constar la diferencia entre los mensajes de comprobación de la existencia del cliente (client alive) y los mensajes KeepAlive (más abajo). Los primeros, se envían a través de un canal encriptado y no pueden ser interceptados. Los últimos, TCP KeepAlive, sí son interceptables y posibilitan que un cliente o servidor tengan conocimiento de cuándo una conexión se ha vuelto inactiva.

El valor por defecto es 3. Si la opción ClientAliveInterval (anterior) es 15 y ClientAliveCountMax se deja con su valor por defecto, los clientes que no respondan serán desconectados después de 45 segundos aproximadamente.

DenyGroups

Similar a la opción AllowGroups pero con un enfoque de denegación.

DenyUsers

Similar a la opción AllowUsers pero con un enfoque de denegación.

KeepAlive

Especifica si el sistema debe enviar mensajes keepalive al otro extremo. Si se envían, la muerte de la conexión o la interrupción en el funcionamiento en una de las máquinas serán notificadas pertinentemente. Sin embargo, esto significa que las conexiones morirán si la ruta cae temporalmente. Por otro lado, si no se envían mensajes keepalive, las sesiones pueden colgarse indefinidamente en el servidor, dejando usuarios fantasma y consumiendo recursos del sistema.

El valor por predeterminado es "yes" (sí envía mensajes keepalive) y el servidor tendrá conocimiento de si la red cae o el host reinicia. Esto evita sesiones fantasma.

Para deshabilitar keepalives, el valor debe ser "no", tanto en el servidor como en el cliente.

KerberosAuthentication

Especifica si el método de autentificación Kerberos está permitido. Esto puede llevarse a cabo mediante un ticket Kerberos o si la opción PasswordAuthentication está habilitada. En ese caso, la contraseña suministrada por el usuario puede ser validada contra un KDC Kerberos. Para usar esta opción, el servidor necesita un servtab Kerberos que permita la verificación de la identidad del KDC. Por defecto, el valor es "yes".

ListenAddress

Especifica las direcciones locales a las cuales escucha sshd. Se pueden usar las siguientes sintaxis:

• L

istenAddress host|IPv4_addr|IPv6_addr

• L

istenAddress host|IPv4_addr:port

• L

istenAddress [host|IPv6_addr]:port

Si no se especifica el puerto, sshd escuchará en la dirección y todos los puertos que se hayan especificado anteriormente. Por defecto, se escucha en todas las direcciones locales. Se pueden enunciar múltiples opciones ListenAddress.

LoginGraceTime

El servidor desconecta después de este tiempo a los usuarios que no se hayan validado correctamente. Si el valor es 0, no hay límite de tiempo.

Por defecto, 600 (segundos).

LogLevel

Nivel de verbosidad de sshd que se usa en los mensajes del log. Los valores posibles son: QUIET, FATAL, ERROR, INFO, VERBOSE and DEBUG. El predeterminado, INFO. DEBUG viola la privacidad de los usuarios y no se recomienda.

MaxStartups

Especifica el número máximo de conexiones concurrentes sin autentificar que se efectúan contra el servidor sshd. Las conexiones adicionales serán denegadas hasta que la autentificación se tenga lugar o LoginGraceTime expire para una conexión determinada. El valor predeterminado es 10.

PasswordAuthentication

Especifica si la autentificación por password está admitida. Por defecto, "yes".

PermitRootLogin

Especifica si el superusuario puede validar usando ssh. Los argumentos posibles son: "yes", "without-password", "forced-commands-only" o "no". El valor por defecto es "yes".

Si a esta opción se le asigna "without-password", la autentificación por password se deshabilita para el usuario root.

Si a esta opción se le asigna "forced-commands-only", el login del superusuario con autentificación de clave pública será admitido, pero sólo si la opción del comando se ha especificado (lo que puede ser útil para realizar backups remotos incluso si el login de superusuario no está admitido normalmente). El resto de métodos de autentificación están vetados para el root.

Si a la opción se le asigna "no", el root no puede hacer login.

Port

Especifica el número de puerto al que escucha sshd. El puerto predeterminado es el 22. Se admiten opciones múltiples.

Protocol

Especifica las versiones del protocolo que soporta sshd. Las posibilidades son "1" y "2". Las opciones múltiples se separan por comas. El valor por defecto es "2,1".

PubkeyAuthentication

Especifica si se admite la autentificación mediante clave pública. Por defecto, "yes". Esta opción sólo se aplica a la versión 2 del protocolo.

StrictModes

Especifica si sshd debe comprobar los permisos y propietarios de los ficheros del usuario y el directorio home antes de aceptar el login. Es recomendable habilitar esta opción pues los usuarios noveles a veces dejan accidentalmente su directorio o sus ficheros con permisos de escritura universales. El valor por defecto, "yes".

Para obtener la información completa sobre las opciones que admite sshd, lee la página del manual que incluye el paquete.

Fichero de configuración

Ejemplo de /etc/ssh/sshd_config.

# Package generated configuration file
# See the sshd(8) manpage for defails
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
# Lifetime and size of ephemeral version 1 server key

KeyRegenerationInterval 3600
ServerKeyBits 768
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 600
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile      %h/.ssh/authorized_keys
# rhosts authentication should not be used
RhostsAuthentication no
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Uncomment to disable s/key passwords
#ChallengeResponseAuthentication no
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
# Use PAM authentication via keyboard-interactive so PAM modules can
# properly interface with the user
PAMAuthenticationViaKbdInt yes
 To change Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#AFSTokenPassing no
#KerberosTicketCleanup no
# Kerberos TGT Passing does only work with the AFS kaserver
#KerberosTgtPassing yes
X11Forwarding no
X11DisplayOffset 10
PrintMotd no
#PrintLastLog no

KeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
#ReverseMappingCheck yes
Subsystem        sftp     /usr/lib/sftp-server

Generación del artículo

Este artículo ha sido producido usando DocBook XML 4.1.2

DocBook es una aplicación XML (también hay una versión SGML) que facilita los sistemas de documentación, al dotar de semática a los textos desde el punto de vista de los sistemas informáticos. Además permite la versatilidad de dar como salida casi cualquier formato documental: LaTeX, TeX, TeXinfo, PDF, RTF, xhtml,...

La edición del texto ha sido realizada con Emacs 21, en el major mode xml-mode. Los paquetes Debian usados han sido psgml (http://packages.debian.org/testing/text/psgml.html) y xae (http://packages.debian.org/testing/text/xae.html). Las transfomaciones de prueba han sido realizadas con las hojas de estilo XSL mantenidas por Normal Walsh (http://sourceforge.net/projects/docbook), recogidas en el paquete docbook-xsl (http://packages.debian.org/testing/text/docbook-xsl.html) y con el procesador xsltproc (http://packages.debian.org/testing/text/xsltproc.html), recogido en el paquete con el mismo nombre.

Sobre este documento

Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, versión 1.1 o cualquier versión posterior publicada por la Free Software Foundation. Puedes consultar una copia de la licencia en http://www.gnu.org/copyleft/fdl.html (http://www.gnu.org/copyleft/fdl.html)

Este documento ha sido escrito en formato XML utilizando la DTD de DocBook (http://www.docbook.org). Mediante este sistema, puede ser fácilmente transformado a múltiples formatos (HTML, TXT, PDF, PostScript, LaTeX, DVI, ...). Se recomienda su utilización como herramienta de documentación potente y libre.

Bibliografía

Página del manual de sshd (http://www.openbsd.org/cgi-bin/man.cgi?query=sshd). 25 de Septiembre de 1999.

Lista de correo de SSH: secureshell-subscribe@securityfocus.com

Patrick Hearon y Algis Rudys Getting started with SSH (http://linux.rice.edu/help/tips-ssh.html). 23 de Septiembre de 2000

SSH (OpenSSH)

The Secure Shell (SSH) Frequently Asked Questions (http://www.ldeo.columbia.edu/NETWORK/ssh/ssh-faq.html)