Além da resposta de Gilles ao aspecto Can I block non-interactive sudo invocation?
de sua pergunta, eu sugeriria um trabalho -para este elemento específico da sua situação:
I don't like typing the password for sudo so I disabled it
e
Now I have a bad side effect that any shell script I run can silently execute sudo on my behalf.
Se a sua situação é que você normalmente sudo
um monte de vários comandos, mas você se encontra executando scripts que executam silenciosamente o sudo onde você não é solicitado a digitar uma senha para perceber que coisas do nível de raiz estão acontecendo, você poderia:
- Retire a opção NOPASSWD
- Estenda o tempo limite do registro de data e hora para além do estoque 5 minutos para ter um período de tempo maior
- Mate o timestamp do sudo antes de executar um script não confiável
Você já sabe como editar sudoers para a opção NOPASSWD
.
Para estender o timestamp_timeout
no arquivo sudoers, defina-o como um valor muito alto ou um valor negativo. Fragmentos relevantes da página de manual para esse parâmetro:
timestamp_timeout
Number of minutes that can elapse before sudo will ask for a passwd again.
The default is 5.
If set to a value less than 0 the user's time stamp will not expire until the system is rebooted.
Quando você estiver prestes a executar um script do qual não tem certeza, basta executar sudo -k
para "matar" o timestamp:
-k
When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required.
Se você executar um script e encontrar o prompt de sudo para sua senha, saberá que sudo
foi invocado e poderá interromper o script se desejar.
Como um aparte aqui, recomendo definir o parâmetro passprompt para incluir o texto sudo
, como:
Defaults passprompt="[sudo] password for %u:"
... para que seja óbvio se / quando o sudo estiver solicitando sua senha (em comparação com qualquer outra ferramenta).