LPIC-1 Tema 110.3: seguridad de datos con cifrado

Última entrega sobre las certificaciones LPIC-1. Con el tema 110.3, sobre seguridad de datos, se termina lo referente a estos exámenes. Así que en futuras entradas daremos paso a LPIC-2. Pero antes, deberías conocer lo necesario para ser capaz de asegurar los datos y las comunicaciones.

Es decir, deberías conocer lo básico sobre OpenSSH, tanto uso como configuración, entender el rol de las claves, usar GnuPG (GPG) para cifrar, descifrar, firmar y verificar ficheros, e incluso comprender acerca del tunelado SSH…

Llegados a este punto, se ha visto todo lo que deberías conocer para aprobar los exámenes. He intentado que estén lo más actualizados posibles, aunque ya sabes que de vez en cuando LPI revisa el contenido y quita o agrega cosas en función de cómo han avanzado estos sistemas. Por ejemplo, posiblemente los próximos cambios para futuras revisiones sean acerca de las herramientas ifup/ifdown y las net-tools (legacy), que terminarán desapareciendo de estas certificaciones, al igual que TCP wrappers…

Además, ya sabrás que hubo cambios importantes para las LPI Essential y LPIC-1 v5.0, que ahora son bastante más fáciles que antes. No obstante, como empezó con la versión anterior de LPIC-1, no he modificado el contenido de los artículos para bajar su nivel.

Sobre SSH

Es importante que sepas manejar SSH, además de configurar la configuración relacionada con él. Ya sabes que Secure Shell es un protocolo y un programa que lo implementa. La función es proveer a un usuario de acceso remoto a un sistema mediante un canal seguro con información cifrada. Es muy útil para la administración remota de servidores.

Es complicado no alargar demasiado el artículo y explicar este tema tan complejo, pero intentaré condensarlo lo máximo posible, dando por hecho algunas cosas…

Introducción

El objetivo de SSH es establecer una conexión segura para que:

  • Nadie pueda hacerse pasar por el servidor previsto. Se puede comprobar que te has conectado al mismo servidor al que te habías conectado anteriormente.
  • Que nadie pueda interceptar o capturar la información. El tráfico tiene un cifrado fuerte.
  • Y proporcionar túneles seguros para otros protocolos no seguros como X11.

Existe el paquete OpenSSH en varias versiones (v1 y v2), y existen paquetes para implementar el cliente SSH y el servidor SSH. Una vez se tiene todo instalado y configurado, la secuencia de eventos para la conexión es:

  1. Se realiza el enlace de cifrado para que el cliente pueda verificar que está conectando al servidor correcto. Si la clave del host al que se intenta acceder ha cambiado, entonces SSH lanzará una advertencia y termina la conexión de forma inmediata para evitar spoofing y ataques MiM. Si coincide, prosigue el proceso…
  2. Una capa de transporte entre el cliente y el servidor remoto se cifra mediante cifrado asimétrico.
  3. Se produce la autenticación del cliente en el servidor, para que lo acepte.
  4. El cliente ya está listo para interactuar con el servidor remoto a través de la conexión cifrada. Podrá ejecutar todos los comandos que necesite para la administración remota…

Comandos básicos

En cuanto a los comandos que se pueden usar, básicamente son:

  • ssh: usar SSH para una conexión remota es bastante sencillo. Puedes establecer una conexión de esta forma:
#Ejemplo de conexión a un servidor registrándose con el usuario prueba
ssh prueba@servidor.dominio.es

#También se puede usar la IP
ssh root@192.168.7.4

#Más información 
man ssh

#Tunel seguro para el protocolo X11
ssh -X usuario@nombrehost

#Trusted X11 forwarding (acelerar la velocidad)
ssh -Y usuario@nombrehost

#Comprimir datos 
ssh -X -C usuario@nombrehost
  • ssh-keygen: es el comando que sirve para generar el par de claves necesarias para la autentificación, cuando no se quiere introducir la contraseña de usuario. SSH acepta ambas formas, pero con el par de llaves, quien posea las clave podrá acceder de forma más cómoda y segura.
#Ejemplo para generar un par de claves (privada-publica) usando RSA
ssh-keygen  -t rsa

#También puedes usar simplemente (y seleccionar los parámetros en el prompt interactivo)
ssh-keygen
  • ssh-agent: gestiona las claves privadas cuando se usa autenticación de clave pública. Es útil para establecer ciertas variables de entorno en el shell para trabajar con este protocolo. Por ejemplo:
#Ejemplo de uso 
ssh-agent

#Puedes usar estas variables sin necesidad de establecerlas manualmente con
eval `ssh-agent`
  • ssh-add: incorpora entidades al agente SSH. Por ejemplo:
#Si lo ejecutas por primera vez no tendrá ninguna llave
ssh-add

#Puedes listar las claves privadas actuales a las que puede acceder el agente con
ssh-add -l

#Para mostrar las llaves públicas
ssh-add -L

#Para eliminar todas las claves usadas por el agente
ssh-add -D

Ficheros importantes

Por un lado tienes algunos ficheros interesantes como:

  • /etc/ssh/moduli: grupos Diffie-Hellman para intercambios de claves al comienzo del proceso.
  • /etc/ssh/sshd_config: fichero de configuración para el demonio.
  • /etc/pam.d/sshd: fichero de configuración PAM (lo explicaré más adelante) para el demonio.
  • /etc/sysconfig/sshd: fichero de configuración del servicio correspondiente a SSH.

Cuando se usan el par de claves para la autenticación en SSH, los ficheros con las claves se almacenarán en unos ficheros que también debes conocer. Y es que, al usar ssh-keygen se van a generar una serie de ficheros, que luego serán comprobados para verificar la conexión.

Por ejemplo, las claves privadas (sin extensión) y públicas (.pub) que usará el demonio SSH estarán en (para los diferentes tipos de algoritmos de cifrado):

  • /etc/ssh/ssh_host_rsa_key y ssh_host_rsa_key.pub
  • /etc/ssh/ssh_host_dsa_key y ssh_host_dsa_key.pub
  • /etc/ssh/ssh_host_ecdsa_key y ssh_host_ecdsa_key.pub
  • /etc/ssh/ssh_host_ed25519_key y ssh_host_ed25519_key.pub

Puedes usar ssh-copy-id para copiar las claves.

Para poder acceder al servidor sin contraseña deberemos añadir la clave pública al fichero ~/.ssh/authorized_keys del usuario remoto. Es un fichero específico para cada usuario, con una lista de claves públicas autorizadas para servidores. Así, cuando el cliente se conecta al servidor, el servidor autentica al cliente comprobando su clave pública firmada almacenada en este fichero.

Otros ficheros específicos para cada usuario son los de claves privadas y públicas del usuario. Son los ficheros generados cuando se crean el par de claves, y tienen nombres como id_tipo-algoritmo para la clave privada para el cliente, y otro id_tipo-algoritmo.pub para la pública:

  • ~/.ssh/id_rsa y id_rsa.pub
  • ~/.ssh/id_dsa y id_dsa.pub
  • ~/.ssh/id_ecdsa y id_ecdsa.pub
  • ~/.ssh/id_ed25519 y id_ed25519.pub

Para ciertas configuraciones de seguridad de hosts remotos, es importante el fichero /etc/ssh_known_hosts y ~/.ssh/known_hosts. Contendrá la lista de claves de host conocidas en el sistema o cuenta de los servidores aceptados por el usuario. Si no hubiera claves almacenadas en estos ficheros cuando SSH lo comprueba para un servidor remoto, se le pregunta al usuario si confía en la nueva clave de host remoto. Si el usuario confirma la clave, la clave del host remoto se agrega al fichero ~/.ssh/known_hosts del usuario antes de que solicite la contraseña. Esto es importante para prevenir conexiones a servidores incorrectos.

Sobre GPG

Con GPG podrás cifrar y descifrar datos, además de poder firmar y verificar ficheros. Por eso, puede ser una herramienta interesante de cara a la seguridad:

Uso de GPG

Aquí tienes algunos ejemplos habituales de uso de las herramientas:

  • gpg: GNU Private Guard es una implementación libre de PGP, un programa para cifrar y firmar digitalmente. Se puede usar tanto cifrado simétrico como asimétrico. Aquí tienes algunos ejemplos:
#Cifrar de forma simétrica un fichero
gpg --symetric /home/privado/info.txt

#Descifrar el fichero
gpg --decrypt -o /home/privado/info.txt /home/privado/info.gpg

#Proceso de cifrado asimétrico (generación del par de claves, etc.)
gpg --gen-key
gpg --encrypt -r isaac@correo.es /home/privado/info.txt

#Para descifrar un fichero cifrado asimétricamente
gpg --decryt -o /home/privado/info.txt /home/privado/info.gpg

#Para que otrosp uedan firmar o descifrar, puedes exportar las claves públicas o importar claves públicas
gpg --export nombre_usuario

#Si no especificas usuario se exportan todas
gpg --export

#Para importar claves usando un fichero de clave pública que nos hayan pasado
gpg --import fichero_clave

#Firmar un documento
gpg –-sign nat.pdf

#Verificar un documento firmado para comprobar que no ha sido manipulado
gpg --verify nat.pdf.gpg

#Más información
man gpg
  • gpg-agent: se usa como demonio para solicitar y almacenar en caché la contraseña de la llave. Es útil cuando se usa GPG desde un programa externo como un cliente de correo.

Configuración

En cuanto a la configuración de GPG, la puedes encontrar en el directorio ~/.gnupg/. Dentro encontrarás ficheros de configuración para el entorno GPG… Cuando se ejecuta GPG para crear el par de claves se generará éste directorio y su contenido.

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar