Rapidamente verificar se as permissões sudo estão disponíveis
Pergunta
Eu quero ser capaz de verificar rapidamente se eu ambos têm acesso sudo e minha senha já está autenticado. Eu não estou preocupado em ter acesso ao sudo especificamente para a operação que estou prestes a realizar, mas isso seria um bônus agradável.
Especificamente o que eu estou tentando usar isso para é um script que eu quero ser executável por uma gama de usuários. Alguns têm acesso ao sudo. Todos sabem a senha de root.
Quando executar o meu script, eu quero que ele permissões de uso do sudo sem solicitar uma senha, se isso é possível, e de outra forma para voltar a cair para pedir o root password (porque eles podem não ter sudo acesso).
Minha primeira tentativa não-trabalho era de desembolsar fora sudo -S true
com STDIN fechados ou ler / dev / null. Mas que pede ainda para a senha e aguarda um par de segundos.
Eu tentei várias outras coisas, incluindo esperando 0.3sec para ver se ele conseguiu de imediato, mas tudo que eu tento extremidades falhando em alguma situação. (E não porque o meu tempo de espera é muito curto.) É difícil descobrir o que se passa, porque eu posso não apenas strace como eu normalmente faria.
Uma coisa que eu sei não funciona é para fechar STDIN ou anexá-lo a um tubo antes de executar sudo -S true
. Eu estava esperando que faria a senha prompt de falhar imediatamente, mas ainda prompts e se comporta de forma estranha. Eu acho que pode querer um terminal.
Solução
Com as versões mais recentes do sudo
há uma opção para essa finalidade:
sudo -n true
Eu uso true
aqui para um não-op, mas você pode usar qualquer comando.
Outras dicas
Eu não sei o que a razão última é para a necessidade de fazer isso, mas acho que talvez você precisa repensar o que quer que a razão principal é. Tentando fazer complicado, coisas incomuns com permissões freqüentemente leva a falhas de segurança.
Mais especificamente, qualquer que seja o script está tentando fazer pode ser mais bem feito com setuid ao invés de sudo. (Eu também tenho que saber por que tantas pessoas têm a senha de root. Sudo está lá especificamente para evitar dar às pessoas a senha de root.)
getent group admin | grep $particular_user
Você pode usar whoami para obter o usuário atual.
Edit: Mas isso não ajudá-lo a descobrir se você ainda está autenticado para fazer tarefas sudo ... Hmm ..
Running
sudo -S true < /dev/null &>/dev/null
parece funcionar, embora atrasa para um segundo antes de falhar.