Saltar a contenido

Propuesta del script de creación de Usuarios y grupos en Samba

Propuesta 1

Las mejoras propuestas más destacables son:

  • Creación de los grupos según nos indique el administrador.
  • Creación de los usuarios según nos indique el administrador.
  • El grupo principal se asigna durante la creación del usuario usando -g "$grupo".
#!/bin/bash

# Listas de usuarios y grupos que deseas crear
read -p "Introduce los nombres de los grupos, separados por espacios: " -a grupos

# Crear los grupos si no existen
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

# Solicitar número de usuarios en una sola línea
read -p "¿Cuántos usuarios deseas crear? " num_usuarios

# Configuración de políticas de caducidad
DAYS_MIN=7
DAYS_MAX=30
DAYS_WARN=7

# Crear cada usuario
for ((i=1; i<=num_usuarios; i++)); do
  read -p "Introduce el nombre del usuario $i: " usuario

  # Seleccionar el grupo principal para el usuario
  echo "Selecciona un grupo principal para $usuario:"
  select grupo in "${grupos[@]}"; do
    if [[ -n "$grupo" ]]; then
      echo "Asignando el grupo principal $grupo para el usuario $usuario."
      break
    else
      echo "Selección no válida. Inténtalo de nuevo."
    fi
  done

  # Crear el usuario con el grupo elegido como principal si no existe
  if id "$usuario" &>/dev/null; then
    echo "El usuario $usuario ya existe."
  else
    echo "Creando usuario $usuario..."
    useradd -m -s /bin/bash -g "$grupo" "$usuario"  # Establece el grupo principal
    temp_pass=$(openssl rand -base64 12)
    echo "$usuario:$temp_pass" | chpasswd

    # Configurar políticas de caducidad
    chage -d 0 -m "$DAYS_MIN" -M "$DAYS_MAX" -W "$DAYS_WARN" "$usuario"
    echo "Usuario $usuario creado con políticas de caducidad de contraseña."

    # Informar al admin la contraseña temporal
    echo "La contraseña temporal para el usuario $usuario es: $temp_pass"
  fi


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

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

Propuesta 2

Las mejoras propuestas más destacables son las anteriores y la creación de grupos en Samba, destacando los siguientes pasos:

  • Para cada grupo creado, el script añade un grupo en Samba usando net groupmap add ntgroup="$grupo" unixgroup="$grupo" type=domain.
  • Dado que ya hemos mapeado los grupos Unix a Samba con net groupmap, el grupo principal se gestiona en Unix al crear el usuario con useradd -g "$grupo". Samba reconocerá los permisos de grupo correctamente en función de este mapeo.
#!/bin/bash

# Listas de usuarios y grupos que deseas crear
read -p "Introduce los nombres de los grupos, separados por espacios: " -a grupos

# Crear los grupos si no existen
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"
    # Crear grupo en Samba
    net groupmap add ntgroup="$grupo" unixgroup="$grupo" type=domain
    echo "Grupo $grupo añadido a Samba."
  fi
done

# Solicitar número de usuarios en una sola línea
read -p "¿Cuántos usuarios deseas crear? " num_usuarios

# Configuración de políticas de caducidad
DAYS_MIN=7
DAYS_MAX=30
DAYS_WARN=7

# Crear cada usuario
for ((i=1; i<=num_usuarios; i++)); do
  read -p "Introduce el nombre del usuario $i: " usuario

  # Seleccionar el grupo principal para el usuario
  echo "Selecciona un grupo principal para $usuario:"
  select grupo in "${grupos[@]}"; do
    if [[ -n "$grupo" ]]; then
      echo "Asignando el grupo principal $grupo para el usuario $usuario."
      break
    else
      echo "Selección no válida. Inténtalo de nuevo."
    fi
  done

  # Crear el usuario con el grupo elegido como principal si no existe
  if id "$usuario" &>/dev/null; then
    echo "El usuario $usuario ya existe."
  else
    echo "Creando usuario $usuario..."
    useradd -m -s /bin/bash -g "$grupo" "$usuario"  # Establece el grupo principal
    temp_pass=$(openssl rand -base64 12)
    echo "$usuario:$temp_pass" | chpasswd

    # Configurar políticas de caducidad
    chage -d 0 -m "$DAYS_MIN" -M "$DAYS_MAX" -W "$DAYS_WARN" "$usuario"
    echo "Usuario $usuario creado con políticas de caducidad de contraseña."

    # Informar al admin la contraseña temporal
    echo "La contraseña temporal para el usuario $usuario es: $temp_pass"
  fi

  # Crear el usuario en Samba y asignar el grupo principal de Unix
  echo -e "$temp_pass\n$temp_pass" | smbpasswd -a "$usuario"
  smbpasswd -e "$usuario"
done

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