No macOS, muitas operacoes em nivel de sistema requerem privilegios elevados que sua conta de usuario normal nao possui. O comando sudo (abreviacao de “superuser do”) permite executar comandos com acesso de nivel root a partir do Terminal. Este guia abrange o uso basico e avancado do sudo, o arquivo de configuracao sudoers, a ativacao do Touch ID para autenticacao sudo e consideracoes de seguranca especificas do macOS.

Uso basico do sudo

Executando um unico comando como root

Prefixe qualquer comando com sudo para executa-lo com 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

Quando voce executa sudo pela primeira vez em uma sessao de terminal, o macOS solicita sua senha de usuario. Apos a autenticacao, o sudo lembra suas credenciais por 5 minutos (configuravel), portanto comandos sudo subsequentes dentro dessa janela nao exigem reautenticacao.

Abrindo um shell elevado

Se voce precisa executar varios comandos com 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

Enquanto estiver em um shell root, cada comando e executado com privilegios completos do sistema. Tenha cuidado — nao ha redes de seguranca para comandos como rm -rf.

Executando um comando como outro usuario

# 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 comuns no macOS

Administracao do 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

Operacoes do sistema de arquivos

# 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

Gerenciamento de pacotes e 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 /

Entendendo o arquivo sudoers

O arquivo /etc/sudoers controla quem pode usar sudo e o que pode fazer com ele. No macOS, a configuracao padrao permite que membros do grupo admin executem qualquer comando via sudo.

Visualizando o arquivo sudoers

# Always use visudo to edit sudoers (validates syntax)
sudo visudo

# View without editing
sudo cat /etc/sudoers

Nunca edite /etc/sudoers diretamente com um editor de texto. Sempre use visudo, que valida a sintaxe antes de salvar. Um erro de sintaxe neste arquivo pode bloquear seu acesso ao sudo inteiramente.

Configuracao padrao do sudoers no macOS

A linha principal no arquivo sudoers do macOS e:

%admin  ALL=(ALL) ALL

Isso significa: qualquer membro do grupo admin (%admin) pode executar qualquer comando (ALL) como qualquer usuario (ALL) em qualquer host (ALL).

Adicionando regras personalizadas ao sudoers

Para controle mais granular, adicione regras em /etc/sudoers.d/ em vez de editar o arquivo principal:

# Create a custom sudoers rule file
sudo visudo -f /etc/sudoers.d/custom-rules

Exemplos de regras:

# 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

Alterando o tempo limite do sudo

Por padrao, o sudo lembra sua senha por 5 minutos. Para alterar isso:

sudo visudo

Adicione ou modifique:

Defaults timestamp_timeout=15

Defina como 0 para exigir uma senha toda vez, ou -1 para nunca expirar dentro de uma sessao.

Touch ID para sudo

Em Macs com Touch ID, voce pode autenticar o sudo com sua impressao digital em vez de digitar sua senha.

macOS Sonoma e versoes posteriores

A partir do macOS Sonoma, a Apple fornece um arquivo dedicado para a configuracao do Touch ID para sudo:

# Create or edit the sudo_local file
sudo nano /etc/pam.d/sudo_local

Adicione esta linha:

auth       sufficient     pam_tid.so

Salve o arquivo. Na proxima vez que usar sudo no Terminal, voce sera solicitado com o Touch ID.

Versoes anteriores do macOS

Em versoes anteriores ao Sonoma, edite a configuracao PAM principal do sudo:

sudo nano /etc/pam.d/sudo

Adicione auth sufficient pam_tid.so como primeira linha:

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: Em versoes mais antigas do macOS, atualizacoes do sistema podem sobrescrever /etc/pam.d/sudo e voce precisara adicionar novamente a linha do Touch ID. A abordagem sudo_local no Sonoma persiste entre atualizacoes.

Touch ID no iTerm2 e terminais de terceiros

Alguns emuladores de terminal podem nao suportar Touch ID para sudo por padrao. No iTerm2:

  1. Va para Preferences > Advanced
  2. Pesquise “Allow sessions to survive logging out and back in”
  3. Defina como No

Isso garante que a sessao PAM seja passada corretamente para o Touch ID.

Consideracoes de seguranca especificas do macOS

System Integrity Protection (SIP)

O macOS tem o System Integrity Protection ativado por padrao. Mesmo com acesso sudo/root, certos diretorios e operacoes sao protegidos:

  • /System, /usr (exceto /usr/local) e /sbin sao somente leitura
  • Voce nao pode modificar binarios do sistema ou extensoes do kernel
  • Certos processos do sistema nao podem ser anexados ou modificados

Para verificar o status do SIP:

csrutil status

Nao desative o SIP a menos que tenha uma necessidade especifica e temporaria e compreenda as implicacoes de seguranca.

Gatekeeper e Notarizacao

Executar software nao assinado ou nao notarizado pode exigir etapas adicionais mesmo com 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

A conta de usuario root

O macOS tem uma conta de usuario root que e desativada por padrao. Voce pode ativa-la, mas isso geralmente nao e recomendado:

Para ativar (nao recomendado):

  1. Va para Ajustes do Sistema > Usuarios e Grupos
  2. Clique em Editar ao lado do Servidor de Conta de Rede (ou abra o Utilitario de Diretorio)
  3. Va para o menu Editar > Ativar Usuario Root
  4. Defina uma senha forte

E mais seguro usar sudo do que ativar e fazer login como root. Com sudo, voce tem um rastro de auditoria de qual usuario executou qual comando privilegiado.

Gerenciando usuarios admin

Verificando a associacao ao 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

Concedendo acesso de administrador

Via Ajustes do Sistema:

  1. Abra Ajustes do Sistema > Usuarios e Grupos
  2. Clique no botao de informacao (i) ao lado da conta de usuario
  3. Ative Permitir que o usuario administre este computador

Via linha de comando:

# 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

Resumo

O comando sudo e a maneira padrao de executar comandos com privilegios elevados no macOS. Use sudo para comandos individuais e sudo -s ou sudo -i para shells root interativos. Configure o arquivo sudoers com visudo para regras de acesso personalizadas e ative o Touch ID para sudo em Macs compativeis editando /etc/pam.d/sudo_local. Lembre-se de que o System Integrity Protection do macOS limita o que ate o root pode fazer, o que e intencional para seguranca. Sempre prefira sudo em vez de ativar a conta root, pois fornece responsabilidade e pode ser configurado com permissoes granulares.