A maioria dos sistemas Unix modernos usam o PAM para lidar com a autenticação. O módulo pam_unix é aquele que faz autenticação de senha em relação a /etc/password e /etc/shadow .
No entanto, você não deve reinventar a roda. Pedir a senha do usuário e executá-la como root é uma configuração básica do sudo , a maneira padrão para elevar os privilégios. Observe que elevar corretamente os privilégios é complicado: você se lembra de limpar todas as variáveis de ambiente que poderiam afetar seu programa? Sudo se esforça para fazê-lo com segurança.
Para permitir que o usuário alice execute /usr/local/bin/myprogram como root com qualquer argumento de sua escolha após digitar sua senha, use a seguinte linha no arquivo sudoers (o arquivo de configuração sudo):
alice ALL = (root) /usr/local/bin/myprogram
Para editar o arquivo sudoers , execute o comando visudo .
Alice terá que executar sudo myprogram . Se você quiser que ela seja capaz de digitar apenas o nome do programa, oculte-o em um script de wrapper. Mas observe que Alice pode preferir executar algo como gksudo myprogram para obter um prompt da GUI.
Muitas variações são possíveis, incluindo proibir o chamador de passar argumentos:
alice ALL = (root) /usr/local/bin/myprogram ""
ou aplicando a entrada a um grupo:
%mygroup ALL = (root) /usr/local/bin/myprogram
Se o seu programa precisar saber quem o invocou, o sudo o disponibilizará nas variáveis de ambiente SUDO_UID e SUDO_USER .