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
.