
(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 -v
revalidar). Ah, e não deveria ser necessário solicitar uma senha.
A coisa mais próxima que encontrei é sudo -n true
, mas a -n
opção só está presente na minha máquina Centos 5 no trabalho. -n
falha 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 -n
opçã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 sudo
e 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/bash
para 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 true
um número ilimitado de vezes sem que nenhum email de alerta de segurança seja enviado.
Nota: Sempre use visudo
seu 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>/0
tem o carimbo de data/hora da sudo
execução mais recente.