La gran mayoría de las personas que hayan usado Linux alguna vez en su vida, han conocido las virtudes que ofrece el poseer acceso por ssh a su máquina. Desgraciadamente la configuración por defecto, aunque es bastante segura, no es del todo deseable, por dos motivos:
- Permite que root pueda acceder mediante dicho acceso, algo completamente contraproducente.
- La seguridad que te ofrece, depende por completo de la contraseña; Una contraseña que puede ser robada o que puede intentar adivinarse mediante los famosos ataques de fuerza bruta.
Por ello vamos a intentar crear un acceso abierto (es decir, que no sea restrictivo y engorroso, y que le permita a uno acceder desde donde quiera) y seguro, eliminando esos dos problemas potenciales que acabo de describir.
Imposibilitar el acceso por ssh a root
En las últimas versiones están empezando a imposibilitar el acceso, pero es algo que han empezado a hacer desde hace relativamente poco. He de suponer que el motivo por el que hasta ahora lo dejaban abierto era que deseaban dar al usuario la mayor libertad posible para hacer lo que deseen, y si hablamos de un equipo de pruebas o que no va a estar las 24 horas encendido (cosa que ocurre con los servidores) podría estar justificado, aunque no del todo.
Afortunadamente, el impedir que root sea capaz de acceder por ssh es muy sencillo: Solamente hay que acceder con un usuario con permisos de administrador a la carpeta /etc/ssh y entrar el fichero sshd_config. Este fichero almacena las reglas generales del servicio ssh, incluyendo la dirección de escucha, puerto (por defecto el 22), etc... Entre estas reglas hay una que nos interesa especialmente que es: PermitRootLogin. Puede mostrarse de dos formas:
El segundo caso es el que se está usando en las versiones más recientes, tales cómo Debian 8 o versiones posteriores a Ubuntu 14.04 (ésta inclusive). La opción without-password significa que permite la autenticación de root, pero que éste no puede autenticarse mediante una contraseña. Esto para la mayoría de los casos estaría bien, pero yo soy partidario de no permitir que root acceda bajo ningún concepto desde fuera, con lo que lo más recomendable sería modificar esa línea, ya esté escrita de una manera u otra, para dejarla así:
Ahora sólo quedaría reiniciar el servicio ssh mediante el comando /etc/init.d/ssh restart, aplicando así los cambios realizados. Ahora desde cualquier herramienta de acceso por ssh, ya sea una terminal de Linux o la herramienta putty, probaríamos a acceder remotamente con el usuario root. El mensaje de respuesta debería ser el siguiente:
Preparar el servidor para poder autenticarse únicamente por RSA
Ahora sería el turno de preparar una autenticación que no sea sea la contraseña plana. Existen varios métodos, pero el preferido por muchos es mediante una clave pre-compartida RSA, compuesta por una clave pública y una privada. La pública será aquella que se almacenará en una carpeta especifica dentro del directorio personal de un usuario (/home/usuario) o dentro del directorio root, mientas que la privada será la "llave" de acceso que sólo la podrán tener aquellos que deseemos que puedan tener acceso al servidor. Dicha llave solo podrá usarse para acceder con usuarios que posean la clave pública almacenada. Cómo esto puede sonar un poco complicado, vayamos paso a paso:
Este proceso se puede hacer con la herramienta de terceros putty, o desde una consola, y aunque el proceso en putty es mucho más gráfico, voy a explicar el proceso para hacerlo desde consola, ya que el concepto es el mismo y puede resultar un poco menos intuitivo en ésta; eso sí, la clave privada generada en Linux no puede usarse en putty ni viceversa, con lo que tenedlo en cuenta a la hora de generar la clave. Es recomendable hacer todo el proceso con un usuario que posea permisos de administrador para evitar complicaciones, aunque se podría hacer también con un usuario normal.
El comando que vamos a usar para crear ambas claves es el ssh-keygen. El comando es tan sencillo que no requiere parámetro alguno para funcionar es decir que con escribir el comando a secas funcionaría, pero cómo deseamos que la clave sea específicamente rsa y queremos que sea lo más robusta posible, escribiremos:
ssh-keygen -t rsa -b 4096
Este comando en concreto os generará una clave RSA de 4096 bytes (la más segura de todas) y os preguntará el directorio en el que deseáis alojar las claves; por defecto carpeta_usuario/.ssh/; y una contraseña que proteja la clave privada (opcional, pero recomendable). al desplazarnos al directorio en cuestión deberíamos ver los siguientes archivos:
La primera sería la clave privada, mientras la otra sería la pública que iría al servidor ssh. Con desplazar la clave pública al servidor no basta sino que también habría que modificar (o crear en caso de no existir) el fichero authorized_keys, alojado en /carpeta_usuario/.ssh/ mediante el siguiente proceso:
- mdkir /home/ivan/.ssh #nos aseguramos que la carpeta .shh existe
- touch authorized_keys #creamos el fichero authorized_keys en caso de que no exista
- cat id_rsa.pub > /home/ivan/.ssh/authorized_keys #copiamos el contenido de id_rsa.pub a authorized keys
Con esto ya estaría el servidor en cuestión preparado para recibir una conexión con autenticación RSA, si bien actualmente están activos ambos métodos de acceso, el de contraseña y éste. Esto ya es completamente opcional, pero en caso de querer que sólo se pueda acceder mediante la clave RSA habría que dirigirse al fichero /etc/ssh/sshd_config y modificar el parámetro PasswordAuthentication. Por defecto dicho parámetro debería aparecer así:
Solamente con quitar el carácter #, modificar el valor a no y reiniciar el servicio ssh, se eliminaría la posibilidad de introducir la contraseña, dejando cómo única posibilidad el uso de la clave RSA.
Probando el acceso mediante clave RSA
Para acceder por consola es necesario almacenar en la carpeta /home/usuario/.ssh o /root/.ssh (dependiendo del usuario con el que se esté logueado) y copiar el fichero id_rsa a dicha carpeta. En caso de no encontrarse dicho fichero, y tener deshabilitado el acceso con contraseña, debería mostraros el siguiente mensaje:
En cambio, si se posee la clave correctamente almacenada y conocemos la password (en caso de haberle puesto) de la clave privada, obtendremos la siguiente pantalla:
Saludos.
No hay comentarios :
Publicar un comentario