lunes, 26 de enero de 2009

Ejecución remota y transferencia de ficheros (telnet,ftp,ssh,scp)

Permiten acceder a un sistema remoto y transferir ficheros de/hacia este sistema
  • Aplicaciones clásicas
    1. telnet (TELetype NETwork) permite conectarnos a otros ordenadores de la red como terminal remoto
    2. ftp (File Transfer Protocol permite intercambiar ficheros entre distintos ordenadores de la red
  • Problema: la información se transfiere en claro
  • El uso de telnety ftp se desaconseja
  • Reemplazarlos por ssh, scp, sftp
    1. ssh (Secure Shell) permite conectarnos a otro sistema encriptando toda la información
    2. scp, sftp permiten la transferencia de ficheros de forma encriptada
      • scp similar a cp y sftp similar a ftp


Servicio de telnet y ftp

Los servicios TCP (telnet, ftp, talk, finger, etc.) son normalmente lanzados por el superdemonio de red inetd (o xinetd)
  • El fichero de configuración es el /etc/inetd.conf
  • Ejemplo de línea
    telnet stream tcp nowait telnetd /usr/sbin/in.telnetd
    • cuando inetd reciba una petición al puerto telnet abre un socket tipo stream y ejecutar fork() y exec() del programa /usr/sbin/in.telnetd, bajo la identidad del usuario telnetd
    • nowait indica que el servidor puede continuar procesando conexiones en el socket
  • Versión mejorada de inetd: xinetd
  • Para mayor control usar TCP Wrapper (programa tcpd)
    • Permite conceder/denegar acceso a determinados hosts/redes mediante los fichero /etc/hosts.allow y /etc/hosts.deny

Servicio de telnet

Instalación de un servidor telnet
  • Descargar el paquete telnetd
    • El paquete actualiza el /etc/inetd.conf
    • Por defecto usa TCP wrappers
    • El servidor escucha el puerto 23
    Desistalar el servicio telnet
    • Desinstalar el paquete telnetd, o
    • Comentar la línea correspondiente en /etc/inetd.conf

Servicio de FTP

Transfiere ficheros a/desde un host remoto
  • Permite usuarios registrados o anónimos (anonymous)
  • Utiliza dos puertos: 21 (conexión de control) y 20 (conexión de datos)
  • Dos modos de funcionamiento:
    1. Activo (modo por defecto en el comando ftp)
      • El servidor inicia la conexión de datos desde su puerto 20 a un puerto > 1023 del cliente
      • Problema con los firewalls en el cliente
    2. Pasivo (modo recomendable, por defecto en navegadores)
      • El cliente inicia las conexiones de control y datos
      • No se utiliza el puerto 20
      • No tiene problema con los firewall

Instalación de un servidor ftp básico

  1. Instalar el paquete ftpd
    • El paquete actualiza el /etc/inetd.conf
    • Por defecto usa TCP wrappers
    • Podemos denegar el acceso ftp a ciertos usuarios incluyéndolos en el fichero /etc/ftpusers

Servicio de FTP avanzado

Servidores avanzados de FTP
  • Proporcionan numerosas facilidades, tanto para ftp normal cono anónimo
  • Existen numerosos servidores comerciales u open source: Wu-FTPD, Pure-FTPd, ProFTPD, wzdftpd, vsftpd
  • Estos servidores proporcionan normalmente:
    • Operación a través de inetd o standalone
    • Servidores FTP virtuales (varios servidores de FTP anónimos en el mismo host)
    • Usuarios FTP virtuales (cuentas ftp diferentes de las cuentas del sistema)
    • Facilidades para registro y monitorización de accesos
    • Facilidades para controlar y limitar accesos
    • Comunicación encriptada


SSH

SSH: Shell seguro
  • Permite comunicarnos de forma segura con un servidor remoto
    • Permite abrir sesiones o transferir ficheros (scp o sftp)
    • Reemplazo de rlogin, telnet o ftp
    • Todos los datos viajan encriptados
    • Dos versiones SSH-1 y SSH-2:
      • Recomendable SSH-2
      • Versión open-source OpenSSH
  • Paquetes Debian:
    • Ciente: openssh-client
    • Servidor: openssh-server

Modos de autenticación mediante SSH

SSH soporta 4 modos de autenticación:
  1. Si el nombre del host remoto desde el cual un usuario se conecta al servidor esta listado en ~/.rhosts, ~/.shosts, /etc/hosts.equiv o /etc/shosts.equiv el usuario remoto puede entrar sin contraseña
    • Método absolutamente desaconsejado
  2. Igual que el anterior pero la clave pública del host remoto debe aparecer en /etc/ssh_known_hosts o ~/.ssh/known_hosts
    • No demasiado seguro (si el host remoto se ve comprometido, el servidor local queda comprometido)
  3. La clave pública del usuario remoto debe estar en ~/.ssh/authorized_keys
    • El usuario remoto debe tener acceso a su clave privada
    • Método más seguro, pero un poco incomodo
  4. Acceso mediante contraseña (modo por defecto)
    • Menos seguro que el anterior

Opciones para autenticación

Fichero de configuración del servidor ssh: /etc/ssh/sshd_config
Opción M Dfto. Significado
RhostsRSAAuthentication 2 no yes permite autenticación por host (SSH-1)
HostbasedAuthentication 2 no yes permite autenticación por host (SSH-2)
IgnoreRhosts 2 yes No usa los ficheros ~/.rhosts y ~/.shosts
IgnoreUserKnownHosts 2 no Ignora el fichero ~/.ssh/known_hosts
RSAAuthentication 3 yes Autenticación de clave pública de usuario (SSH-1)
PubkeyAuthentication 3 yes Autenticación de clave pública de usuario (SSH-2)
PasswordAuthentication 4 yes Autenticación mediante contraseña
UsePAM 2,3,4 no Usa PAM para autenticación




Otras opciones de configuración del servidor

Otras opciones en /etc/ssh/sshd_config
Opción Dfto. Significado
Port 22 Puerto (puede ser interesante cambiarlo a >1024)
Protocol 2,1 Protocolo aceptado (más seguro sólo 2)
ListenAddress Todas Dirección local por la que escucha
PermitRootLogin yes Permite acceder al root
X11Forwarding no Permite forwarding X11



Para más opciones man sshd_config

Opciones para el cliente

Fichero de configuración del cliente ssh: /etc/ssh/ssh_config o ~/.ssh/config
  • En este fichero se especifican opciones para los comandos ssh, scp o sftp
  • Algunas de estas opciones se pueden especificar en el momento de ejecutar el comando, p.e.
    $ ssh -p port servidor # Indica otro puerto
Algunas opciones:
Opción Dfto. Significado
Hosts
Host para los que se aplican las opciones (* implica todos)
Port 22 Puerto por defecto
Protocol 2,1 Protocolo usado por defecto
Cipher[s]
Mecanismos de cifrado usados
ForwardX11 no Reenvío X11



Para más opciones man ssh_config y man ssh

Otros comandos

  • ssh-keygen generación y gestión de claves públicas/privadas para SSH
    • Permite claves RSA o DSA (DSA sólo SSH-2, por defecto RSA-2)
    • Ficheros (para SSH-2)
      • Clave privada: ~/.ssh/id_rsa o ~/.ssh/id_dsa (~/.ssh/identity para SSH-1)
      • Clave pública: ~/.ssh/id_rsa.pub o ~/.ssh/id_dsa.pub (~/.ssh/identity.pub para SSH-1)
    • La clave privada debe tener una passphrase de longitud arbitraria
      • Puede cambiarse con la opción -p
  • ssh-agent Agente de autenticación
    • Mantiene en memoria la clave privada
    • Evita tener que escribir la passphrase cada vez que usemos ssh
    • Habitualmente, si entramos en X11 se activa automáticamente
      • Opción use-ssh-agent de /etc/X11/Xsession.options (ver man xsession.options)
    • Para activarlo en consola usar (como usuario)
      eval $(ssh-agent)
    • Define las variables SSH_AUTH_SOCK y SSH_AGENT_PID
  • ssh-add Añade las claves privadas al agente
    • Uso:
      ssh-add [opciones] [-t life] [fichero]
    • Por defecto añade los ficheros ~/.ssh/id_rsa, ~/.ssh/id_dsa y ~/.ssh/identity, pidiendo las correspondientes passphrases
    • Pueden añadirse múltiples claves
      • En una conexión se prueban las diferentes claves hasta que coincide
    • Algunas opciones:
      • -l Muestra las identidades añadidas
      • -t life Especifica un tiempo de vida de la identidad