En la mayoría de los entornos corporativos, los privilegios de administrador se conceden durante la configuración inicial del dispositivo y nunca se revocan. Con el tiempo — nuevas contrataciones, reinscripciones e instalaciones de software — los usuarios acumulan privilegios que ya no necesitan. Esos privilegios se convierten en una superficie de ataque: instalaciones de software no autorizadas, controles de seguridad de endpoints eludidos, cambios accidentales en la configuración del sistema.
Este script aplica una base de mínimo privilegio en toda tu flota macOS. Rebaja automáticamente todas las cuentas de usuario locales a usuario estándar — excepto una cuenta TI de gestión designada que conserva sus privilegios de administrador. El script es seguro para ejecutar silenciosamente en todos los dispositivos y está diseñado para ser idempotente: ejecutarlo varias veces siempre produce el mismo resultado.
El agente de Applivery para macOS debe estar instalado y activo en el dispositivo. Obtén más información sobre el agente macOS.
Requisitos
| Requisito | Detalle |
|---|---|
| Plataforma | macOS |
| Privilegios de ejecución | Root (predeterminado en Applivery) |
| Cuenta protegida | Una cuenta de administrador local debe existir en el dispositivo antes de ejecutar este script |
Antes de desplegar este script, asegúrate de que la cuenta de gestión protegida (EXCLUDE_USER) existe en el dispositivo y ya tiene privilegios de administrador. Si no existe o no es administrador, el script se abortará como medida de seguridad para evitar bloquear el acceso al sistema.
Configuración
Una vez en el panel de Applivery, sigue los pasos descritos aquí para crear un script. Pega el siguiente script en el editor. Antes de guardar, establece la variable EXCLUDE_USER con el nombre corto de tu cuenta TI de gestión.
| Variable | Descripción | Valor predeterminado |
|---|---|---|
EXCLUDE_USER |
El nombre de usuario que debe conservar los derechos de administrador | admin |
Selecciona Bash como lenguaje, dale un nombre descriptivo (por ejemplo, Restringir derechos de administrador) y haz clic en Crear.
#!/bin/bash
# ---
# Title: Demote all local admins to standard (except EXCLUDE_USER)
# Description: Ensures only a specific local account has administrator privileges.
# Author: Applivery
# Version: 1.0.0
# ---
# ======== CONFIGURATION ========
EXCLUDE_USER="admin"
ADMIN_GROUP="admin"
# ======== FUNCTIONS ========
is_admin() {
local user="$1"
dseditgroup -o checkmember -m "$user" "$ADMIN_GROUP" &>/dev/null
return $?
}
# ======== INITIAL CHECKS ========
if [[ $EUID -ne 0 ]]; then
echo "Error: This script must be run with sudo"
exit 1
fi
if ! id "$EXCLUDE_USER" &>/dev/null; then
echo "Error: User '$EXCLUDE_USER' does not exist on this system."
exit 1
fi
if ! is_admin "$EXCLUDE_USER"; then
echo "WARNING: '$EXCLUDE_USER' is NOT an administrator. Aborting for safety."
exit 1
fi
# ======== GET HUMAN USERS ========
users=$(dscl . list /Users | grep -v '^_' | while read -r user; do
uid=$(dscl . read "/Users/$user" UniqueID | awk '{print $2}')
if [[ "$uid" =~ ^[0-9]+$ && "$uid" -ge 501 ]]; then
echo "$user"
fi
done)
# ======== PROCESS EACH USER ========
echo "Processing local users..."
echo "──────────────────────────────────────────────"
count_changed=0
count_skipped=0
while IFS= read -r username; do
[[ -z "$username" ]] && continue
if [[ "$username" == "$EXCLUDE_USER" ]]; then
echo "[SKIP] $username (intentionally excluded)"
((count_skipped++))
continue
fi
if ! is_admin "$username"; then
echo "[OK] $username → already standard (non-admin)"
continue
fi
echo -n "[PROC] $username → removing admin rights... "
if dseditgroup -o edit -d "$username" -t user "$ADMIN_GROUP" 2>/dev/null; then
echo "SUCCESS"
((count_changed++))
else
echo "FAILED"
echo " → Could not remove admin rights (directory service issue?)"
fi
done <<< "$users"
echo "──────────────────────────────────────────────"
echo "Summary:"
echo " Users processed : $(echo "$users" | wc -l | xargs)"
echo " Demoted to standard : $count_changed"
echo " Skipped (excluded) : $count_skipped"
echo ""
echo "Protected user (should remain admin): $EXCLUDE_USER"
if is_admin "$EXCLUDE_USER"; then
echo "✓ User '$EXCLUDE_USER' still has administrator privileges."
else
echo "⚠ ATTENTION: '$EXCLUDE_USER' is NO LONGER an administrator."
echo " Restore admin rights manually:"
echo " sudo dseditgroup -o edit -a \"$EXCLUDE_USER\" -t user admin"
fi
exit 0
Ahora, navega a cualquiera de tus Dispositivos, selecciona la pestaña Scripts, haz clic en el botón + Asignar Script y selecciona el que acabas de crear.
También puedes asignar scripts a Políticas. Para ello, navega a la sección Políticas, selecciona la política deseada y haz clic en la pestaña Scripts. El proceso será el mismo que al asignarlo directamente a un dispositivo individual.
| Método | Comportamiento | ¿Recomendado? |
|---|---|---|
| Once | Se ejecuta una vez por dispositivo. | ✅ Adecuado para una remediación puntual en una flota existente. |
| Loop | Se ejecuta repetidamente en el intervalo configurado (15m, 1h, 6h, 1d, 7d). | ✅ Recomendado para una aplicación continua — detecta nuevas cuentas de administrador a medida que aparecen. |
| On demand | Solo se ejecuta cuando se activa manualmente. | ✅ Útil para auditorías puntuales iniciadas por TI. |
La configuración recomendada es Loop con un intervalo diario o semanal para detectar y rebajar continuamente cualquier nueva cuenta de administrador. Usa Once para una remediación puntual en una flota existente.
Este script no requiere ningún argumento. La cuenta protegida se configura directamente en la variable EXCLUDE_USER dentro del script. Haz clic en Añadir para guardar la asignación.
Orden de despliegue recomendado
Al inscribir un nuevo dispositivo, la secuencia recomendada es:
- El dispositivo se inscribe en Applivery.
- El script Crear usuario administrador oculto se ejecuta para crear la cuenta TI de gestión.
- Este script se ejecuta para rebajar todos los demás usuarios locales a usuario estándar.
Esto garantiza que TI siempre conserve el acceso de gestión mientras los usuarios finales no pueden realizar cambios no autorizados en el sistema.
Ejecuta este script combinado con el script Crear usuario administrador oculto para garantizar que la cuenta de gestión siempre existe antes de aplicar la restricción.
Disponible en GitHub
Este script es parte del Repositorio público de scripts de Applivery. El mínimo privilegio es la primera línea de defensa — este script aplica esa política en toda tu flota en segundos.