jgrateron / PKI-SSH

Scalable and secure access with SSH

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Scalable and secure access with SSH

Acceso seguro y escalable con SSH

Un problema con las claves ssh es que no tienen tiempo de vencimiento, millones de claves se generan todos los días y se agregan a los archivos authorized_keys para conceder permisos de acceso a los servidores.

Estás claves no están supervisadas y una clave privada de un computador robado o tomado por alguien puede conceder permiso de accesos a los servidores.

Usando ésta estratégia podemos crear una infraestructura similar a los certificados X509, donde se crea una entidad de autoridad y luego se crea una nueva clave pública para los usuarios que necesiten acceso a un servidor.

En el servidor se configura la clave pública CA y luego los clientes con su nueva clave firmada tendrán acceso, donde se restringe el tiempo de duración y a que usuario se puede loguear.

Pasos

  • Primero creamos el CA usando el script create_ca.sh, colocar siempre una clave para proteger la clave privada, se crean dos archivos: la clave pública y la clave privada
  • La clave pública se puede configurar en los servidores que desean o también se pueden crear múltiples CA para distintos servicios.
  • Se copia la clave pública ca_key.pub en la carpeta /etc/ssh/ del servidor o servidores
  • Configurar sus servidores SSH para confiar en el CA modificando el archivo /etc/ssh/sshd_config
  • TrustedUserCAKeys /etc/ssh/ca_key.pub
  • Para no permitir que los usuarios agreguen sus propias claves al archivo authorized_keys se modifica en el servidor /etc/ssh/sshd_config para que cambie la ruta donde estará ubicado el archivo authorized_keys
  • AuthorizedKeysFile /etc/ssh/authorized_keys/%u/keys /etc/ssh/authorized_keys/%u/keys2**
  • Este nueva ruta no estará disponible para los usuarios y cambiar el archivo HOME/.ssh/authorized_keys no tendrá efecto para iniciar sesión.
  • No permitir login con password
  • PasswordAuthentication no
  • Reiniciar el servicio ssh Screenshot
  • El usuario cuando requiera acceso a un servidor debe proporcionar la clave pública al administrador del CA
  • Copiar el archivo id_rsa.pub al directorio del proyecto
  • Ejecutar sig_pub.sh
  • Lo primero que muestra es la información de la clave pública ssh del usuario para comprobar su identidad.
  • Introducir datos que serviran para firmar la nueva clave y llevar una auditoría.
  • ID: nombre del usuario que solicita el acceso
  • PRINCIPAL: nombre del usuario o usuarios linux que tendrá acceso, por ejemplo, "root,ubuntu,otrousuario", el usuario prodrá iniciar sesión en esas cuentas
  • En éste punto es preferible crear otro usuario ya que el usuario ubuntu puede ejecutar comandos como root.
  • LIVE: Tiempo de duración de vigencia de la clave pública, (+1m,+1h,+1d,+52w), +52w es aprox un año.
  • Luego se crea una nueva clave pública id_rsa-cert.pub en el directorio keys/fecha
  • Ese nuevo archivo se comparte al usuario solicitante.
  • Ahora puede hacer login al servidor previamente configurado con el comando:
  • ssh -i id_rsa-cert.pub nombreusuario@servidor
  • Ya no es necesario copiar la clave pública en el archivo authorized_keys del servidor ya que se comprueba que la nueva clave pública fue firmada por el CA.
  • ** Importante para obtener login es necesario el par de claves del lado del cliente, la privada que originó el clave pública que se va a firmar y la nueva clave firmada por el CA. Screenshot

Notas

  • No hay forma de revocar claves firmadas así que se recomienda crear una nueva CA en caso de que una clave esté comprometida.
  • Es recomendable crear nuevas CA cada cierto tiempo y asignar nuevamente los permisos.
  • Para más información leer https://engineering.fb.com/2016/09/12/security/scalable-and-secure-access-with-ssh/ ya que se pueden crear otras formas para autenticar servidores, creación de grupos de usuarios para acceso ssh.

About

Scalable and secure access with SSH


Languages

Language:Shell 100.0%