Introducción
En este laboratorio, aprenderás técnicas fundamentales para la gestión de cuentas de usuario y privilegios de sudo, orientadas a fortalecer la seguridad de un sistema Linux. Practicarás cómo implementar políticas de contraseñas, bloquear y desbloquear el acceso a cuentas, proteger la cuenta de superusuario (root) y delegar permisos administrativos de forma controlada. Estas habilidades son pilares para cualquier administrador de sistemas responsable de mantener un entorno Linux seguro y bien organizado.
Comenzarás utilizando el comando chage para establecer reglas de expiración de contraseñas y el comando passwd para controlar el acceso a las cuentas. A continuación, reforzarás la seguridad del sistema desactivando el inicio de sesión directo vía SSH para el usuario root. Finalmente, explorarás dos métodos para otorgar privilegios elevados: añadir un usuario al grupo wheel para un acceso general a sudo y crear reglas personalizadas y detalladas mediante el comando visudo para delegar tareas administrativas específicas de manera segura.
Administrar Políticas de Contraseñas de Usuario con chage
En este paso, aprenderás a gestionar las políticas de contraseñas de los usuarios mediante el comando chage. Aplicar políticas de contraseñas, como establecer una fecha de caducidad, es una práctica de seguridad crucial para proteger las cuentas de accesos no autorizados. El comando chage (abreviatura de "change age") permite visualizar y modificar la información sobre la vigencia de las contraseñas.
Primero, vamos a crear un nuevo usuario para practicar de forma segura. Llamaremos a este usuario testuser. Ejecuta el siguiente comando para añadirlo:
sudo useradd -m testuser
A continuación, establece una contraseña para testuser. El sistema te pedirá que introduzcas y confirmes una nueva contraseña. Para facilitar este laboratorio, utiliza password como contraseña.
sudo passwd testuser
Verás un mensaje confirmando que la contraseña se ha actualizado correctamente.
New password:
Retype new password:
passwd: password updated successfully
Ahora que tenemos nuestro testuser, veamos su configuración de vigencia de contraseña por defecto. Utiliza el comando chage con la opción -l (list):
sudo chage -l testuser
El resultado muestra la política actual. Por defecto, la mayoría de los ajustes están inactivos y la contraseña nunca caduca.
Last password change : <date>
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
Vamos a aplicar una política más estricta. Configuraremos la cuenta para que:
-m 7: El usuario deba esperar al menos 7 días antes de poder cambiar su contraseña de nuevo.-M 90: La contraseña caduque después de 90 días.-W 14: El usuario reciba un aviso 14 días antes de que la contraseña expire.
Puedes aplicar todos estos ajustes con un solo comando chage:
sudo chage -m 7 -M 90 -W 14 testuser
Ahora, verifica que los cambios se hayan aplicado listando la configuración de nuevo:
sudo chage -l testuser
La salida debería reflejar ahora la nueva política que acabas de establecer.
Last password change : <date>
Password expires : <date + 90 days>
Password inactive : never
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 90
Number of days of warning before password expires : 14
Otro comando útil para comprobar rápidamente el estado de la contraseña de un usuario es passwd -S. Pruébalo con testuser:
sudo passwd -S testuser
La salida proporciona un resumen compacto del estado de la contraseña, incluyendo la fecha del último cambio, la edad mínima, la edad máxima y el periodo de aviso.
testuser PS <date> 7 90 14 -1
Has configurado y verificado con éxito las políticas de vigencia de contraseñas para una cuenta de usuario.
Bloquear y Desbloquear una Cuenta de Usuario con passwd
En este paso, aprenderás a bloquear y desbloquear temporalmente cuentas de usuario. Esta es una tarea administrativa común, por ejemplo, cuando un empleado se va de vacaciones prolongadas o si se sospecha que una cuenta ha sido comprometida. Bloquear una cuenta impide el inicio de sesión pero preserva los datos y la configuración del usuario. Utilizaremos la cuenta testuser creada anteriormente.
Primero, bloqueemos la cuenta testuser. Para ello se utiliza el comando passwd con la opción -l (lock).
sudo passwd -l testuser
Deberías ver un mensaje de confirmación:
passwd: password expiry information changed.
Para verificar que la cuenta está bloqueada, puedes comprobar su estado con el comando passwd -S nuevamente.
sudo passwd -S testuser
Fíjate en el campo de estado en la salida. Ahora debería comenzar con L (Locked), lo que indica que el inicio de sesión basado en contraseña está desactivado.
testuser L <date> 7 90 14 -1
Intentemos cambiar a la cuenta testuser para confirmar que es inaccesible. Utiliza el comando su (substitute user). Se te pedirá la contraseña de testuser.
su - testuser
Introduce la contraseña password. El intento de inicio de sesión fallará, que es el comportamiento esperado para una cuenta bloqueada.
Password:
su: Authentication failure
Ahora, desbloqueemos la cuenta. Esto se hace con la opción passwd -u (unlock).
sudo passwd -u testuser
Nuevamente, verás un mensaje de confirmación:
passwd: password expiry information changed.
Verifiquemos el estado de desbloqueo con passwd -S:
sudo passwd -S testuser
El estado debería ser ahora PS (Password Set), indicando que la cuenta está activa y tiene una contraseña válida.
testuser PS <date> 7 90 14 -1
Finalmente, intentemos cambiar a la cuenta testuser otra vez.
su - testuser
Introduce la contraseña password cuando se te solicite. Esta vez, el inicio de sesión debería tener éxito y el símbolo del sistema cambiará para mostrar que ahora has accedido como testuser.
Password:
testuser@<hostname>:~$
Para volver a tu sesión original del usuario labex, simplemente escribe exit y pulsa Enter.
exit
Has practicado con éxito el bloqueo y desbloqueo de una cuenta de usuario.
Asegurar la Cuenta Root Desactivando el Inicio de Sesión por SSH
En este paso, mejorarás la seguridad de tu sistema desactivando el inicio de sesión directo por SSH para el usuario root. Permitir el acceso remoto como root supone un riesgo de seguridad significativo, ya que proporciona un objetivo directo y de altos privilegios para los atacantes. La mejor práctica consiste en iniciar sesión como un usuario estándar y luego utilizar sudo para realizar tareas administrativas.
Primero, necesitas editar el archivo de configuración del demonio SSH, ubicado en /etc/ssh/sshd_config. Utilizaremos el editor de texto nano para modificar este archivo. Al ser un archivo protegido del sistema, debes usar sudo.
sudo nano /etc/ssh/sshd_config
Dentro del editor nano, debes buscar la línea que contiene PermitRootLogin. Puedes usar la función de búsqueda pulsando Ctrl+W, escribiendo PermitRootLogin y pulsando Enter.
Nota: En algunos sistemas operativos o entornos de navegador, el atajo
Ctrl+Wpuede entrar en conflicto con los atajos del propio navegador. Si no puedes usarlo, desplázate manualmente por el archivo hasta localizar la líneaPermitRootLogin, que suele encontrarse en la sección de autenticación.
Probablemente encuentres una línea similar a esta:
#PermitRootLogin prohibit-password
O puede que esté configurada como yes. Tu tarea es cambiar esta línea a PermitRootLogin no. Asegúrate de eliminar el símbolo # al principio de la línea si existe, ya que este carácter convierte la línea en un comentario, dejándola inactiva. La línea final debe quedar exactamente así:
PermitRootLogin no
Tras realizar el cambio, guarda el archivo y sal de nano. Pulsa Ctrl+X, luego Y para confirmar que quieres guardar los cambios y, por último, Enter para confirmar el nombre del archivo.
Para que la nueva configuración surta efecto, debes reiniciar el servicio SSH. Utiliza el comando service para ello:
sudo service ssh restart
El comando no producirá ninguna salida si se ejecuta correctamente. Para asegurarte de que el servicio funciona bien, puedes comprobar su estado:
sudo service ssh status
Deberías ver que el servicio está en estado running.
Ahora, probemos si el cambio funciona. Intentaremos acceder por SSH a la máquina como root desde la propia máquina (usando localhost). Primero, necesitas establecer una contraseña para el usuario root para que la prueba sea válida. Usa password como contraseña.
sudo passwd root
New password:
Retype new password:
passwd: password updated successfully
Ahora, intenta conectar por SSH como root:
ssh root@localhost
La conexión debería ser rechazada inmediatamente con un error de "Permission denied". Esto confirma que tu mejora de seguridad está funcionando correctamente.
root@localhost: Permission denied (publickey,password).
Has asegurado con éxito tu sistema desactivando el inicio de sesión directo de root a través de SSH.
Otorgar Acceso Sudo mediante el Grupo wheel
En este paso, aprenderás un método estándar para conceder privilegios administrativos: añadir un usuario a un grupo especial (comúnmente wheel o sudo) que está preconfigurado para tener acceso a sudo. Este enfoque es más manejable y escalable que añadir entradas de usuarios individuales al archivo sudoers. Continuaremos usando la cuenta testuser.
Primero, confirmemos que testuser no tiene privilegios de sudo actualmente. Cambia a la cuenta testuser. La contraseña es password.
su - testuser
Ahora, como testuser, intenta ejecutar un comando que requiera privilegios de root, como whoami con sudo. Se te pedirá la contraseña de testuser.
sudo whoami
Tras introducir la contraseña, el comando fallará. Verás un mensaje indicando que testuser no está en el archivo sudoers. Este es el resultado esperado.
[sudo] password for testuser:
testuser is not in the sudoers file. This incident will be reported.
Ahora, escribe exit para volver a tu sesión de usuario labex.
exit
A continuación, necesitamos editar la configuración de sudoers para conceder acceso sudo a todos los miembros del grupo wheel. La forma más segura de editar esta configuración es con el comando visudo, que valida la sintaxis antes de guardar para evitar que quedes bloqueado fuera del sistema.
sudo visudo
Esto abrirá el archivo /etc/sudoers en un editor de texto (probablemente vi o nano). Busca una línea que haga referencia al grupo %wheel. Probablemente estará comentada con un carácter #.
## %wheel ALL=(ALL) ALL
o
## %wheel ALL=(ALL:ALL) ALL
Debes descomentar esta línea eliminando el # al principio. El resultado debería ser este:
%wheel ALL=(ALL) ALL
Si estás en el editor vi, usa las flechas para ir hasta el #, pulsa x para borrarlo, y luego escribe :wq y pulsa Enter para guardar y salir. Si estás en nano, simplemente borra el #, pulsa Ctrl+X, luego Y y Enter.
Ahora que el grupo wheel tiene permisos, añade a testuser a dicho grupo. Usa el comando usermod con las opciones -aG, donde -a significa añadir (append) y -G especifica el grupo suplementario.
sudo usermod -aG wheel testuser
Para verificar que testuser es ahora miembro del grupo wheel, usa el comando groups:
groups testuser
La salida debería mostrar wheel en la lista de grupos de testuser.
testuser : testuser wheel
Finalmente, probemos si los nuevos permisos funcionan. Cambia de nuevo a testuser.
su - testuser
Intenta el comando sudo otra vez. Introduce password cuando se te pida.
sudo whoami
Esta vez, el comando debería ejecutarse correctamente y mostrar root, confirmando que testuser ahora tiene privilegios de sudo.
[sudo] password for testuser:
root
Escribe exit para volver a tu sesión labex. Has otorgado con éxito acceso a sudo añadiendo un usuario al grupo wheel.
Crear Reglas de Sudo Personalizadas con visudo
En este paso, irás más allá de los permisos generales basados en grupos y aprenderás a crear reglas de sudo detalladas. Esto es esencial para implementar el principio de mínimo privilegio, donde a los usuarios solo se les conceden los permisos exactos que necesitan para realizar sus funciones. Utilizaremos alias dentro del archivo sudoers para definir un conjunto de usuarios y un conjunto de comandos, y luego los vincularemos en una regla.
Primero, creemos una situación para probar nuestra regla. Iniciaremos un proceso como usuario root. El comando top, un monitor de procesos sencillo, es perfecto para esto. Lo ejecutaremos en segundo plano usando sudo. Antes de empezar, asegurémonos de que no hay otros procesos top ejecutándose.
pgrep top || echo "No top processes running"
sudo top &
Verás el ID de proceso (PID) del trabajo en segundo plano. Pulsa Enter si el símbolo del sistema no reaparece inmediatamente.
[1] <PID>
Ahora, creemos la regla personalizada. Concederemos a nuestro testuser la capacidad específica de finalizar procesos utilizando los comandos kill y pkill. Abre el archivo sudoers para editarlo con el comando visudo. Esta es la única forma segura de editar este archivo.
sudo visudo
Esto abrirá /etc/sudoers en un editor. Ve al final del archivo y añade las siguientes líneas para definir un alias de comandos y un alias de usuario, y luego crea la regla que los conecta.
## Custom rule for junior administrators
Cmnd_Alias KILL_CMDS = /usr/bin/kill, /usr/bin/pkill
User_Alias JUNIOR_ADMINS = testuser
JUNIOR_ADMINS ALL=(ALL) KILL_CMDS
Desglosemos estas líneas:
Cmnd_Alias: Crea una lista con nombre de comandos. Hemos llamado a la nuestraKILL_CMDS. Nota que debes usar la ruta completa de los comandos.User_Alias: Crea una lista con nombre de usuarios. Hemos llamado a la nuestraJUNIOR_ADMINS.- La última línea es la regla en sí. Concede a los usuarios en
JUNIOR_ADMINSpermiso para ejecutar los comandos enKILL_CMDSen todos los hosts (ALL).
Tras añadir las líneas, guarda el archivo y sal del editor.
Para probar correctamente esta regla específica, primero debemos eliminar a testuser del grupo wheel para revocar el acceso total a sudo concedido en el paso anterior. Esto garantiza que nuestra prueba sea válida.
sudo gpasswd -d testuser wheel
Verás un mensaje de confirmación:
Removing user testuser from group wheel
Ahora, probemos los nuevos permisos limitados. Cambia a la cuenta testuser. La contraseña es password.
su - testuser
Primero, confirma que el acceso total a sudo ha desaparecido. Intenta ejecutar un comando que no esté en nuestro alias KILL_CMDS, como whoami.
sudo whoami
Este intento debería fallar con un mensaje indicando que testuser no tiene permiso para ejecutar ese comando.
[sudo] password for testuser:
Sorry, user testuser is not allowed to execute '/usr/bin/whoami' as root on <hostname>.
A continuación, prueba uno de los comandos permitidos. Usemos pkill para detener el proceso top que iniciamos antes. Usaremos pkill -u root top para apuntar específicamente al proceso top que se ejecuta como root.
sudo pkill -u root top
Este comando debería ejecutarse con éxito sin ningún mensaje de error. Para confirmar que el proceso top ha finalizado, sal de nuevo a tu usuario labex y comprueba el proceso.
exit
Ahora, comprueba si el proceso top sigue funcionando.
pgrep -u root top
El comando no debería producir ninguna salida, confirmando que el proceso fue finalizado con éxito por testuser. Has creado y probado con éxito una regla de sudo granular.
Resumen
En este laboratorio, has aprendido técnicas esenciales para la gestión de cuentas de usuario y sus políticas de seguridad en un entorno Linux. Practicaste el uso del comando chage para aplicar reglas de vigencia de contraseñas, como establecer tiempos de vida mínimos y máximos y periodos de aviso. También aprendiste a bloquear y desbloquear cuentas de usuario mediante el comando passwd para controlar el acceso al sistema. Para reforzar la seguridad, modificaste la configuración del demonio SSH para desactivar el inicio de sesión directo como root, una práctica recomendada crítica para proteger la cuenta con más privilegios del sistema.
Además, exploraste métodos para delegar privilegios administrativos de forma segura mediante sudo. Aprendiste la práctica estándar de conceder acceso total a sudo añadiendo un usuario al grupo wheel con el comando usermod. Para un control más detallado, utilizaste el comando visudo para editar de forma segura el archivo sudoers, creando reglas personalizadas que permiten a usuarios específicos ejecutar comandos designados con privilegios elevados sin necesidad de la contraseña de root. Este enfoque permite aplicar el principio de mínimo privilegio, otorgando a los usuarios solo los permisos necesarios para realizar sus tareas.



