Sudo - existe um comando para verificar se tenho sudo e/ou quanto tempo resta?

Sudo - existe um comando para verificar se tenho sudo e/ou quanto tempo resta?

(Originalmente publicado no Stack Overflow). Eles sugeriram que eu tentasse aqui. Aqui está a postagem original:

Veja título. Quero um comando que me permita consultar o sudo. Idealmente, retornaria sucesso se eu ainda tivesse o sudo e falso se o sudo expirou. Obter o tempo restante também pode ser útil (embora, se eu estivesse preocupado, pudesse apenas sudo -vrevalidar). Ah, e não deveria ser necessário solicitar uma senha.

A coisa mais próxima que encontrei é sudo -n true, mas a -nopção só está presente na minha máquina Centos 5 no trabalho. -nfalha se for necessário solicitar uma senha. Existe alguma outra maneira de obter essa funcionalidade? Suponha que eu não tenha root em todas as máquinas com as quais trabalho, então não posso instalar novas versões do sudo ao meu gosto.

Pelo que vale a pena, estou fazendo isso para que meu prompt indique o status do sudo. Gosto de saber quais terminais são ativamente compatíveis com sudo. Também tenho um prompt que muda de cor quando sou root, mas não uso root com muita frequência, então é de uso limitado.

Responder1

A -nopção está disponível em versões mais recentes do sudo, mas como você afirmou, não é uma opção. Não há uma maneira real de fazer o que você está procurando, apenas tentar sudoe ver se ele retorna com uma solicitação de senha. Se sua preocupação é desejar uma indicação visual, por que não começar a fazer sudo /bin/bashpara iniciar uma sessão root bash? Observe que isso é inseguro, mas também é um tanto inseguro se alguém perceber suas alterações imediatas no sudo.

Responder2

Eu sei que esta é uma pergunta muito antiga, mas aqui está o que fiz em um script hoje. Supondo que ser sudo significa ser capaz de executar qualquer comando como sudo (ou, pelo menos, tempo de atividade)

CAN_I_RUN_SUDO=$(sudo -n tempo de atividade 2>&1 | grep "carregar" | wc -l)
se [${CAN_I_RUN_SUDO} -gt 0]
então
    echo "Posso executar o comando sudo"
outro
    echo "Não consigo executar o comando Sudo"
fi

Porém, se o seu usuário tiver restrições no visudo, esta verificação não será suficiente, por exemplo, se o seu usuário puder usar apenas o comando make. Tente executar algum comando que você sabe que funcionará.

Você pode adicionar o filtro grep -v Sorry, por exemplo:

$(sudo -n uptime 2>&1 | grep "load" | grep -v Sorry | wc -l)

para evitar esses falsos positivos.

Responder3

Para simplificar a resposta dada por @wags007

if sudo -n true
then
  sudo id
else
  echo "sorry, but did not want to bother you"
fi

No entanto, se na suahttps://www.sudo.ws/man/1.8.15/sudoers.man.htmlconfiguração que você possui defaults mail_badpass, será enviado um e-mail para cada teste que resultar em falso (seria solicitado). Para evitar esse incômodo, altere essa parte do seu arquivo sudoers para

Defaults       mail_badpass
Defaults!      /bin/true !mail_badpass

Como resultado, e-mails de alerta de segurança são enviados para todos os comandos, exceto /bin/true. Bem, sim, agora alguém pode tentar usar uma senha de força bruta ligando para sudo trueum número ilimitado de vezes sem que nenhum email de alerta de segurança seja enviado.

Nota: Sempre use visudoseu editor favorito para editar o arquivo sudoers. Caso contrário, você corre o risco de ser bloqueado.

Responder4

De acordo com o manual do sudo, a sessão do sudo é determinada de acordo com o arquivo de carimbo de data/hora ( /usr/lib/sudo/<username>), então você pode descobrir quanto tempo resta verificando a data/hora do arquivo de carimbo de data/hora. No entanto, no meu sistema, o arquivo de carimbo de data e hora é na verdade um diretório, e há três arquivos com conteúdo enigmático neles (e também alguns carimbos de data e hora estranhos, mas /usr/lib/sudo/<username>parecia ter um carimbo de data e hora que coincidia com o momento em que dei minha senha ao sudo . Acho que /usr/lib/sudo/<username>/0tem o carimbo de data/hora da sudoexecução mais recente.

informação relacionada