Saltar a contenido

Creación de usuarios y grupos

Como se ha comentado anteriormente es necesario crear los usuarios y los grupos en el sistema para posteriormente crearlos en la base de datos de Samba, cuando se tiene un número elevado de usuarios es necesario disponer de herramientas de automatización del proceso de generación de usuarios que se puede resumir en:

  1. Grupos: Crear los grupos especificados si no existen.
  2. Usuarios: Crear los usuarios, les asigna una contraseña para el sistema, los agrega a un grupo y crea las cuentas correspondientes en Samba.
  3. Samba: Añade los usuarios a Samba y les asigna una contraseña.
  4. Reinicio de Samba: El servicio smbd de Samba se debe reiniciar para aplicar los cambios.

Automatización

Para automatizar dichos pasos se aconseja la utilización de scripting, a continuación se muestra un ejemplo general de script para realizar el proceso descrito:

#!/bin/bash

# Listas de usuarios y grupos que deseas crear
usuarios=("usuario1" "usuario2" "usuario3");
grupos=("grupo1" "grupo2" "grupo3");

# Contraseña para los usuarios de Samba
samba_passwd="Contraseña123"

# Crear grupos
for grupo in "${grupos[@]}"; do
  if getent group "$grupo" >/dev/null; then
    echo "El grupo $grupo ya existe."
  else
    echo "Creando grupo $grupo..."
    groupadd "$grupo"
  fi
done

# Crear usuarios y añadirlos a los grupos
for usuario in "${usuarios[@]}"; do
  if id "$usuario" &>/dev/null; then
    echo "El usuario $usuario ya existe."
  else
    echo "Creando usuario $usuario..."
    useradd -m -s /bin/bash "$usuario"
    echo "$usuario:password" | chpasswd

    # Añadir el usuario a un grupo
    usermod -aG "${grupos[0]}" "$usuario"  
    # ¡¡Cuidado!! Habrá que modificar esta última línea de código 
    # para asignar el grupo de cada caso en concreto.
  fi

  # Crear el usuario en Samba
  echo -e "$samba_passwd\n$samba_passwd" | smbpasswd -a "$usuario"
  smbpasswd -e "$usuario"  # Habilitar el usuario en Samba
done

# Reiniciar el servicio de Samba para aplicar cambios
systemctl restart smbd
echo "Usuarios y grupos creados exitosamente en el sistema y en Samba."

Tip1

  • getent: El comando getent (abreviatura de "get entries") recupera entradas de bases de datos específicas admitidas por NSS. Esto lo convierte en una herramienta versátil para buscar una amplia gama de información en un sistema Linux, incluidas cuentas de usuario, grupos, hosts, servicios y más.

Tip2

  • NSS: El Name Service Switch o NSS provee una interfaz para configurar y acceder a diferentes bases de datos de cuentas de usuarios y claves como /etc/passwd, /etc/group, /etc/hosts, LDAP, etc. Apuntes NSS

Tip3

  • "{usuarios[@]}: son los valores del vector de usuarios separados, ya que tanto $@ como $* son variables bash internas que representan todos los parámetros pasados a una función o un script, con una diferencia clave, $@ tiene cada parámetro como una cadena con comillas separada, mientras que $* tiene todos los parámetros como una sola cadena. De esta forma podemos tratar cada usuario por separado.

Scripting

La creación y generación de scripts o scripting se debe haber adquirido en Sistemas Operativos Monopuesto, módulo del primer curso, de todas formas a continuación se adjuntan apuntes de repaso de otros módulos para reforzar la creación de scripts:

Configuración de contraseñas samba

Para las restricciones de contraseña se puede realizar con el comando chage. El comando chage en Linux se utiliza para cambiar la información relacionada con la expiración de la contraseña de un usuario. Te permite ajustar cuándo caduca una contraseña, cuántos días antes de la expiración se debe advertir al usuario, entre otras configuraciones.

Sintaxis básica:

chage [opciones] usuario

Principales argumentos del comando chage

  • -d o --lastday: Establece el último día en que la contraseña fue cambiada. Se debe proporcionar la fecha en formato YYYY-MM-DD o en días desde el 1 de enero de 1970 (epoch).
  • -E o --expiredate: Establece la fecha en la que la cuenta expira. Después de esa fecha, el usuario no podrá acceder al sistema. La fecha se especifica en el formato YYYY-MM-DD o con el número de días desde la época.
  • -I o --inactive: Establece el número de días de inactividad después de la expiración de la contraseña, tras los cuales la cuenta será desactivada.
  • -m o --mindays: Especifica el número mínimo de días que deben pasar antes de que el usuario pueda cambiar su contraseña nuevamente.
  • -M o --maxdays: Establece el número máximo de días que puede pasar antes de que se requiera un cambio de contraseña.
  • -W o --warndays: Define cuántos días antes de que expire la contraseña se advertirá al usuario de la expiración.
  • -l o --list: Muestra el estado de la cuenta del usuario, incluyendo la fecha del último cambio de contraseña, cuándo expira, cuántos días faltan para el siguiente cambio obligatorio, etc.

Ejemplos

  • Para configurar una contraseña que expire cada 60 días, avisar con 10 días de anticipación y no permitir que se cambie en menos de 5 días:
sudo chage -M 60 -W 10 -m 5 usuario
  • Para desactivar la cuenta de un usuario en una fecha específica:

    sudo chage -E 2024-12-31 usuario
    

  • Para obligar al usuario a cambiar su contraseña en su próximo inicio de sesión, se utiliza chage -d 0 usuario.

    sudo chage -d 0 -m 7 -M 30 -W 7 usuario
    

  • Para comprobar los cambios se puede ejecutar:

sudo chage -l usuario