Tutorial de Ubuntu Server

Esta guía pretende enseñar los principios de la configuración y administración de servidores web linux, los conocidos como VPS, Virtual Private Server. La guía pretende ser sobre todo práctica sin largas teorías. Con ejemplos reales probados en al menos un VPS real. En la actualidad tengo un servidor con Ubuntu Server 18.04 con Webmin/Virtualmin/LAMP y otro con Ubuntu 20.04 sin ningún stack tecnológico ni panel gráfico previamente instalado. Todas los comandos introducidos están probados previamente y pondré capturas de la respuesta del Terminal.

COMO EMPEZAR

Cuando contratas un VPS, el proveedor normalmente te permite elegir el sistema operativo preinstalado y opcionalmente el panel que te ayuda a configurarlo. Lo más normal es que el S.O. sea alguna distro Linux como Ubuntu, CentOs, Fedora,... Al ser software libre y además estar muy bien diseñados para esta función son el S.O. mas usado para servidores web. Sobre el panel de administración podemos elegir alguno de los gratuitos como VestaCP, Webmin,.. y entre los de pago el más utilizado es cPanel.

El panel de administración nos ayuda con una interfaz gráfica (GUI) a configurar y administrar el servidor. Podriamos hacerlo todo desde un terminal de comandos pero con mucho más esfuerzo. Aunque el panel sea de gran ayuda, no evitaremos hacer bastante uso de comandos a través del terminal.

Una vez elegido sistema y configuración inicial desde la web de nuestra empresa de hosting tendremos la IP de nuestro servidor, el usario administrador que suele llamarse root y una contraseña inicial que debemos cambiar por otra más segura. Con estos datos ya podemos empezar a administrar el VPS.

Para conectarnos al VPS si lo hacemos desde un Mac o Linux podemos usar el terminal que ya viene instalado en estos sistemas. Si estamos en Windows, como es mi caso, lo recomendable es usar algún cliente SSH. Personalmente uso PuTTY. Con la consola de Windows CMD podrás hacerlo si está activado OpenSSH.

Vamos a verlo con un ejemplo en un imaginario VPS con IP 11.22.33.44

ssh root@ssh root@11.22.33.44 (cambia esta IP inventada por la de tu VPS). La primera que nos conectamos nos pedirá confirmación. Entramos yes para continuar.

C:\Users\Pedro>ssh root@11.22.33.44
The authenticity of host '11.22.33.44 (11.22.33.44)' can't be established.
RSA key fingerprint is SHA256: e5sDT75IcRmc /Fn9ZTVJX +m4pCJ5vR DdCWYlb4wgZww.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Ahora nos pedirá la clave del usuario root. Los carecteres pulsados no se verán.

Warning: Permanently added '11.22.33.44' (RSA) to the list of known hosts.
root@11.22.33.44's password:

Si todo ha ido bien estaremos conectados con permisos de usuario root.

Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0 x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
No mail.
Last login: Wed Oct 13 08:44:44 2021 from 188.26.212.45

Con un mensaje de bienvenida el servidor nos indica que estamos conectados. A partir de este momento ya podemos administrar el servidor por medio de comandos.

Una práctica habitual por temas de seguridad es crear un nuevo usuario con poderes admistrativos. A este usuario le daremos permisos de superusario con lo que podrá hacer tareas de administrador.

Para crear el usuario usamos adduser nombre_usuario. Nos pedirá crear nueva contraseña para este usuario y unos datos que no son obligatorios rellenar como nombre, teléfono...

root@tallerdeapps:~# adduser pedro
Adding user `pedro' ...
Adding new group `pedro' (1001) ...
Adding new user `pedro' (1001) with group `pedro' ...
Creating home directory `/home/pedro' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for pedro
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y

Para darle permisos de superusario usamos:

usermod -aG sudo pedro

Para cambiar de usuario:

su pedro
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.
pedro@tallerdeapps:/root$

Tras este comando tal como nos indica la consola estamos como usuario "pedro" y para realizar acciones de root tendremos que poner sudo antes del comando.

CONEXION SSH POR PAREJAS DE CLAVES

Si queremos poner un nivel superior de seguridad podemos habilitar la conexión al servidor por el sistema de clave pública. Es una técnica donde se tienen dos archivos con largas contraseñas. Una se guarda en el servidor y otra en tu ordenador desde donde te conectarás al VPS. Para conectar se autentica una clave con la otra. Dicho con una metáfora, una clave es el candado y la otra clave la llave. Como son dos claves emparejadas el nivel de seguridad es mucho mas alto que con una contraseña simple. Este sistema requiere que lleves contigo la clave si quieres conectarte desde otro ordenador. Por supuesto, si pierdes la clave puedes tener un problema para recuperar el control de tu servidor ya que conectar por el método de usuario/contraseña estará desactivado.

Vamos a verlo paso a paso con Windows y el cliente PuTTY. Es un proceso que tiene varios pasos. Comenzamos:

Cuando instalas PuTTY, también se instala la aplicación PuTTYgen que te permitirá generar el par de claves. El ajuste predeterminado ya nos sirve. El protocolo SSH versión 2 y una longitud de 2048 bytes, en principio, dan un nivel muy alto de seguridad.

De manera alternativa, si quieres hacerlo sin PuTTYgen con el comando ssh–keygen –b 2048 crearás el par de claves. No entraré en detalles sobre esto. En Linux todo es posible hacerlo desde consola aunque a veces puede ser un poco engorroso y sea mucho más cómodo usar aplicaciones con GUI para ciertas tareas.

Al pulsar en Generate nos pedirá que movamos el ratón para generar una clave mas aleatoria. En pocos segundos nos mostrará la clave.

Como ves es una contraseña muy compleja. Opcionalmente, podemos poner una contraseña adicional por si nos roban el archivo con la clave privada. Si rellenamos el campo Key Passphrase, además del archivo con la clave tendremos que introducir una contraseña. En este ejemplo omito la Key Passphrase. Lo siguiente que haremos es pulsar en Save private key y guardar en nuestro ordenador a buen recaudo la clave privada que servirá de llave para entrar al servidor.

Para grabar la clave pública en el servidor ejecutaremos unos comandos con un usuario que no sea root. Si has practicado en tu VPS la creación de otro usuario ya puedes conectarte por SSH directamente con ese usuario. Otra opción es entrar como root y cambiar de usuario tal como ya hemos visto anteriormente.

ssh pedro@11.22.33.44

Como ves, el procedimiento es el mismo para conectar cualquier usuario. Ahora que estoy dentro voy a ejecutar unos comandos. El motivo de cambiar a un usuario que no sea root es porque también vamos a desactivar la opción de entrar directamente como root. Son técnicas de seguridad para hacer mas difícil entrar al servidor y que un posible intruso además de la contraseña tenga que saber el nombre del usuario con permisos de abrir sesión.

La clave pública va dentro del archivo /home/nombre_usuario/.ssh/authorized_keys. Si la carpeta .ssh no existe, la crearemos con:

mkdir ~/.ssh

La tilde de la Ñ "~" (alt + 126)requiere una explicación. Equivale a la ruta de inicio del usuario con el que estamos logados. En este caso mkdir ~/.ssh es lo mismo que mkdir home/pedro/.ssh

Con la siguiente instrucción modificamos los permisos de acceso a esa carpeta. Para ello se usa el comando chmod . El parámetro 700 quiere decir que solo el propietario tiene permisos de lectura, escritura y ejecución. En este ejemplo como la carpeta ha sido creada por el usuario "pedro" solamente este usuario tendrá acceso a la carpeta. Más adelante, profundizaré en el tema de los permisos a carpetas o ficheros.

chmod 700 ~/.ssh

A continuación crearemos el archivo "authorized_keys" que contendrá la clave pública con el comando nano

nano ~/.ssh/authorized_keys

nano es un editor de texto linux. Si el archivo no existe lo crea y lo abre para editar. Si por el contrario ya existe solo lo abrirá. Aquí pegaremos la clave pública creada con PuTTYgen.

Para grabar el archivo, al pulsar Ctrl+x nos preguntará si queremos guardar cambios. Respondemos afirmativamente y salimos del editor.

Ahora debemos cambiar los permisos de este archivo para que solo tenga acceso de lectura y escritura el propietario (usuario pedro)

chmod 600 ~/.ssh/authorized_keys
exit

Con exit regresamos al usuario root para hacer nuevos ajustes. Ahora debemos abrir el archivo sshd_config y modificar un dato.

nano /etc/ssh/sshd_config

Buscamos la línea que dice PasswordAuthentication y eliminamos el signo # que se encuentra delante de él. Luego, cambiamos su valor de Yes a No. Debe verse así:

PasswordAuthentication no

Suelen ser frecuentes los ataques de hackers al puerto SSH 22 buscando servidores. Podemos cambiar el puerto a cualquier otro número entre 1024 y 49151

Dentro de /etc/ssh/sshd_config buscaremos donde pone #port 22, quitamos # y ponemos otro puerto. La línea quedará así:

port 2022

Incluso podríamos hacer una lista de usuarios que tengan permitido abrir sesión. Para ello solo hay que añadir en este fichero:

AllowUsers pedro usuario2@84.94.104.124

Con esto solo pedro y usuario2 podrán conectarse. Además usuario2 solo podrá entrar desde un host con una IP concreta. Siguiendo las instrucciones anteriores he creado usuario2 y su par de claves. La IP para controlar la restricción es la pública, no sirve la privada del equipo. En Windows podemos saber la IP pública abriendo la consola CMD con la instrcción:

curl ifconfig.me

Guardamos cambios. Para que los cambios se hagan efectivos hay que reiniciar el servicio ssh con la instrucción:

service ssh restart

Ya solo nos queda ajustar el cliente PuTTY para que apunte a la clave privada grabada previamente en nuestro ordenador. En Host ponemos la IP de nuestro servidor, el puerto 22 por defecto lo actualizamos al que ahora tenemos. Despues en Connection->SSh->Auth le indicamos nuestro archivo privado que tenemos en el ordenador.

Al pulsar en Open conectaremos con el servidor y nos pedirá el usuario para entrar. En este ejemplo podemos entrar como pedro o usuario2 desde una IP concreta, root será rechazado.

login as: pedro
Authenticating with public key "rsa-key-20211027"
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Last login: Fri Oct 29 16:26:14 2021 from 11.22.33.44
pedro@tallerdeapps:~$

Para probar que funciona bien la seguridad por clave SSH voy a intentar conectarme como antes con usuario root desde terminal. Si entro en la terminal:

ssh root@11.22.33.44

El servidor me responde:

root@11.22.33.44: Permission denied (publickey).

Objetivo conseguido. Le hemos dado un nivel mas alto de seguridad al servidor. Pero, ¿qué pasa si pierdo el archivo con la clave? Teóricamente, la única forma de entrar es con la clave privada por lo que si no la disponemos tenemos un problema. Afortunadamente, los proveedores de VPS suelen tener una opción para casos de emergencia para resetear los ajustes SSH o también, si tenemos un instalado un panel de configuración, como Webmin o similares podremos entrar via web a una interfaz gráfica y desactivar la seguridad por clave.

Llegados a este punto, sólo nos faltaría configurar un firewall para mejorar más la seguridad.