El principio de mínimo privilegio es el valor predeterminado correcto — pero hay momentos en que un usuario estándar necesita legítimamente realizar una tarea de administrador: instalar software aprobado, cambiar un ajuste de red, ejecutar una herramienta de diagnóstico. La solución incorrecta es conceder privilegios de administrador permanentes. La solución correcta es dar a los usuarios exactamente lo que necesitan, durante exactamente el tiempo que lo necesitan, y revocarlo automáticamente.
Este script implementa elevación Justo-a-Tiempo (JIT): el usuario lo activa desde el Self-Service de Applivery, un diálogo con marca corporativa solicita un motivo y, si el usuario confirma, recibe privilegios de administrador durante exactamente 3 minutos. Cuando expira el tiempo, el script revoca el acceso automáticamente y elimina todos sus rastros — sin LaunchDaemons residuales, sin archivos temporales.
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) |
| swiftDialog | Se instala automáticamente si no está presente |
| Marca corporativa | /var/root/CompanyAssets/logo.png (opcional, para el diálogo con marca) |
Configuración
Para una experiencia con marca corporativa, despliega tu logotipo en cada dispositivo gestionado antes de ejecutar este script. El archivo debe estar en /var/root/CompanyAssets/logo.png. Puedes distribuirlo usando la gestión de archivos de Applivery. Si el archivo no está presente, el diálogo usará el icono predeterminado de swiftDialog en su lugar.
Una vez en el panel de Applivery, sigue los pasos descritos aquí para crear un script. Pega el siguiente script en el editor, selecciona Bash como lenguaje, dale un nombre descriptivo (por ejemplo, Derechos de administrador temporales) y haz clic en Crear.
#!/bin/bash
# ---
# Title: Temporary Admin Rights (JIT Elevation)
# Description: Grants local admin privileges to a standard user for 3 minutes with mandatory reason logging.
# Author: Applivery
# Version: 1.1.0
# ---
# ==========================================
# 1. PRE-FLIGHT & PREREQUISITES
# ==========================================
if [ "$(id -u)" -ne 0 ]; then
echo "ERROR: This script must be run with sudo." >&2
exit 1
fi
# [... instalación de swiftDialog y detección del usuario actual ...]
currentUser=$(/bin/ls -l /dev/console | /usr/bin/awk '{ print $3 }')
[ "$currentUser" = "loginwindow" ] && exit 0
if id -Gn "$currentUser" | grep -qw admin; then
"$DIALOG_CLI" --title "Temporary Admin Rights" --message "You are already an administrator." --button1text "OK" --icon "$brandIconPath" --height 220 --width 480
exit 0
fi
# ==========================================
# 4. ELEVATION DIALOG
# ==========================================
message="You are about to be granted administrator privileges for 3 minutes. Use them responsibly."
dialogRaw=$("$DIALOG_CLI" \
--json \
--title "Temporary Admin Rights" \
--message "$message" \
--textfield "Reason,name=reason,prompt=\"Reason (optional)\"" \
--button1text "MAKE ME ADMIN" \
--button2text "CANCEL" \
--icon "$brandIconPath" \
--height 280 --width 720 2>&1)
[ $? != 0 ] && exit 0
# ==========================================
# 5. EXECUTION & AUTO-REVOKE
# ==========================================
scriptDir="/Users/Shared/AdminTime"
scriptFile="$scriptDir/admin_privileges.sh"
launchDaemonFile="/Library/LaunchDaemons/com.applivery.adminprivileges.plist"
mkdir -p "$scriptDir"
cat << EOF > "$scriptFile"
#!/bin/bash
currentUser=\$(/bin/ls -l /dev/console | /usr/bin/awk '{ print \$3 }')
dseditgroup -o edit -a "\$currentUser" -t user admin
sleep 180
dseditgroup -o edit -d "\$currentUser" -t user admin
rm -rf "$scriptDir"
rm -f "$launchDaemonFile"
EOF
chmod +x "$scriptFile"
# [... crear LaunchDaemon y cargar ...]
echo "Success: User $currentUser elevated for 3 minutes."
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.
Selecciona On demand como método de ejecución — esto hace que el script aparezca como acción en el Self-Service de Applivery que los usuarios pueden activar cuando necesiten acceso de administrador temporal.
| Método | Comportamiento | ¿Recomendado? |
|---|---|---|
| Once | Se ejecuta una vez por dispositivo. | ❌ No adecuado — el script está diseñado para ser activado bajo demanda por el usuario. |
| Loop | Se ejecuta automáticamente en un intervalo recurrente. | ❌ No recomendado — esto concedería privilegios de administrador automáticamente y repetidamente sin interacción del usuario. |
| On demand | Solo se ejecuta cuando el usuario lo activa desde el Self-Service. | ✅ Recomendado — el usuario activa la elevación cuando la necesita. |
Este script no requiere ningún argumento. El usuario activo se detecta automáticamente en tiempo de ejecución. Haz clic en Añadir para guardar la asignación.
Qué verán los usuarios
Una vez asignado como acción On-demand, el script aparece como un elemento en el Self-Service de Applivery. Cuando el usuario lo activa, se abre una ventana de diálogo con marca corporativa que muestra un mensaje sobre el límite de 3 minutos. El usuario introduce un motivo opcional y hace clic en MAKE ME ADMIN para confirmar, o en CANCEL para cancelar.
Tras la confirmación, el usuario se añade al grupo admin. Después de 3 minutos, el script revoca los privilegios automáticamente y elimina el LaunchDaemon auxiliar y el script auxiliar del dispositivo, sin dejar rastro.
Personalizar la ventana de elevación
Por defecto, la elevación dura 3 minutos (180 segundos). Para cambiar esto, edita el valor sleep 180 en el bloque de script auxiliar integrado:
sleep 180 # Change this value (in seconds) to adjust the duration
Por ejemplo, sleep 600 concedería 10 minutos de acceso de administrador.
Disponible en GitHub
Este script es parte del Repositorio público de scripts de Applivery. Puedes usarlo tal cual o adaptar la marca, la duración y el contenido del diálogo a las necesidades de tu organización.