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
Administrador de Sistemas, Programador, Docente y ahora resulta que también Blogger (peor es ser tictoker). Más de 20 años de experiencia en computación atendiendo nabos y resolviendo problemas que sino fuera por estos nabos no habrían ocurrido en primer lugar. Escribo más que nada sobre tecnología y herramientas en general además de algunos artículos con opiniones tan subjetivas como irrelevantes, así que si no te gustan mejor madura.