Evita que o sudo solicite a senha ao executar o comando não permitido

14

Eu concordei com uma permissão de grupo para executar certos comandos sem senha via sudo. Quando um dos usuários faz um erro de digitação ou executa o comando errado, o sistema solicita a senha e, em seguida, obtém um erro. Isso é confuso para o usuário, portanto, gostaria de exibir apenas um erro em vez de solicitar uma senha. Isso é possível?

Aqui está um exemplo do meu arquivo sudoers:

%mygroup ALL=(ALL) NOPASSWD:/usr/local/bin/myscript.sh *

Exemplo quando eles executam o script errado:

# sudo /usr/local/bin/otherscript.sh
[sudo] password for user:
Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>.

Saída desejada:

Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>. Please check the command and try again.

Observe a falta de solicitação de senha.

Meu google-fu falhou comigo e só retorna resultados ao não pedir uma senha quando o usuário é autorizado a executar o comando.

    
por user184982 16.08.2016 / 18:32

5 respostas

23

De uma leitura rápida de sudo(8)

   -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.

E para os que duvidam:

# grep jdoe /etc/sudoers
jdoe    ALL=(ALL) NOPASSWD: /bin/echo
#

Testado desta forma:

% sudo echo allowed
allowed
% sudo -n ed             
sudo: a password is required
% sudo ed               

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:

Assim, um alias para sudo para essas pessoas provavelmente faria o truque para impedir o prompt da senha. Agora, por que isso requer a compilação personalizada sudo , não sei, acabei de ler o manual.

    
por 16.08.2016 / 18:54
7

Uma coisa que funcionou para mim, (Sudo versão 1.8.17p1), mas satisfaz apenas parte do seu problema, é definir o número de tentativas de senha para 0.

Defaults:%mygroup passwd_tries = 0

Isso faz com que o sudo saia com o código 1 quando qualquer comando que exija uma senha for tentado. No entanto, não produz nenhum tipo de mensagem de erro.

    
por 16.08.2016 / 19:36
2

Você não pode.

Não há como saber quem você é até que você tenha autenticado e, por padrão, você não pode autenticar sem uma senha.

Você pode alterar a autenticação para usar chaves USB, scanners de impressão digital, autenticação de voz, reconhecimento de rosto ou um monte de outras coisas, mas o ponto é o mesmo.

Você não pode autenticar, sem autenticar AND antes de autenticar o sudo, não tem nenhum negócio informando o que você pode ou não executar.

    
por 16.08.2016 / 18:55
2

@StrongBad fez um comentário que merece ser uma resposta:

Acho que a melhor solução seria escrever um script de wrapper que sempre chama sudo com os parâmetros corretos. (Incluindo -n )

O script wrapper pode fazer a análise de argumentos, etc., para que o script sudo chamado seja o menor possível e, portanto, menos provável de ter bugs.

    
por 17.08.2016 / 09:51
1

Isso não é possível. A única maneira é alterar o código-fonte e compilar seu próprio fork de sudo

    
por 16.08.2016 / 18:49

Tags