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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top