Seguridad en OpenSSH: adiós a las contraseñas
Adiós... o al menos parcialmente, para aquellas personas que accedemos diariamente por SSH a una o varias máquinas en las que tenemos que introducir gigantes contraseñas para identificarnos, o para los que busquen un poco más de seguridad en sus servidores a la vez que comodidad.
Hablo de las claves RSA pública/privada, que pueden ser generadas con ssh-keygen sin mayor problema y que nos serán muy útiles. Voy a explicar qué hacer por parte de servidor y por parte de cliente de la forma más sencilla posible, por lo que alguna explicación sonará un poco errónea, pero su única meta es llegar a ser entendible por el mayor número de personas posible.
Primer paso: generación del par de claves RSA
Lógicamente, sin claves, mal empezamos. Suponiendo que no hayamos hecho esto antes, deberemos proceder de la siguiente manera en consola:
ssh-keygen -t rsa
Lo que nos devolverá lo siguiente:
Generating public/private rsa key pair.
Enter file in which to save the key (/dir/por/defecto): <-- No lo tocamos
Enter passphrase (empty for no passphrase): <-- Una contraseña para la clave (opcional pero recomendado)
Enter same passphrase again: <-- Repetimos como consumidores de natillas
Your identification has been saved in /bla/bla
Your public key has been saved in /bla/bla
The key fingerprint is: xx:xx:xx:...
Además, necesitamos copiar el contenido de la clave pública a otro:
cat ~/.ssh/id.pub >> authorized_keys
chmod 600 authorized_keys
Y hacemos (ésto nos servirá más adelante en el segundo paso):
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@host (Gracias a Sergio González)
Pero entonces, ¿para qué poner contraseña a la RSA? ¿Pero no se supone que me iba a ahorrar introducir contraseñas? Lo primero de todo, ganamos en seguridad. Si tú quieres acceder por SSH a un servidor normal sin necesidad de clave RSA, necesitarás:
- Usuario
- Contraseña
Si el segundo falla, hay maneras de obtenerlo, ya sea por brute force, crackeando con diccionarios, etc. Pero, ¿qué necesitamos si lo configuramos de ésta otra manera?
- Usuario
- Fichero de la clave RSA
- Contraseña de la clave RSA
Si cualquiera de los campos fallan, será imposible el acceso. Tendrían que obtener el fichero correspondiente con tu clave privada RSA y a su vez su clave para utilizarla. Más complicado, ¿no?
Segundo paso: configurando servidor
Por mucho que tengamos esas claves, si el servidor no está configurado para recibirlas, nos las podemos confitar. Vamos a editar el archivo de configuración del servidor SSH (/etc/ssh/sshd_config), y tendremos que buscar varios valores, no necesariamente en este orden, pero asegurarse de que tienen los valores que aquí aparecen:
PermitRootLogin no <-- Simple seguridad
PasswordAuthentication no <-- A partir de ahora, sólo por claves RSA
RSAAuthentication yes
PubkeyAuthentication yes
Ahora, utilizaremos el archivo que colocamos anteriormente en el servidor, para introducirlo en las claves autorizadas:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys <-- Suponiendo que estemos logueados con el usuario con el que queremos utilizar la clave
Y, por supuesto, reiniciamos el servicio (como root, lógicamente) para que vuelva a leer la configuración:
/etc/init.d/ssh restart
Tercer paso: estrenar
Comprobemos que todo ha ido bien. Desde la máquina donde tenemos ambas claves, nos conectamos al servidor en cuestión:
ssh -v usuario@servidor <-- El parámetro -v nos facilitará información valiosa, por si falla algo
Si pusimos contraseña en la clave RSA, nos la pedirá. Si todo fue bien... ¡Estaremos dentro!
Cuarto paso: consejos
En todas las máquinas de HispaLinux utilizamos este método de identificación, y de momento todo ha ido muy bien y no es complicado, más bien cómodo.
Deberemos guardar nuestra clave RSA en un lugar seguro, como por ejemplo, los típicos pendrives, encriptado con nuestra clave GPG, puede ser una combinación más que segura.
Espero que haya servido de ayuda, hacía tiempo que no me dedicaba a hacer manuales tan extensos, aunque parece ser que algunas personas se quejan de que es antiguo; en ningún momento he dicho que sea un descubrimiento, hace tiempo que existe, sólo que he querido hacer un manual sencillo para que lo entienda la mayoría de las personas :)
2213 suscriptores. ¡
8 Ago 2007 a las 3:04
Bueno, soy yo aqui (Si, el latoso de antes :D) Esta muy bien, bien redactado, sencillo y con explicaciones bastante buenas, para la hora que es no esta mal ¡Eh! Buen consejo lo de cifrar con gpg la clave de ssh, y gracias por las aclaraciones sobre claves que me diste antes, juraria que habia hecho esto antes, pero no me acordaba ya, (seria de mi epoca paranoica, en la que hice mis pinitos con port-knocking, puse mi servidor ssh en un puerto extraño, y al usuario que le permití acceso lo saque de sudoerc (era en ubuntu…))
8 Ago 2007 a las 3:48
Acceso a servidores SSH sin contraseñas y con clave RSA…
No hace mucho estuve peleándome con un servidor SSH para quitar el sistema clásico de contraseñas y sustituirlo por claves RSA.
El acceso vía ssh al sistema clásico requiere de un usuario y una contraseña. El crackeo de la contraseña aunque dif…
8 Ago 2007 a las 6:31
[...] Administración de OpenSSH sin contraseña (Español) [...]
8 Ago 2007 a las 10:11
Una forma de aumentar la seguridad es usar diferentes claves rsa para los distintos servidores. A la hora de generar las claves tenemos que indicar con el parámetro -f el nombre del fichero de la clave publica y privada (ssh-keygen -t rsa -f servidor1) y después en tenemos que copiar el fichero .pub al authorized_keys de la máquina que queramos acceder.
Por último para acceder por ssh tenemos que indicar con el parámetro -i la clave de identidad que vamos a emplear (ssh -i servidor1 usuario@host)
Así si perdemos una clave el número de máquinas comprometidas se reduce.
8 Ago 2007 a las 11:17
Manual muy interesante, gracias. Echo en falta la opción de imprimirlo. ¿Sería posible?.
Saludos.
8 Ago 2007 a las 12:11
Sólo un apunte, en el paso 1 indicas que para copiar la clave pública a los distintos equipos hagas uso de la orden:
scp ~/.ssh/id_rsa.pub user@server:~/.ssh/
En lugar de hacer esto, se puede emplear la orden ssh-copy-id:
ssh-copy-id ~/.ssh/id_rsa.pub usuario@host
8 Ago 2007 a las 12:16
Disculpa, se me olvidó incorporar la opción -i a la orden anterior. La forma correcta sería:
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@host
8 Ago 2007 a las 12:18
@Sergio: Muchas gracias por el detalle, me parece más correcto, ya que es una herramienta específica para eso. Ahora lo modifico.
¡Un saludo!
8 Ago 2007 a las 12:32
@Ventura: Perdona, se me pasó responderte. Actualmente no tengo nada para imprimir, he estado buscando algún plugin pero el único que encontré era bastante complicado de instalar y a mí no me funcionaba.
Un saludo!
8 Ago 2007 a las 12:40
Seguridad en OpenSSH: adiós a las contraseñas…
C&P: Adiós… o al menos parcialmente, para aquellas personas que accedemos diariamente por SSH a una o varias máquinas en las que tenemos que introducir gigantes contraseñas para identificarnos, o para los que busquen un poco más de seguridad …
8 Ago 2007 a las 13:13
encriptar es meter en una cripta.
8 Ago 2007 a las 16:16
Esta muy bien explicar todo el proceso, aunque no me gustan los comentarios tipo “esto es muy viejo” aquí lo tengo que decir, llevo más de 4 años utilizando este método pero con DSA, de hecho es uno de los primeros posts que escribí.
Saludos.
8 Ago 2007 a las 21:13
anda, dejate de tonterias y ponte a estudiar, que no tienes ni la eso no?¿
pd.: Si, es duro, pero esloquehay
8 Ago 2007 a las 21:41
@davi: Sé original, que ya huele lo de siempre…
8 Ago 2007 a las 22:28
Una forma más rebuscada de seguridad sería guardar la clave en una tarjeta inteligente, como las de banco, y la clave encriptarla con la huella dactilar, utilizando unos de estos lectores de huellas que traen algunos portátiles…
Aunque esto sería más para servidores super seguros, como el de hacienda o el ordenador de desarrollo de windows ;-)
y davi… no chulees por tener el titulo de ESO (si suponemos que lo tienes, claro), porque la verdad en si no es mucho (un cuadernillo donde aparecen mis notas desde 1º de primaria hasta 4º de ESO, con mis fotos de cada curso. Es útil para ver como vas perdiendo la cara de inocencia y los dientes xD)
8 Ago 2007 a las 22:30
@davi: si quieres un pin basta con pedirlo, chavalote ;-)
por cierto, @outime, muy chulo. me lo voy a aplicar a todas las maquinas, aunque al tenerlo filtrado por ip’s y tal… yo lo tengo todo sin contraseña (hablo de las claves rsa).
de todas formas, asias… tiene pinta de seguro x’D.
8 Ago 2007 a las 23:22
@iacaca: No me voy a poner a hablar de criptografía, pero usando contraseña en la propia clave RSA y encima encriptándola la clave en sí con GPG con un cifrado de 1024 o 2048 bytes… ¡Sería imbatible! Y si ya lo filtras por IP como dice xeon, mejor aún. Y si lo bloqueas directamente por firewall el puerto para que sólo pueda localhost, más seguro todavía. Y así podríamos tirarnos un buen rato :-P
En cuanto a davi, ni caso, ya había otro comentario en el anterior blog y creo que es la misma persona. Un poco cansina, la verdad, pero suelo dejar esos comentarios para la posteridad y reírme un rato :-)
Un saludo!
9 Ago 2007 a las 8:18
buenas,
si os pasa como a mi y teneis más de 50 servidores que gestionar, podeis publicar vuestra clave publica en ellos, la privada en vuestra estación de trabajo y:
$ ssh-add
Enter passphrase for /home//.ssh/id_rsa:
es la forma de que vuestra clave privada tenga pass y tengais que repetirla mil veces cada día….
un saludo
9 Ago 2007 a las 13:22
Este tutorial ha triunfado en barrapunto :P
Y gracias a ello te pregunto: ¿qué supone ser “socio de Hispalinux”? ¿Ser un admin?
9 Ago 2007 a las 13:53
@gelek: Gracias :-)
@Bagusajalf: Bueno, triunfar triunfar… Ya andan diciendo que el invento es “viejo”, pero bueno, el caso es que ha salido.
En cuanto a lo de ser socio, para nada significa ser admin, si no, el formulario para alta de socio no se llamaría así. Yo administro alguna máquina por tener los conocimientos necesarios y haberme ganado la confianza (que cuesta).
Como socio tienes derecho a asistir a las asambleas, tener voz y voto, participar en eventos, entre otras cosas. Es mejor que te leas información en la web oficial, te vendrán todas las “ventajas” (no tiene ningún coste).
¡Un saludo!
9 Ago 2007 a las 14:07
OK.
Sobre lo que dije de “triunfar”, nótese el emoticono del final de esa frase. ;)
9 Ago 2007 a las 20:22
Gracias por exlicar el tema de las claves.
11 Ago 2007 a las 0:52
Una cosa, supongamos que después de hacer todo ésto quieres quitar sólo tu clave RSA del server y dejarlo como estaba antes o quieres cambiar el passphrase que has puesto, ¿cómo lo harías? ¿podrías añadirlo al tuto?
Gracias.
11 Ago 2007 a las 0:55
@luiX_: No lo agregué porque no lo ví necesario, es hacer los pasos a la inversa.
Por ejemplo, los parámetros, en vez los del manual, serían:
PermitRootLogin yes
PasswordAuthentication yes
RSAAuthentication no
PubkeyAuthentication no
Un saludo ;-)
12 Ago 2007 a las 15:30
No me refería exactamente a eso, me refería a si quieres cambiar la passphrase que le has puesto a la firma rsa ¿como lo haces? ¿y como quitas la vieja del sistema?
Gracias.
12 Ago 2007 a las 15:35
@luiX_: Una vez que la clave está seteada, no puede ser cambiada (eso también se aplica a las GPG); si no, cambiaría la clave por completo.
Lo mejor es generar una nueva, y reemplazar la antigua (la borras y pones la nueva).
Un saludo
12 Ago 2007 a las 20:05
[...] que voy a explicar de manera breve es algo que vi en 120%Linux, concretamente en éste post, y que me pareció bastante interesante, en gran parte porque me ahorra meter una contraseña [...]
19 Sep 2007 a las 18:20
hey buen maual, yo he trabajado un poco co esto y me parece muy util, ojala sigan sacado de otros temas
26 Oct 2008 a las 9:26
I read some of the posts and I think it is a great blog. I want to improve my cuddly sword I have a fresh joke for you) What did one cloned sheep say to the other? I am ewe.
27 Feb 2009 a las 19:59
Lo descargo, de acuerdo… pero que hago despues? ¿como se configura? ¿donde se configura?
gracias.