Estou trabalhando em um script que executa um comando como sudo e repete uma linha de texto SOMENTE se meus privilégios de sudo expirarem, portanto, somente se a execução de um comando com sudo exigir que meu usuário (não root) digite sua senha novamente.
Como verifico isso? Lembre-se de que $(id -u)
mesmo quando estiver executando como sudo retornará meu ID de usuário atual, para que não seja possível verificar se ele corresponde a 0 ...
Eu preciso de um método que verifique isso silenciosamente.
sudo -n true
e realmente usá-los": A documentação é um pouco vaga sobre esse ponto, mas acho que executar umsudo
comando, mesmo que apenassudo -n true
, redefinirá o tempo limite relógio. De qualquer maneira,-v
está explicitamente documentado como o faz esudo -n -v
provavelmente é mais apropriado do quesudo -n true
para esse fim.hostname sudo[8870]: username : a password is required ; TTY=pts/0 ; PWD=/home/username ; USER=root ; COMMAND=/usr/bin/true
. Se você usá-lo no prompt do bash, por exemplo, isso resultará em muitas mensagens de erro.Corre:
Se os seus privilégios sudo expirarem, isso será encerrado com um código de saída 1 e será gerado:
Se você tiver credenciais em cache válidas, esse comando será bem-sucedido e não produzirá nada.
Portanto, para juntar tudo, aqui está um scriptlet que verificará silenciosamente se você possui credenciais em cache válidas:
Como outras respostas / comentários mencionados, a
-v
opção ("validar") para sudo renova silenciosamente as credenciais em cache se houver alguma solicitação de autenticação para gerar credenciais em cache, e a-n
opção ("não interativa") impede que o sudo gere quaisquer avisos interativos, como o prompt de autenticação.fonte
sudo -nv
funciona bem, mas polui os logs do sistema com erros sudo e informações de autenticação do pam. Eu precisava verificar os privilégios do sudo para o meu prompt do bash, por isso foi executado com bastante frequência e meus logs consistiam quase apenas desse ruído.É possível analisar o arquivo sudo timestamp diretamente - escrevi um pequeno utilitário C para ele:
fonte