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:
- Va para Preferences > Advanced
- Pesquise “Allow sessions to survive logging out and back in”
- 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/sbinsao 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):
- Va para Ajustes do Sistema > Usuarios e Grupos
- Clique em Editar ao lado do Servidor de Conta de Rede (ou abra o Utilitario de Diretorio)
- Va para o menu Editar > Ativar Usuario Root
- 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:
- Abra Ajustes do Sistema > Usuarios e Grupos
- Clique no botao de informacao (i) ao lado da conta de usuario
- 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.