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."