sudo.sh¶
Funções para gerenciamento de privilégios de superusuário com bypass inteligente para operações somente leitura.
Visão Geral¶
Este módulo fornece utilitários para gerenciar privilégios sudo de forma inteligente, incluindo:
- ✅ Verificação de privilégios root
- ✅ Solicitação de autenticação sudo quando necessário
- ✅ Bypass automático para comandos de ajuda e informação
- ✅ Lista centralizada de argumentos que não requerem sudo
Funções¶
check_sudo()¶
Verifica se o script está sendo executado como root.
Retorno:
0- Executando como root1- Não está executando como root (imprime aviso)
Uso:
should_bypass_sudo()¶
Verifica se algum argumento permite bypass da verificação de sudo. Útil para permitir que comandos de ajuda, versão e informações sejam executados sem sudo, mesmo quando o comando principal requer privilégios elevados.
Argumentos de Bypass (Built-in):
-h,--help,help- Comandos de ajuda-v,--version,version- Informações de versão--info- Informações do software--get-current-version- Obter versão instalada--get-latest-version- Obter versão mais recente--check-installation- Verificar instalação
Parâmetros:
$@- Todos os argumentos do comando
Retorno:
0- Bypass permitido (operação somente leitura detectada)1- Sudo deve ser requerido (nenhum argumento de bypass encontrado)
Uso:
if should_bypass_sudo "$@"; then
echo "Operação somente leitura, sudo não necessário"
else
echo "Operação requer sudo"
fi
Adicionando Novos Argumentos de Bypass:
Para adicionar novos argumentos que não requerem sudo, edite o array bypass_args na função:
required_sudo()¶
Garante privilégios sudo ou sai com erro. Agora com bypass automático para operações somente leitura.
Comportamento:
- Verifica se algum argumento permite bypass (
should_bypass_sudo) - Se bypass detectado: retorna sem solicitar sudo
- Se já é root: não faz nada
- Se não é root: pede senha sudo
- Se falhar: sai com exit 1
Parâmetros:
$@- Argumentos do comando (verificados para bypass)
Uso Básico:
#!/bin/bash
source "$LIB_DIR/sudo.sh"
# Garante que temos sudo (mas permite --help sem sudo)
required_sudo "$@"
# Aqui já temos sudo garantido (exceto em modo help)
apt-get update
Exemplo com Bypass:
# Este comando NÃO pedirá sudo (--help está na lista de bypass)
susa setup docker --help
# Este comando PEDIRÁ sudo (operação de instalação)
susa setup docker
Exemplos Práticos¶
Exemplo 1: Comando com Sudo e Bypass¶
#!/bin/bash
source "$LIB_DIR/sudo.sh"
source "$LIB_DIR/logger.sh"
show_help() {
echo "Uso: comando [opções]"
echo " -h, --help Mostra ajuda"
}
# Passa argumentos para verificação de bypass
required_sudo "$@"
# Se chegou aqui e não é help, temos sudo
log_info "Instalando pacotes..."
apt-get install package
Exemplo 2: Verificação Condicional¶
#!/bin/bash
source "$LIB_DIR/sudo.sh"
# Verifica manualmente se precisa de sudo
if ! should_bypass_sudo "$@"; then
if ! check_sudo; then
log_warning "Este comando requer sudo"
required_sudo "$@"
fi
fi
# Continua com a execução...
Exemplo 3: Script Completo de Instalação¶
#!/bin/bash
source "$LIB_DIR/sudo.sh"
source "$LIB_DIR/logger.sh"
show_help() {
log_output "Ajuda do comando..."
exit 0
}
main() {
# Parse argumentos
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help)
show_help
;;
*)
shift
;;
esac
done
# Garante sudo (mas help já foi tratado acima)
required_sudo "$@"
log_info "Instalando software..."
apt-get install software
}
main "$@"
Integração com command.json¶
Quando um comando tem "sudo": true no command.json, o CLI automaticamente chama required_sudo "$@" antes de executar o script, mas permite bypass para argumentos de ajuda.
Boas Práticas¶
- ✅ Sempre passe
"$@"pararequired_sudopara habilitar bypass - ✅ Use no início de comandos que modificam o sistema
- ✅ Combine com campo
sudo: trueno command.json - ✅ Informe o usuário antes de pedir sudo (já feito automaticamente)
- ✅ Permita comandos de ajuda sem sudo (automático via bypass)
- ✅ Adicione argumentos customizados de bypass quando necessário
Argumentos de Bypass Padrão¶
A lista completa de argumentos que não requerem sudo:
| Argumento | Descrição |
|---|---|
-h, --help, help |
Exibe ajuda do comando |
-v, --version, version |
Mostra versão |
--info |
Informações do software |
--get-current-version |
Versão instalada |
--get-latest-version |
Versão disponível |
--check-installation |
Verifica instalação |