Un problema habitual cuando manejamos muchos servidores es como ingresar de forma fácil, sencilla y sobre todo segura, una de las primeras mediadas de seguridad es deshabilitar el usuario  login del usuario root, medida mas que acertada aunque como consecuencia tiene necesitamos entonces otro usuario, es ahí donde se nos duplican las contraseñas.

Una de las formas mas sencillas de solucionar esto es habilitar el login por Private Key en lugar de contraseña, ahí nos ahorramos tipear o copiar y pegar la contraseña del root, luego si asignamos el usuario al sudoers y configuramos que no nos pida contraseña logramos una sencillez en el proceso de autentificacion sin resignar la seguridad.

Si bien es cierto que hay algunas operaciones en el sistema que sudo no puede realizar estas realmente son pocas y no tan habituales de necesitar ejecutar, lo que nos dejaría en contadas ocasiones la necesidad de saltar como root en lugar de usar sudo

Por eso en este post veremos como habilitar todo para facilitarnos la vida sin resignar ningún aspecto en seguridad.

Crear usuario y habilitar private key

Ingresamos a nuestro server, para el ejemplo lo llamaremos example.com

ssh root@example.com

Allí crearemos el usuario

#O como ustedes quieran llamarlo, para el ejempo
#lo llamare "administrador"
useradd administrador

Primero editamos el archivo /etc/sudoers

nano /etc/sudoers

Luego modificamos nuestro usuario en el archivo para que nos quede así:

administrador  ALL=(ALL)	NOPASSWD:ALL

Guardamos y salimos de nano, para probar si funciono hacemos

#Pasamos como el usuario administrador
su administrador

#Intentamos hacer alguna tarea restringida
tail /var/log/messages
tail: cannot open '/var/log/messages' for reading: Permission denied

#El mensaje anterior esta bien debido a 
#que tenernos privilegios sudo

#Ahora probamos lo mismo usando sudo
sudo tail /var/log/messages

#Si nos muestra el contenido es porque esta todo bien

El siguiente paso es en nuestra pc, vamos a generar el juego de claves y subir la publica al servidor


#Locamente, es decir en nuestro pc, en consola hacemos
ssh-keygen -b 4096

Seguimos los pasos, NO asignaremos contraseña cuando pregunte y nos generar los archivos

/home/alvaro/.ssh/id_rsa
/home/alvaro/.ssh/id_rsa.pub

Luego subimos la clave a nuestro servidor

#Estando en nuestra pc local que es donde generamos la clave
scp /home/alvaro/.ssh/id_rsa.pub administrador@example.com:/administrador/id_rsa.pub

#Nos logeamos como usuario
ssh administrador@example.com

#En /home/administrador hacemos
mkdir .ssh

#Como fue en /home/administrador donde subimos la clave
cat .ssh/id_rsa.pub .ssh/authorized_keys

Ahora nos desconectamos del servidor y vamos a probar que el login con id_rsa funcione, este paso es importante que quede bien porque no podremos seguir configurando en adelante si esto no esta bien.

ssh -i /home/alvaro/.ssh/id_rsa administrador@example.com

Si lo anterior no funciona, no continúen de aquí para adelante, revisen y repasen todos los pasos hasta que funcione, sino funciona y siguen se quedaran sin accesos al servidor.

Configurar en el Firewall el nuevo puerto

Debemos escoger un nuevo puerto para SSH, obviamente uno que no este siendo usado y que sea diferente al puerto 22 por defecto, para este ejemplo elegí el 3980 aunque pueden escoger el que deseen

IMPORTANTE deben habilitar este puerto en el firewall antes de continuar, como lo hagan depende del firewall que utilicen

Una vez que ya tengamos habilitado el nuevo puerto, editamos la configuración de ssh:

nano /etc/ssh/sshd_config
#En puerto colocamos cualquier menos el 22 
# y menos cualquiera que ya este en uso obviamente
Port 3980

#Este parametro lo colocamos dejamos como "no"
PermitRootLogin no

#Deshabilitamos el uso de contraseñas
PasswordAuthentication no
# ssh o sshd segun el sistema
service ssh restart

Por las dudas no cerremos esta consola anterior de ssh por las dudas hasta confirmar que el login funciona.

En otra ventana de consola local hacemos

ssh -p 3980 -i /home/alvaro/.ssh/id_rsa administrador@example.com 

Si no logea es porque hicimos todo bien ya podremos conectarnos como root sin serlo en realidad, usando sudo, sin necesitar una contraseña en ningún momento y lo haremos en un puerto diferente.

El comando anterior podemos guardarlo en un fichero con el nombre de del host, darle permisos de ejecución y transformarlo en un comando asi no tendremos que estar buscando la linea anterior tal como si lo hiciéramos con una contraseña.

Si queremos añadir un grado mas de seguridad podes implementar golpeo de puertos, si usan CSF como firewall puede seguir esta guía Knock/Knocking o Golpeo de Puertos con CSF

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *