Cómo habilitar cuentas de usuario en Linux mediante un script Bash automatizado

La gestión eficaz de las cuentas de usuario es una tarea crucial para los profesionales de TI y los proveedores de servicios gestionados (MSP). Una parte importante de esto implica habilitar y deshabilitar cuentas de usuario según sea necesario. Este post tratará sobre un script Bash que simplifica el proceso de habilitar cuentas de usuario en sistemas Linux. Al comprender y utilizar este script, los profesionales de TI pueden agilizar la gestión de usuarios, mejorar la seguridad del sistema y garantizar un funcionamiento sin problemas.

Contexto

La gestión de cuentas de usuario en Linux es una responsabilidad fundamental para los administradores de sistemas. Garantizar que sólo los usuarios autorizados tengan acceso a los recursos del sistema es vital para mantener la seguridad y la integridad operativa. Este script Bash está diseñado para habilitar cuentas de usuario cambiando su shell de inicio de sesión a /bin/bash y desbloqueando la cuenta. Esta automatización puede ahorrar tiempo, reducir los errores humanos y aplicar prácticas de seguridad coherentes en varios sistemas.

El script para habilitar cuentas de usuario en Linux

#!/usr/bin/env bash

# Description: Enables a user account by changing its shell to /bin/bash and unlocking the account.
#
# Release Notes: Initial Release
# By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
# Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
# Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
# Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
# Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
# Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
# Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
# EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#
# Below are all the valid parameters for this script.
#
# Preset Parameter: "ReplaceMeWithUsernameToEnable"
#   Username of the user you would like to enable.
#

# Help text function for when invalid input is encountered
print_help() {
  printf '\n### Below are all the valid parameters for this script. ###\n'
  printf '\nPreset Parameter: "ReplaceMeWithUsernameToEnable" \n'
  printf '\t%s\n' "Username of the user you would like to enable."
}

# Determines whether or not help text is nessessary and routes the output to stderr
die() {
  local _ret="${2:-1}"
  echo "$1" >&2
  test "${_PRINT_HELP:-no}" = yes && print_help >&2
  exit "${_ret}"
}

_arg_userToEnable=

# Grabbing the parameters and parsing through them.
parse_commandline() {
  while test $# -gt 0; do
    _key="$1"
    case "$_key" in
    --help | -h)
      _PRINT_HELP=yes die 0
      ;;
    --*)
      _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1
      ;;
    *)
      if [[ -z $_arg_userToEnable ]]; then
        _arg_userToEnable=$1
      else
        _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1' but user '$_arg_userToEnable' was already specified!" 1
      fi
      ;;
    esac
    shift
  done
}

# Parse the command-line arguments passed to the script.
parse_commandline "$@"

if [[ -n $usernameToEnable ]]; then
  _arg_userToEnable="$usernameToEnable"
fi

# Check if the username to disable is empty and display an error if it is.
if [[ -z $_arg_userToEnable ]]; then
  _PRINT_HELP=yes die "[Error] The username of the user you would like to disable is required!'" 1
fi

# Validate the username to ensure it only contains lowercase letters, digits, hyphens, and underscores.
if [[ ! $_arg_userToEnable =~ ^[a-z0-9_-]+$ ]]; then
  _PRINT_HELP=no die "[Error] Invalid characters detected in '$_arg_userToEnable' usernames can only have a-z, 0-9 or -, _ characters!" 1
fi

# Search for the user in the /etc/passwd file.
passwdEntry=$(grep -w "$_arg_userToEnable" /etc/passwd)
if [[ -z $passwdEntry ]]; then
  _PRINT_HELP=no die "[Error] User '$_arg_userToEnable' does not exist." 1
fi

# Check to see if account is expired
accountExpiration=$(chage -l "$_arg_userToEnable" | grep "Account expires" | grep -v 'never' | cut -d ":" -f2 | xargs)
if [[ -n $accountExpiration ]]; then
  accountExpirationSeconds=$(date -d "$accountExpiration" +"%s")
  
  currentTime=$(date +"%s")
  # Warn if account is expired
  if [[ $accountExpirationSeconds -le $currentTime ]]; then
    echo "WARNING: The account for '$_arg_userToEnable' is currently expired as of '$accountExpiration'. You may need to set a new expiration date."
  fi
fi

noLogin=$(grep -w "$_arg_userToEnable" /etc/passwd | grep "nologin")
unlockedaccount=$(passwd -S "$_arg_userToEnable" | cut -f2 -d " " | grep -v "L")
if [[ -z $noLogin && -n $unlockedaccount ]]; then
  _PRINT_HELP=no die "[Error] User '$_arg_userToEnable' is already enabled." 1
fi

if [[ -f /bin/bash ]]; then
  preferredShell="/bin/bash"
elif [[ -f /bin/sh ]]; then
  preferredShell="/bin/sh"
fi

# Attempt to change the shell of the user to /bin/bash to enable login capabilities.
if ! usermod "$_arg_userToEnable" -s "$preferredShell"; then
  _PRINT_HELP=no die "[Error] Failed to change the shell for '$_arg_userToEnable' to '$preferredShell'." 1
fi

# Attempt to unlock the user account using usermod.
if ! usermod -U "$_arg_userToEnable"; then
  _PRINT_HELP=no die "[Error] Failed to unlock '$_arg_userToEnable' using usermod." 1
fi

# Check if the user has been successfully enabled by confirming 'nologin' is no longer set.
enabledUser=$(grep -w "$_arg_userToEnable" /etc/passwd | grep -v "nologin")
if [[ -n $enabledUser ]]; then
  echo "Successfully enabled '$_arg_userToEnable'."
else
  _PRINT_HELP=no die "[Error] Failed to enable '$_arg_userToEnable'." 1
fi

 

Análisis detallado

El script Bash proporcionado realiza su tarea a través de varios pasos bien definidos. Desglosemos cada parte del script para habilitar cuentas de usuario para entender su funcionalidad:

1. Texto de ayuda y funciones de gestión de errores:

  • El script comienza definiendo funciones para mostrar texto de ayuda (print_help) y manejar errores (die). Estas funciones garantizan que el usuario esté informado sobre el uso correcto del script para habilitar cuentas de usuario y pueda solucionar los problemas de forma eficaz.

2. Análisis de parámetros:

  • La función parse_commandline procesa los argumentos de la línea de comandos del script para habilitar cuentas de usuario. Comprueba el indicador –help, los argumentos inesperados y se asegura de que sólo se proporciona un nombre de usuario.

3. Validación del nombre de usuario:

  • El script valida el nombre de usuario proporcionado para asegurarse de que sólo contiene letras minúsculas, dígitos, guiones y guiones bajos. Este paso evita posibles problemas de seguridad derivados de caracteres no válidos.

4. Comprobación de existencia de usuario:

  • El script para habilitar cuentas de usuario comprueba si el usuario existe en el archivo /etc/passwd. Si el usuario no existe, sale con un mensaje de error.

5. Comprobación de la caducidad de la cuenta:

  • El script utiliza el comando chage para determinar si la cuenta ha caducado. Si caduca, avisa al usuario, aunque sigue intentando habilitar la cuenta.

6. Shell de inicio de sesión y comprobación del estado de la cuenta:

  • Verifica si el shell de inicio de sesión del usuario está configurado como nologin y si la cuenta ya está desbloqueada. Si el usuario ya está habilitado, sale con un error.

7. Selección de shells:

  • El script para habilitar cuentas de usuario comprueba la existencia de /bin/bash y /bin/sh, prefiriendo /bin/bash si está disponible.

8. Cambio del shell y desbloqueo de la cuenta:

  • El script intenta cambiar el shell de inicio de sesión del usuario al shell preferido y desbloquear la cuenta utilizando el comando usermod.

9. Verificación final:

  • Verifica si el usuario ha sido habilitado con éxito comprobando que nologin ya no está establecido. Si tiene éxito, imprime un mensaje de confirmación.

Posibles casos de uso

Imagina un escenario en el que un profesional de TI gestiona un gran equipo con frecuentes cambios de personal. Un empleado que se reincorpora tras un permiso prolongado necesita volver a activar su cuenta. Con este script para habilitar cuentas de usuario, el profesional de TI puede activar rápidamente la cuenta sin tener que navegar manualmente por múltiples comandos, lo que garantiza que el proceso sea rápido y sin errores.

Comparaciones

Este script para habilitar cuentas de usuario proporciona un enfoque racionalizado y automatizado para habilitar cuentas de usuario en comparación con los métodos manuales. Habilitar manualmente un usuario implica varios pasos: editar /etc/passwd, cambiar el shell y desbloquear la cuenta. Cada paso es susceptible de error humano. En cambio, este script encapsula todos estos pasos en un único proceso repetible, lo que aumenta la fiabilidad y la eficacia.

FAQ

1) ¿Qué ocurre si el nombre de usuario no es válido?

El script para habilitar cuentas de usuario sale con un mensaje de error indicando que el nombre de usuario contiene caracteres no válidos.

2) ¿Se puede utilizar este script para habilitar varios usuarios a la vez?

No, el script está diseñado para permitir un usuario a la vez para garantizar la precisión y la seguridad.

3) ¿Qué pasa si el shell preferido /bin/bash no está disponible?

El script vuelve a /bin/sh si no encuentra /bin/bash.

4) ¿El script para habilitar cuentas de usuario gestiona todos los errores relacionados con la cuenta?

El script gestiona errores comunes como nombres de usuario no válidos, usuarios inexistentes y cuentas ya habilitadas.

Implicaciones

Habilitar cuentas de usuario de forma segura es fundamental para mantener la integridad del sistema. Los scripts automatizados de este tipo reducen el riesgo de error humano, garantizando que las cuentas se activen correcta y rápidamente. Esto contribuye a la seguridad general del sistema y a la eficiencia operativa, que son primordiales en cualquier entorno informático.

Recomendaciones

Cuando utilices este script para habilitar cuentas de usuario, sigue estas prácticas recomendadas:

  • Haz pruebas en un entorno controlado: antes de desplegar el script en un entorno de producción, pruébalo en un entorno controlado para asegurarte de que se comporta como se espera.
  • Realiza auditorías de forma periódica: revisa periódicamente las cuentas de usuario y la funcionalidad del script para garantizar el cumplimiento de las políticas de seguridad.
  • Documentación: cnserva documentación detallada de cualquier personalización realizada en el script para facilitar el mantenimiento futuro.

Reflexiones finales

La gestión eficaz de las cuentas de usuario es esencial para mantener un entorno informático seguro y eficiente. Este script Bash ofrece una solución fiable y automatizada para habilitar cuentas de usuario en Linux. Para las organizaciones que buscan agilizar aún más sus operaciones de TI, herramientas como NinjaOne pueden proporcionar soluciones integrales de gestión, mejorando la eficiencia y la seguridad en todos los ámbitos.

Categorías:

Quizá también te interese…

×

¡Vean a NinjaOne en acción!

Al enviar este formulario, acepto la política de privacidad de NinjaOne.

Términos y condiciones de NinjaOne

Al hacer clic en el botón “Acepto” que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona “tal cual” y “según disponibilidad”, sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).