// la madriola de los related post
  • No related posts
  • Archive for the ‘seguridad’ Category

    Autentificacion SSH mediante llaves asimetricas RSA

    Seguramente yo como muchos de ustedes usamos como sistema operativo Linux en cualquiera de sus sabres distros, en mi caso tengo una gran familia =D, en mi hogar a la que estan invitados, tengo un servidor mulero con ubuntu, en mi laptop manejo gentoo y debian, en la computadora de la escuela tengo gentoo, y administro 2 servidores uno centOS y otro ubuntu server, se imaginaran que es dificil loguearse en todos los servidores y conocer de memoria siempre todos los passwords que como buen linuxero paranoico siempre son bastante dificiles tanto de escribir como de memorizar procurando que igualmente sean dificiles de predecir, asi que tanto por seguridad como por comodidad las cuentas como ROOT de todos los clientes y servidores solo pueden ser accedidas mediante autentificacion por llaves RSA, y registrandolas como autorizadas de esta forma unicamente se puede acceder teniendo la llave privada. no pienso entrar mucho en detalles de como funciona el manejo de llaves asimetrico, ni en los algoritmos, simplemente les platicare a grandes rasgos como lo manejo yo, y como les puede funcionar a ustedes.

    Como pre-requisitos hay que tener en cuenta que para que todo funcione adecuadamente hay que tener openssh-server que generalmente ya viene en la mayoria de los distros, y si no es asi pueden buscar el rpm, y en ubuntu/debian basta con hacer un

    sudo apt-get install openssh-server

    Ya esto adaptenlo segun su distro, en gentoo seria con un

    emerge openssh-server

    Ya teniendo el servidor SSH solo quedaria hacer un par de llaves, yo recomiendo hacer las llaves desde un usuario root yo asi lo prefiero, da una capa mas de seguridad, de esta forma solo root@cliente puede acceder a root@server, por lo que como root hacemos uso de SSH-keygen -t rsa -b 2048, nos daria un resultado similar a este:

    root@hax0rina:~# SSH-keygen -t rsa -b 2048
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):
    Created directory '/root/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX root@hax0rina
    root@hax0rina:~#

    Ya con esto tendremos un par de llaves, una publica y una privada, en terminos generales lo que hicimos fue usando SSH-keygen hicimos las llaves, con -t rsa especificamos que las llaves queremos que sean de tipo RSA (por costumbre siempre uso estas) y con -b 2048 especificamos que queremos que sea una llave de 2048 bits (solo por si las moscas).

    Teniendo las llaves procedemos a copiar la respectiva llave al server destino, para hacer esto hay dos formas, hacerlo manualmente (que lo veremos proximamente cuando explique como hacer este mismo procedimiento, pero desde windows usanto PuTTY) y la que mencionaremos en este post, que consiste en usar las herramientas de linux, en este caso SSH-copy-id, lo que nos daria una salida similar a esta:
    root@hax0rina:~# SSH-copy-id -i ~/.ssh/id_rsa.pub root@server.com
    The authenticity of host 'server.com (xx.xx.xx.xx)' can't be established.
    RSA key fingerprint is 31:8d:1d:d5:86:89:4e:aa:02:0d:67:a1:0f:33:36:11.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'server.com,xx.xx.xx.xx' (RSA) to the list of known hosts.
    Now try logging into the machine, with "ssh 'root@server.com'", and check in:

    .ssh/authorized_keys

    to make sure we haven’t added extra keys that you weren’t expecting.

    root@hax0rina:~#

    A grandes razgos lo que hace este comando es con la flag -i ~/.ssh/id_rsa.pub especificamos la ruta de nuestra llave privada (recordemos que " ~ " es una wilcard para especificar el home del usuario logueado), root@server.com indica en donde se intentara copiar la llave, basicamente lo que hace es hacer un SCP (secure copy) de la llave y concatenarla a un authorized_keys, ya teniendo esto deberiamos ser capaces de autentificarnos en el servidor remoto sin tener que haces uso del password, lo podemos comprobar simplemente con hacer un SSH root@server.com, con lo que obtendriamos un resultado similar a este:

    root@hax0rina:~# SSH root@server.com
    Last login: Wed Sep 17 03:14:46 2008 from evdomip-211-238.iusacell.net
    Linux xxxx.xxxxx.com 2.6.18-028stab057.4 #1 SMP Fri Aug 1 10:47:59 MSD 2008 x86_64

    root@pluton:~#

    Espero la guia les sea de utilidad, podemos usar las mismas llaves para cuantos servidores queramos administrar, y lo hacemos con el mismo proceso, ya si queremos implementar un poco mas de seguridad podemos editar el archivo /etc/ssh/sshd_config y editamos las siguientes lineas:
    PermitRootLogin yes
    para que quede asi:

    PermitRootLogin without-password

    De esta forma ya no sera posible loguearse mediante SSH usando password unicamente llaves, pero siempre tengan la precaucion de tener un usuario que pueda ingresar por SSH, y pueda hacer sudo, en caso de que perdamos o formatiemos la maquina y perdamos las llaves, por mi parte seria todo, espero les sea util esta mini guia, en proximas fechas explicare como hacer esto, pero desde windows haciendo uso del ya mencionado puTTY

    Popularity: 18% [?]



    Wikipedia:  SSH  

    Miércoles, septiembre 17th, 2008