#!/bin/bash # Colores YELLOW='\033[1;33m' GREEN='\033[0;32m' RED='\033[0;31m' NC='\033[0m' # Función para obtener usuarios en /home obtener_usuarios_home() { usuarios=() for usuario in $(ls /home); do if [ -d "/home/$usuario" ]; then usuarios+=("$usuario") fi done } # Función para mostrar usuarios con permisos mostrar_usuarios_home() { echo -e "\n${YELLOW}Usuarios con directorio en /home:${NC}" obtener_usuarios_home for i in "${!usuarios[@]}"; do grupos=$(groups "${usuarios[$i]}" | cut -d: -f2) if [[ $grupos == *"sudo"* ]]; then permisos="sudo" else permisos="ninguno" fi echo "$((i+1)). ${usuarios[$i]} - Permisos: $permisos" done } # Función para seleccionar un usuario por número seleccionar_usuario() { obtener_usuarios_home echo -e "\n${YELLOW}Selecciona un usuario:${NC}" for i in "${!usuarios[@]}"; do echo "$((i+1)). ${usuarios[$i]}" done read -p "Número: " num usuario="${usuarios[$((num-1))]}" } # Crear usuario crear_usuario() { read -p "Nombre del nuevo usuario: " usuario read -sp "Contraseña del usuario: " pass echo sudo useradd -m -s /bin/bash "$usuario" && echo "$usuario:$pass" | sudo chpasswd if [ $? -eq 0 ]; then echo -e "\n${YELLOW}Asignando permisos al usuario...${NC}" echo "1. Sin permisos" echo "2. Permiso sudo" echo "3. Grupo específico" read -p "Elegí una opción [1-3]: " opcion case "$opcion" in 2) sudo usermod -aG sudo "$usuario" ;; 3) read -p "Nombre del grupo: " grupo; sudo usermod -aG "$grupo" "$usuario" ;; esac echo -e "${GREEN}Usuario $usuario creado correctamente.${NC}" else echo -e "${RED}Error al crear el usuario.${NC}" fi } # Eliminar usuario eliminar_usuario() { mostrar_usuarios_home seleccionar_usuario if id "$usuario" &>/dev/null; then sudo deluser --remove-home "$usuario" echo -e "${GREEN}Usuario eliminado.${NC}" else echo -e "${RED}No existe ese usuario.${NC}" fi } # Bloquear usuario bloquear_usuario() { mostrar_usuarios_home seleccionar_usuario sudo usermod -L "$usuario" && echo -e "${GREEN}Usuario bloqueado.${NC}" || echo -e "${RED}Error.${NC}" } # Desbloquear usuario desbloquear_usuario() { mostrar_usuarios_home seleccionar_usuario sudo usermod -U "$usuario" && echo -e "${GREEN}Usuario desbloqueado.${NC}" || echo -e "${RED}Error.${NC}" } # Cambiar contraseña cambiar_contraseña() { mostrar_usuarios_home seleccionar_usuario sudo passwd "$usuario" } # Agregar a grupo agregar_a_grupo() { mostrar_usuarios_home seleccionar_usuario read -p "Grupo: " grupo sudo usermod -aG "$grupo" "$usuario" && echo -e "${GREEN}Agregado a $grupo.${NC}" } # Quitar de grupo quitar_de_grupo() { mostrar_usuarios_home seleccionar_usuario read -p "Grupo a quitar: " grupo sudo gpasswd -d "$usuario" "$grupo" } # Verificar si usuario está bloqueado verificar_estado_usuario() { mostrar_usuarios_home seleccionar_usuario estado=$(sudo passwd -S "$usuario" 2>/dev/null) if [[ $? -ne 0 ]]; then echo -e "${RED}El usuario '$usuario' no existe.${NC}" return fi estado_cuenta=$(echo "$estado" | awk '{print $2}') case "$estado_cuenta" in L) echo -e "${YELLOW}El usuario '$usuario' está BLOQUEADO.${NC}" ;; P) echo -e "${GREEN}El usuario '$usuario' está ACTIVO.${NC}" ;; NP) echo -e "${RED}El usuario '$usuario' no tiene contraseña.${NC}" ;; *) echo -e "${RED}Estado desconocido: $estado_cuenta${NC}" ;; esac read -p "Presiona Enter para continuar..." } # Menú principal while true; do clear echo -e "${YELLOW}=== GESTIÓN DE USUARIOS ===${NC}" mostrar_usuarios_home echo -e "\n¿Qué deseas hacer?" echo "1. Crear un nuevo usuario" echo "2. Eliminar un usuario" echo "3. Ver usuarios con directorio en /home" echo "4. Bloquear usuario" echo "5. Desbloquear usuario" echo "6. Cambiar contraseña" echo "7. Agregar a grupo" echo "8. Quitar de grupo" echo "9. Verificar si un usuario está bloqueado" echo "10. Salir" read -p "Selecciona una opción [1-10]: " opcion case "$opcion" in 1) crear_usuario ;; 2) eliminar_usuario ;; 3) mostrar_usuarios_home; read -p "Presiona Enter para continuar..." ;; 4) bloquear_usuario ;; 5) desbloquear_usuario ;; 6) cambiar_contraseña ;; 7) agregar_a_grupo ;; 8) quitar_de_grupo ;; 9) verificar_estado_usuario ;; 10) echo -e "${GREEN}¡Chau!${NC}"; exit 0 ;; *) echo -e "${RED}Opción inválida.${NC}" ;; esac done