martes, 19 de enero de 2016

Autenticacion de usuarios mediante llaves públicas y privadas.


SSH y autentificación mediante clave pública/privada
Para dar un poco más de seguridad y comodidad al acceso por SSH a nuestros servidores, hemos decidido utilizar autentificación mediante clave pública/privada junto a SSH.
El esquema es el siguiente: un servidor SSH posee una lista de claves públicas cada una asociada a un usuario. Cuando uno de dichos usuarios trata de conectarse al servidor SSH, el servidor comprueba que efectivamente el cliente es quién dice ser mediante un algoritmo de clave privada/pública, de manera que solo el cliente legítimo que posea la correspondiente clave privada podrá autentificarse.
Así, para ponerlo en marcha es necesario generar un par de claves (privada y pública) en el cliente, y enviar la clave pública al servidor.
Por otro lado el cliente almacena la clave pública del servidor, de manera que cuando el cliente se conecta al servidor puede comprobar que el servidor es efectivamente quién dice ser.
A ello:
La generación de la pareja de claves en el cliente se realiza mediante el comando ssh-keygen:
$ ssh-keygen  -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/NaSz/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/NaSz/.ssh/id_rsa.
Your public key has been saved in /home/NaSz/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx jcarlos@c-one
Es posible proteger el uso de las llaves mediante una clave, de manera
que cuando se vayan a usar ésta sea solicitada. Si se deja en blanco no
se pide contraseña.

Las claves se almacenan por defecto en ~/.ssh/, quedando el directorio así:

$ ls -l
total 12
-rw-------  1 jcarlos jcarlos  883 2005-08-13 14:16 id_rsa
-rw-r--r--  1 jcarlos jcarlos  223 2005-08-13 14:16 id_rsa.pub
-rw-r--r--  1 jcarlos jcarlos 1344 2005-08-04 02:14 known_hosts

id_rsa es la clave privada,  
id_rsa.pub es la clave pública, y 
known_hosts son las claves públicas de los servidores conocidos.

Ahora se debe copiar la clave pública al servidor, al fichero ~/.ssh/authorized_keys.
Para ello se utiliza el comando ssh-copy-id

$ssh-copy-id -i ~/.ssh/id_rsa.pub jcarlos@c-one
$ssh-copy-id -i ~/.ssh/id_rsa.pub jcarlos@c-one

ssh-copy-id es un script que se conecta al servidor ssh indicado mediante ssh,
hace login y copia el archivo indicado por la opción -i en el fichero ~/.ssh/authorized_keys,
además de tocar los permisos para dar seguridad (como impedir el acceso a miembros del grupo).

La primera vez que tratemos de conectar al servidor mediante ssh se nos
pedira que confirmemos la clave pública del mismo (como hemos dicho, el
cliente guarda también una copia de la clave pública del servidor para
comprobar que efectivamente es el servidor que el cliente busca),
de manera que ésta queda guardada, normalmente, en ~/.ssh/known_hosts

No hay comentarios:

Publicar un comentario