¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Endurecer cuentas, SSH y modos de archivo

Después de esta lección: Puedo encontrar cuentas, ajustes de SSH y modos de archivo débiles en un servidor, y corregirlos.

Lección de 55 min10 comandosLaboratorio de administración Linux: usuarios, permisos, cron y systemd en el navegador

La cuenta que nadie recordaba

Endurecer un servidor es quitarle lo que no necesita, para que haya menos que atacar. Se empieza por las cuentas, SSH y los modos de archivo.

Una tienda pequeña guardaba la cuenta de un proveedor que se fue hace un año. No pedía contraseña, y el servidor dejaba entrar a root por la red.

Nadie la atacó. Un escáner la encontró primero. Arreglarlo llevó cinco minutos, pero había que hacerlo el primer día.

Esta lección enseña a hacer ese trabajo antes de que alguien ataque.

Al final de esta lección

Nota

Puedo encontrar cuentas, ajustes de SSH y modos de archivo débiles en un servidor, y corregirlos.

Palabras clave

PalabraQué significaEjemplo
Endurecimientoquitar lo que un servidor no necesita, para que haya menos que atacar
Cuentaun nombre con el que el sistema deja entrar, con sus propios derechos
Modo de archivotres cifras que dicen quién puede leer, escribir y ejecutar un archivo640
Escribible por todosun archivo que cualquier usuario de la máquina puede cambiar
SSHla herramienta que permite entrar a un servidor por la red
Ajusteuna línea de un archivo de configuración: un nombre y un valor

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Lista las cuentas y pregunta quién las usa

No se puede proteger una cuenta que no se conoce. Por eso el endurecimiento empieza con una lista.

Las personas normales tienen un número de cuenta de 1000 o más, el UID. Root tiene el UID 0, y solo él debe tenerlo.

Lista las cuentas normales y su shell

Comando
awk -F: '$3 >= 1000 && $3 < 65534 {print $1, $7}' /etc/passwd

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Qué cuentas tienen el UID 0?

Comando
awk -F: '$3 == 0 {print $1}' /etc/passwd

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cómo leer las dos listas

El primer Run escribe una línea por cuenta normal: su nombre y su shell de entrada, por ejemplo /bin/bash. Pregunta en cada línea: ¿alguien aún la necesita?

El segundo Run escribe una sola palabra, root. Un segundo nombre sería un segundo root, y un motivo para abrir un incidente.

Un modo dice quién puede hacer qué

Cada archivo tiene un modo de tres cifras: el propietario, el grupo y todos los demás. Cada cifra suma 4 para leer, 2 para escribir y 1 para ejecutar.

La lista de cuentas es pública, así que todos pueden leerla. El archivo con los hashes de las contraseñas no debe serlo.

Una cuarta cifra delante, como el 2 de 2770, hace que lo nuevo de una carpeta herede su grupo.

Muestra el modo de dos archivos

Comando
stat -c '%a %U:%G %n' /etc/passwd /etc/shadow

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cuenta las cuentas con contraseña vacía

Comando
sudo awk -F: '$2 == "" {print $1}' /etc/shadow | wc -l

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo: qué significan cuatro modos

ModoPropietarioGrupoTodos los demás
644leer y escribirleerleer
640leer y escribirleernada
2770leer, escribir y entrarleer, escribir y entrarnada
777todotodotodo, así que escribible por todos

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Qué escribió el terminal

El Run de stat escribió dos líneas: 644 root:root /etc/passwd y 640 root:shadow /etc/shadow. Cualquiera puede leer la lista de cuentas. Solo root y el grupo shadow pueden leer los hashes.

El Run de conteo escribió 0. Cualquier otro número serían cuentas en las que se entra sin contraseña.

SSH: la puerta y su cerradura, los ajustes

El servidor SSH lee un archivo de ajustes. Tres de sus líneas deciden casi todo el riesgo: si root puede entrar, si se permite una contraseña, y si se permite una contraseña vacía.

Vas a practicar con una copia en tu carpeta. El archivo real nunca se toca, así que nadie queda fuera.

Escribe un archivo de práctica débil

Comando
printf 'PermitRootLogin yes\nPasswordAuthentication yes\nPermitEmptyPasswords no\n' > sshd-prueba.conf

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Encuentra las dos líneas débiles

Comando
grep -E '^(PermitRootLogin|PasswordAuthentication) yes' sshd-prueba.conf

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Corrige las dos con sed

Comando
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/; s/^PasswordAuthentication yes/PasswordAuthentication no/' sshd-prueba.conf

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Revisa el archivo otra vez

Comando
grep -E '^(PermitRootLogin|PasswordAuthentication)' sshd-prueba.conf

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Por qué importa el primer valor

El primer Run del grupo encontró dos líneas. Tras la corrección, las dos dicen no. Entonces se entra con una clave, no con una contraseña, y nadie entra como root.

Una regla más: el servidor SSH usa el primer valor que encuentra para un ajuste. Una línea débil encima de una segura gana.

Mira qué línea cuenta

Comando
printf 'PermitRootLogin no\nPermitRootLogin yes\n' | grep -m1 '^PermitRootLogin'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que la última línea de un archivo de ajustes gana, y añade la línea segura al final. En el servidor SSH gana la primera, y la línea débil de arriba sigue vigente. Edita la línea que ya está. No añadas una segunda.

Borra el archivo de práctica

Comando
rm sshd-prueba.conf

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para ir más lejos: la carpeta del laboratorio

Cuando termines la tarea 2 del laboratorio, ejecuta ls -ld /srv/projects y stat -c '%a %U:%G %n' /srv/projects. Di en una frase quién puede entrar, y qué cifra deja fuera a todos los demás.

La comprobación del laboratorio califica el usuario, la carpeta, el trabajo de cron y el servicio. No califica esta lección. La tarea de arriba es su tarea comprobada.

Sobre este laboratorio y su código: Laboratorio de administración Linux: usuarios, permisos, cron y systemd en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.