Não execute um comando com sudo, a menos que esteja configurado como livre de senha

0

Não tenho certeza se sudo suporta isso, quero executar um comando, apenas se esse comando estiver configurado como NOPASSWD, ou seja, se o comando puder ser executado sem senha, execute-o; Caso contrário, saia diretamente.

Até agora, a única opção parece listar todos os comandos disponíveis com sudo -l e analisar manualmente a saída, que parecia suja.

Existem alternativas?

    
por daisy 31.03.2013 / 08:20

1 resposta

3

Não é muito bonito, mas curta a análise de sudo -l enquanto você está fazendo. Eu não sei uma alternativa: simplesmente execute seu comando com a opção -n :

The -n (non-interactive) option prevents sudo from prompting the user for a password. If a password is required for the command to run, sudo will display an error message and exit.

Exemplo:

me$ sudo -l 
User me may run the following commands on this host:
    (ALL) NOPASSWD: /usr/bin/vim
    (ALL) /usr/bin/nano
me$ sudo -n nano /etc/hosts
sudo: a password is required
me$ echo $?
1
me$ sudo -n vim /etc/hosts
# :q
me$ echo $?
0

Problema com isto é que você não pode dizer diretamente do código de saída se sudo falhou porque exigiu uma senha, ou se o comando que você executou falhou. Então você precisará analisar a saída. (Felizmente a mensagem de erro é estática, então isso não deve ser muito difícil. Cuidado com a localização.)

    
por 31.03.2013 / 08:59

Tags