Como inserir / validar senha sudo sem re-prompt?

1

Para os propósitos de um script bash, preciso solicitar ao usuário a senha sudo , se ainda não tiver sido inserida (e se o usuário não tiver sudo privileges no momento em que executar o script ).

Primeiro, solicito a senha com dialog senha bog e, em seguida, alimente-a com sudo , assim:

SUDOPWD=$(dialog --title "Password" --clear --passwordbox "Enter your sudo password" 10 30  2>&1 > /dev/tty)

echo ${SUDOPWD} | sudo -Sn -v

Mas, infelizmente, isso não funciona! Aparentemente, -S (leia a senha de stdin ) e -n (não-interativo sudo ) não são compatíveis! Com -n presente, a senha sendo alimentada para sudo é ignorada (e, portanto, nenhuma elevação ocorre) e sem ela sudo solicita a reentrada se uma senha incorreta foi digitada.

Existe alguma maneira de validar sudo senha sem solicitar novamente se não é a correta?

Inevitavelmente, alguém indicará que não se deve reinventar a roda e usar apenas o recurso fornecido por sudo , ou que alimentar uma senha para sudo por meio de um cano tem implicações de segurança. Estou ciente desses fatores, e ainda gostaria de fazer o que estou delineando acima, é possível. Eu também não quero digitar os comandos em /etc/sudoers , recompilar sudo (como o script deve ser um pouco portátil), ou desabilitar sudo password prompt em geral (apenas neste script).

Estou trabalhando nisso no Ubuntu 16.04.

    
por Ville 18.02.2017 / 06:04

1 resposta

2

Você pode determinar se o usuário já está autenticado com sudo -vn 2>/dev/null

Se não estiverem, você pode usar o seguinte para solicitar uma senha e enviá-la para sudo .

printf '%s\n' "$(dialog --output-fd 1 --passwordbox "Enter password:" 10 30)" | \
sudo -Svp ''
  • --output-fd 1 informa dialog para saída para STDOUT
  • printf é usado para acrescentar uma nova linha à entrada, que é necessária para sudo -S
  • sudo -p '' usa '' como a mensagem de prompt de senha, ocultando-a

Se você é legal em armazenar sua saída em uma variável, você pode apenas printf '%s\n' "${SUDOPWD}" e isso deve ser feito

    
por 08.04.2018 / 02:16