Última actualització: 22/08/2004; 21:05:08
Weblog d'en Xavi Caballé
Pàgina personal de Xavier Caballé.
"All my struggling in the world and so many dreams that don't come true"
        

OpenSSH

Guia per a la instal·lació de l'OpenSSH

Aprofitant la recent publicació de la versió 3.8.1 de l'OpenSSH, la versió lliure de la família de protocols SSH, oferim una breu guia sobre com baixar-lo, verificar la seva integritat, compilar-lo, instal·lar-lo, així com unes nocions bàsiques sobre la seva configuració.

OpenSSH és una implementació lliure (es distribueix sota una llicència BSD) de la família de protocols SSH, que ofereixen una alternativa segura als serveis telnet, rlogin, rsh, rcp, ftp i similars. Tot el tràfic entre un servidor SSH i un client SSH es realitza de forma xifrada i s'apliquen forts mecanismes per a garantir-ne l'autenticació.

Telnet i FTP van ser, a l'origen, uns protocols bàsics per a l'administració de sistemes. Avui, no obstant, es consideren totalment obsolets i molts sistemes ja no els inclouen en la seva configuració per defecte. El motiu és que tota la informació (incloent-hi les credencials de l'usuari) es transmet en clar per la xarxa, de forma que poden ser fàcilment interceptades. SSH soluciona això xifrant tot el tràfic.

En aquest butlletí, expliquem els passos necessaris per a obtenir, compilar i instal·lar l'OpenSSH en un sistema Linux.

Obtenció i verificació de l'OpenSSH

Com hem indicat, l'OpenSSH es distribueix sota llicència BSD el que permet baixar-lo de la xarxa amb el seu codi font complet. Actualment, la majoria de distribucions de Linux (i d'altres sistemes operatius) ofereixen paquets que permeten la seva ràpida instal·lació. No obstant això, aquests paquets generalment no estan optimitzats per a cada plataforma i inclouen diverses opcions que no sempre són interessants des del punt de vista de la seguretat.

Com veurem, amb molt poc esforç podem realitzar tot el procés d'instal·lació d'una forma ràpida. D'aquesta forma, l'administrador d'una màquina sabrà exactament les opcions del programa.

Per a baixar l'OpenSSH hem d'accedir a la pàgina web del producte, http://www.openssh.org. L'OpenSSH disposa de dues línies de desenvolupament: la nativa, per al sistema operatiu OpenBSD i la portable que funciona en virtualment qualsevol sistema operatiu derivat d'Unix. A nivell funcional, ambdues versions són idèntiques.

En el cas de Linux, necessitem la versió portable. Per a obtenir-la, cal anar a http://www.openssh.org/portable.html i, en la llista de servidors, seleccionar un que sigui proper a la nostra ubicació geogràfica.

En el cas de l'estat espanyol, per a baixar l'última versió utilitzem el servidor de RedIRIS. Una forma ràpida de baixar-lo és utilitzant la utilitat WGET:

$ wget ftp://ftp.rediris.es/mirror/OpenBSD/...
   ... OpenSSH/portable/openssh-3.8p1.tar.gz
 

Una vegada baixat i abans de realitzar qualsevol operació cal verificar-ne la seva integritat per a tenir la certesa que el fitxer no ha estat modificat de cap manera.

Hi ha dos mètodes per a verificar la integritat:

  • Verificació de la suma de comprovació MD5. No és el millor mètode de garantir la integritat del fitxer, però és fàcil de realitzar:
    $ md5sum openssh-3.8.1p1.tar.gz
    1dbfd40ae683f822ae917eebf171ca42  openssh-3.8.1p1.tar.gz
     
    

    El codi que indica la utilitat md5sum és la suma de comprovació. A l'anunci de cada nova versió de l'OpenSSH s'indica aquesta suma, el que ens permet comprovar-ne la integritat.

  • El segon mètode consisteix a verificar la signatura digital del fitxer. A la mateixa ubicació on es troba l'OpenSSH, podem obtenir la signatura digital del fitxer.

    Una pràctica habitual consisteix a baixar la signatura digital d'un servidor diferent. Com en tots els servidors en teoria els fitxers són iguals, és indiferent si verifiquem la signatura baixada d'un servidor amb el fitxer baixat d'un altre. D'aquesta forma, el que aconseguim és reduir la possibilitat –ínfima- que un atacant hagi aconseguit modificar la signatura digital del fitxer.

    Així doncs, baixem la signatura digital del fitxer de l'OpenSSH, per exemple, des d'un servidor a Noruega:

    $ wget ftp://ftp.inet.no/pub/OpenBSD/...
       ... OpenSSH/portable/openssh-3.8.1p1.tar.gz.sig
     
    

    I verificar la integritat del fitxer:

    $ gpg --verify openssh-3.8.1p1.tar.gz.sig
    gpg: Signature made Sun 18 Apr 2004 02:52:21 PM ...
        ... CEST using DSA key ID 86FF9C48
    gpg: Good signature from "Damien Miller (Personal Key)
        ... <djm@mindrot.org>;"
     
    

    Aquesta operació ens garanteix que el fitxer que hem baixat és una còpia literal i no modificada del fitxer original signat (en aquesta cas) per Damien Miller. Una vegada més, caldrà comprovar-ho amb la documentació de l'OpenSSH per tal de verificar que aquesta signatura és la que esperem.

    Pot succeir que el nostre fitxer de signatures no disposi de la clau pública de la persona que ha signat el programa:

    $ gpg --verify openssh-3.8.1p1.tar.gz.sig
    gpg: Signature made Sun 18 Apr 2004 02:52:21 PM ...
       ... CEST using DSA key ID 86FF9C48
    gpg: Can't check signature: public key not found
     
    

    En aquest cas, cal importar la clau púbica dis del nostre anell de signatures, signar-la i repetir l'operació:

    $ wget ftp://ftp.rediris.es/mirror/OpenBSD/OpenSSH/portable/DJM-GPG-KEY.asc
    $  gpg --import DJM-GPG-KEY.asc
    gpg: key 86FF9C48: public key imported
    gpg: Total number processed: 1
    gpg:               imported: 1
    $  gpg --sign-key djm@mindrot.org
    (...)
    $ gpg --verify openssh-3.8.1p1.tar.gz.sig
    gpg: Signature made Sun 18 Apr 2004 02:52:21 PM ...
       ... CEST using DSA key ID 86FF9C48
    gpg: Good signature from "Damien Miller (Personal ...
       ... Key) <djm@mindrot.org>;"
    gpg: checking the trustdb
    gpg: checking at depth 0 signed=4 ot(-/q/n/m/f/u)=0/0/0/0/0/1
    gpg: checking at depth 1 signed=1 ot(-/q/n/m/f/u)=4/0/0/0/0/0
     
    

Compilació de l'OpenSSH

Després de descarregar i verificar la integritat de l'OpenSSH, podem començar. Primer cal descomprimir el fitxer:

$ tar xvfz openssh-3.8.1p1.tar.gz
$ cd openssh-3.8.1p1.
 

Per tal de personalitzar i optimitzar la nostra còpia podem instruir al compilador de C perquè tregui el màxim profit de les característiques de cada processador.

Així, si el nostre ordinador té un processador és un Intel Pentium 4, podem indicar al compilador perquè optimitzi el codi a aquest processador de la següent forma:

$ CFLAGS=”-O2 –march=i686 -funroll-loops”; export CFLAGS
 

En el cas d'un processador AMD K6, els paràmetres serien

$ CFLAGS=”-O2 -march=k6 -funroll-loops”; export CFLAGS
 

Novament, consultant la documentació del compilador de C podem identificar els paràmetres adequats per a la nostra configuració.

A continuació, executem el programa ./configure que té com missió adaptar el procés de compilació a les particularitats del nostre sistema.

Habitualment s'executa ./configure sense cap paràmetre, encara que també hi ha diverses opcions:

$ ./configure --prefix=/usr --sysconfdir=/etc/ssh 
 --libexecdir=/usr/libexec/openssh --mandir=/usr/share/man 
 --with-pam --with-ipaddr-display --with-ipv4-default 
 --with-md5-passwords --with-zlib
 

Algunes d'aquestes opcions són els valors per defecte en la versió actual, però poden variar en properes versions. Indicant-los expressament ens assegurem que es fan servir els valors indicats per nosaltres.

L'explicació d'aquests paràmetres és la següent:

--prefix=/usr
--sysconfdir=/etc/ssh
--libexecdir=/usr/libexec/openssh
--mandir=/usr/share/man
 

Aquestes quatre opcions són utilitzades per a establir les ubicacions per defecte utilitzades per SSH per als fitxers de configuració, les biblioteques de suport i les pàgines man d'ajuda.

--with-pam
 

Habilitem el suport de PAM (Pluggable Authentication Module), el sistema estàndard de Linux i d'altres sistemes operatius que permeten configurar els mecanismes d'autenticació de l'usuari, com la longitud de la contrasenya, el període de validesa de la mateixa, etc…

--with-ipaddr-display
 

Utilitzar l'adreça IP en lloc del nom de màquina.

--with-ipv4-default
 

Utilitzar el protocol IPv4.

--with-md5-passwords
 

Utilització de contrasenyes xifrades amb l'algorisme MD5.

--with-zlib
 

Utilitzar la biblioteca ZLIB per a la compressió de les comunicacions.

./configure realitzarà la verificació que disposem d'un entorn vàlid per a la compilació de l'OpenSSH i ens informarà si falta alguna dependència o biblioteca de suport.

Si el procés finalitza sense cap error, podem començar la compilació del programa:

$ make
 

Aquest procés es prendrà el seu temps, que pot variar depenent de la velocitat de l'ordinador i del disc dur. És un bon moment per a aixecar-se, anar a la nevera i prendre un refresc.

Instal·lació

Finalitzada la compilació sense errors disposem d'una còpia personalitzada de l'OpenSSH preparada per a la seva instal·lació, realitzant els següents passos:

$ su
Password:
 
# find /* > OpenSSH1
# make install
# find /* > OpenSSH2
# diff OpenSSH1 OpenSSH2 > OpenSSH-Installed
 

Els passos que realitzem són els següents

  • En primer lloc, ens fem administrador del sistema, ja que per a la instal·lació de l'OpenSSH cal realitzar-la en determinats directoris sobre els quals únicament l'administrador té privilegis d'escriptura.

  • A continuació obtenim una relació de tots els fitxers existents al sistema i l'enregistrem a un fitxer temporal.

  • El tercer pas consisteix a executar make install per a procedir a la instal·lació de l'OpenSSH.

  • Repetim l'operació d'obtenir un llistat de tots els fitxers existents al sistema. Comparant amb diff les dues llistes, abans i després de la instal·lació, obtindrem la relació de tots els canvis que ha realitzat la instal·lació de l'OpenSSH al nostre sistema.

Verificació

La forma més simple de verificar que la nova versió és totalment operativa consisteix a provar-la. Per a això, és necessari executar el servidor de SSH i realitzar una sèrie de comprovacions bàsiques

# /usr/sbin/sshd
# telnet localhost 22
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_3.8.1p1
 

Fins ara tot sembla correcte. A continuació, podem utilitzar el client ssh per a realitzar una connexió al servidor:

#  ssh usuario@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 05:75:98:18:fd:52:ae:1b:8a:2f:7f:1c:0b:5b:ff:d6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
usario@localhost's password:
$
 

El client SSH ha pogut establir la connexió amb el servidor, ens avisa que no pot verificar l'autenticitat del servidor ja que no identifica la clau pública del mateix dins del fitxer de sistemes de confiança, de forma que ens demana si realment volem connectar amb ell. A continuació demana la contrasenya de l'usuari i, si facilitem la correcta, ens mostra l'indicador del shell.

Si això no funciona… és hora d'utilitzar les funcions de depuració, tant en el servidor (/usr/sbin/sshd –d3) com al client (ssh –v) que són de gran ajuda per a identificar els problemes.

Configuració de SSH

Si el que hem realitzat és una actualització de l'OpenSSH, ja hem acabat.

En canvi, si és una instal·lació nova, hi ha un pas addicional: crear els fitxers de configuració del servidor (sshd) i del client (ssh). Anem a mostrar una configuració simple que pugui servir de base per a personalitzar-la als requeriments especials de cada instal·lació.

Fitxer de configuració del servidor SSH

Editar el fitxer /etc/ssh/sshd_config prenent com exemple el que mostrem a continuació:

--- sshd_config ---
Port                    22
Protocol                2
ListenAddress           x.x.x.x
HostKey                 /etc/ssh/ssh_host_key
HostKey                 /etc/ssh/ssh_host_rsa_key
HostKey                 /etc/ssh/ssh_host_dsa_key
ServerKeyBits           768
LoginGraceTime          60
KeyRegenerationInterval 3600
PermitRootLogin         no
IgnoreRhosts            yes
IgnoreUserKnownHosts    yes
StrictModes             yes
X11Forwarding           no
X11DisplayOffset        10
PrintMotd               yes
KeepAlive               yes
SyslogFacility          AUTHPRIV
LogLevel                INFO
RhostsAuthentication    no
RhostsRSAAuthentication no
RSAAuthentication       no
PasswordAuthentication  yes
PermitEmptyPassowrds    no
AllowUsers              sysadmin
UsePrivilegeSeparation  yes
Subsystem               sftp /usr/libexec/openssh/sftp-server
--- sshd_config ---
 

En aquesta configuració, indiquem que només s'utilitza el protocol SSHv2, la interfície (indicada per l'adreça IP) associada al servidor, la ubicació de les claus del servidor, la mida de la clau i l'auto-regeneració automàtica de la mateixa, ignorar els fitxers rhosts i shosts, els tipus d'autenticació que es permeten (com hem configurat el servidor perquè només utilitzi SSHv2, no permetem la utilització de claus RSA per a l'autenticació) , etc.

Tots els paràmetres que utilitzem en aquesta configuració estan pensats per a un servidor SSH amb autenticació d'usuaris mitjançant contrasenya i utilitzant les diverses opcions de seguretat disponibles.

Fitxer de configuració del client SSH

El fitxer de configuració del client és /etc/ssh/ssh_config. Aconsellem utilitzar les següents opcions:

--- ssh_config ---
Host                    *
ForwardAggent           no
ForwardX11              no
RhostsAuthentication    no
RhostsRSAAuthentication no
RSAAuthentication       no
PasswordAuthentication  yes
FallBackToRsh           no
UseRsh                  no
BatchMode               no
CheckHostIP             yes
StrictHostKeyChecking   yes
IdentityFile            ~/.ssh/identity
IdentityFile            ~/.ssh/id_dsa
IdentityFile            ~/.ssh/id_rsa
Port                    22
Protocol                2
Cipher                  blowfish
EscapeChar              ~
Host                    x.x.x.x
    # Opcions específiques per a un 
    # servidor SSH concret
    
--- ssh_config ---                          
 

En aquest fitxer de configuració s'activen les característiques generals de seguretat del client SSH per a realitzar únicament connexions amb protocol SSHv2, permetent l'autenticació mitjançant contrasenyes.

Igualment es deshabiliten expressament algunes opcions que poden provocar forats en la seguretat, com la possibilitat d'utilitzar rsh si no és possible establir una connexió SSH.

D'altres fitxers de configuració

Addicionalment, en funció de la versió del sistema operatiu que s'utilitzin hi ha d'altres arxius que pot ser necessari configurar, tals com la configuració del suport PAM de l'OpenSSH (habitualment, /etc/pam.d/sshd) i l'script per a executar sshd automàticament cada vegada que arrenca el sistema.

Donat el caracter general d'aquest butlletí, no podem cobrir totes les possibles variants, pel que el lector haurà de consultar la documentació especifiques del seu sistema.

Per a saber més

OpenSSH
http://www.openssh.org

Xavier Caballé
xcaballe@quands.com



© Copyright 2003-2004 Xavier Caballe. Click here to send an email to the editor of this weblog.
Last update: 22/08/2004; 21:05:08.