En macOS, muchas operaciones a nivel del sistema requieren privilegios elevados que tu cuenta de usuario normal no tiene. El comando sudo (abreviatura de “superuser do”) te permite ejecutar comandos con acceso de nivel root desde el Terminal. Esta guia cubre el uso basico y avanzado de sudo, el archivo de configuracion sudoers, la habilitacion de Touch ID para la autenticacion de sudo y las consideraciones de seguridad especificas de macOS.
Uso basico de sudo
Ejecutar un solo comando como root
Agrega el prefijo sudo a cualquier comando para ejecutarlo con privilegios de root:
# Install a package with Homebrew (some operations need sudo)
sudo installer -pkg /path/to/package.pkg -target /
# Edit a system configuration file
sudo nano /etc/hosts
# Change file ownership
sudo chown root:wheel /usr/local/bin/myapp
# Restart a system service
sudo launchctl kickstart -k system/com.apple.mDNSResponder
Cuando ejecutas sudo por primera vez en una sesion de terminal, macOS te solicita tu contrasena de usuario. Despues de la autenticacion, sudo recuerda tus credenciales durante 5 minutos (configurable), por lo que los comandos sudo posteriores dentro de esa ventana no requieren reautenticacion.
Abrir un shell elevado
Si necesitas ejecutar multiples comandos con privilegios de root:
# Open a root shell (preserves your environment)
sudo -s
# Open a root login shell (loads root's environment)
sudo -i
# Exit the root shell when done
exit
Mientras estes en un shell de root, cada comando se ejecuta con privilegios completos del sistema. Ten cuidado — no hay redes de seguridad para comandos como rm -rf.
Ejecutar un comando como un usuario diferente
# Run a command as a specific user
sudo -u _www /usr/bin/some-command
# Open a shell as a different user
sudo -u another_user -s
Comandos sudo comunes en macOS
Administracion del sistema
# Flush the DNS cache
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
# Restart networking
sudo ifconfig en0 down
sudo ifconfig en0 up
# Show listening ports
sudo lsof -iTCP -sTCP:LISTEN -P
# Repair disk permissions (macOS El Capitan and earlier)
sudo diskutil repairPermissions /
# Start/stop/restart services via launchctl
sudo launchctl load /Library/LaunchDaemons/com.example.myservice.plist
sudo launchctl unload /Library/LaunchDaemons/com.example.myservice.plist
Operaciones del sistema de archivos
# Write to a protected directory
sudo cp myfile.conf /etc/
# Edit protected files
sudo nano /etc/apache2/httpd.conf
sudo vim /etc/ssh/sshd_config
# Change permissions on system files
sudo chmod 644 /etc/hosts
Gestion de paquetes y software
# Install Xcode command line tools
sudo xcode-select --install
# Accept Xcode license
sudo xcodebuild -license accept
# Install a .pkg file
sudo installer -pkg /path/to/package.pkg -target /
Entendiendo el archivo sudoers
El archivo /etc/sudoers controla quien puede usar sudo y que pueden hacer con el. En macOS, la configuracion predeterminada permite a los miembros del grupo admin ejecutar cualquier comando a traves de sudo.
Ver el archivo sudoers
# Always use visudo to edit sudoers (validates syntax)
sudo visudo
# View without editing
sudo cat /etc/sudoers
Nunca edites /etc/sudoers directamente con un editor de texto. Siempre usa visudo, que valida la sintaxis antes de guardar. Un error de sintaxis en este archivo puede bloquearte el acceso a sudo por completo.
Configuracion predeterminada de sudoers en macOS
La linea clave en el archivo sudoers de macOS es:
%admin ALL=(ALL) ALL
Esto significa: cualquier miembro del grupo admin (%admin) puede ejecutar cualquier comando (ALL) como cualquier usuario (ALL) en cualquier host (ALL).
Agregar reglas personalizadas de sudoers
Para un control mas granular, agrega reglas a /etc/sudoers.d/ en lugar de editar el archivo principal:
# Create a custom sudoers rule file
sudo visudo -f /etc/sudoers.d/custom-rules
Ejemplos de reglas:
# Allow a user to restart Apache without a password
john ALL=(root) NOPASSWD: /usr/sbin/apachectl restart
# Allow a group to run specific commands
%developers ALL=(root) NOPASSWD: /usr/local/bin/deploy.sh
# Allow a user to run any command without a password (use with caution)
jane ALL=(ALL) NOPASSWD: ALL
Cambiar el tiempo de espera de sudo
Por defecto, sudo recuerda tu contrasena durante 5 minutos. Para cambiar esto:
sudo visudo
Agrega o modifica:
Defaults timestamp_timeout=15
Establece en 0 para requerir contrasena cada vez, o -1 para que nunca expire dentro de una sesion.
Touch ID para sudo
En Macs con Touch ID, puedes autenticar sudo con tu huella digital en lugar de escribir tu contrasena.
macOS Sonoma y posteriores
A partir de macOS Sonoma, Apple proporciona un archivo dedicado para la configuracion de Touch ID con sudo:
# Create or edit the sudo_local file
sudo nano /etc/pam.d/sudo_local
Agrega esta linea:
auth sufficient pam_tid.so
Guarda el archivo. La proxima vez que uses sudo en Terminal, se te solicitara Touch ID.
Versiones anteriores de macOS
En versiones anteriores a Sonoma, edita la configuracion PAM principal de sudo:
sudo nano /etc/pam.d/sudo
Agrega auth sufficient pam_tid.so como primera linea:
auth sufficient pam_tid.so
auth sufficient pam_smartcard.so
auth required pam_opendirectory.so
account required pam_permit.so
password required pam_deny.so
session required pam_permit.so
Nota: En versiones anteriores de macOS, las actualizaciones del sistema pueden sobrescribir /etc/pam.d/sudo y necesitaras volver a agregar la linea de Touch ID. El enfoque sudo_local en Sonoma persiste entre actualizaciones.
Touch ID en iTerm2 y terminales de terceros
Algunos emuladores de terminal pueden no soportar Touch ID para sudo por defecto. En iTerm2:
- Ve a Preferences > Advanced
- Busca “Allow sessions to survive logging out and back in”
- Establece en No
Esto asegura que la sesion PAM se pase correctamente para Touch ID.
Consideraciones de seguridad especificas de macOS
System Integrity Protection (SIP)
macOS tiene System Integrity Protection habilitado por defecto. Incluso con acceso sudo/root, ciertos directorios y operaciones estan protegidos:
/System,/usr(excepto/usr/local) y/sbinson de solo lectura- No puedes modificar binarios del sistema o extensiones del kernel
- Ciertos procesos del sistema no pueden ser adjuntados o modificados
Para verificar el estado de SIP:
csrutil status
No deshabilites SIP a menos que tengas una necesidad especifica y temporal y entiendas las implicaciones de seguridad.
Gatekeeper y notarizacion
Ejecutar software no firmado o no notarizado puede requerir pasos adicionales incluso con sudo:
# Remove quarantine attribute from a downloaded app
sudo xattr -r -d com.apple.quarantine /Applications/SomeApp.app
# Allow apps from identified developers
sudo spctl --master-enable
La cuenta de usuario root
macOS tiene una cuenta de usuario root que esta deshabilitada por defecto. Puedes habilitarla, pero generalmente no se recomienda:
Para habilitar (no recomendado):
- Ve a Ajustes del Sistema > Usuarios y Grupos
- Haz clic en Editar junto a Servidor de cuentas de red (o abre Utilidad de Directorios)
- Ve al menu Edicion > Activar usuario root
- Establece una contrasena fuerte
Es mas seguro usar sudo que habilitar e iniciar sesion como root. Con sudo, tienes un registro de auditoria de que usuario ejecuto que comando privilegiado.
Gestion de usuarios administradores
Verificar pertenencia al grupo admin
# Check if a user is in the admin group
dseditgroup -o checkmember -m username admin
# List all admin users
dscl . -read /Groups/admin GroupMembership
Otorgar acceso de administrador
A traves de Ajustes del Sistema:
- Abre Ajustes del Sistema > Usuarios y Grupos
- Haz clic en el boton de informacion (i) junto a la cuenta de usuario
- Activa Permitir al usuario administrar este equipo
A traves de la linea de comandos:
# Add a user to the admin group
sudo dseditgroup -o edit -a username -t user admin
# Remove a user from the admin group
sudo dseditgroup -o edit -d username -t user admin
Resumen
El comando sudo es la forma estandar de ejecutar comandos con privilegios elevados en macOS. Usa sudo para comandos individuales y sudo -s o sudo -i para shells interactivos de root. Configura el archivo sudoers con visudo para reglas de acceso personalizadas, y habilita Touch ID para sudo en Macs compatibles editando /etc/pam.d/sudo_local. Recuerda que System Integrity Protection de macOS limita lo que incluso root puede hacer, lo cual es por diseno para seguridad. Siempre prefiere sudo sobre habilitar la cuenta root, ya que proporciona responsabilidad y puede configurarse con permisos granulares.