A falta típica de acesso ao hash de senha no arquivo de sombra pode tornar essa solicitação problemática para um programa userland aleatório usar o banco de dados de senha do sistema, como sudo
e chsh
e eles tendem a ter o bit setuid definido neles para que eles sejam executados como root
e possam acessar o arquivo shadow.
[jdoe@centos ~]$ id -u
1001
[jdoe@centos ~]$ perl -E 'say for getpwuid(1001)'
jdoe
x
1001
1001
/home/jdoe
/bin/bash
[jdoe@centos ~]$ sudo perl -E 'say for getpwuid(1001)'
jdoe
$6$P1jejm1i$bo02c/...
1001
1001
/home/jdoe
/bin/bash
[jdoe@centos ~]$
Uma vez que um programa pode obter o hash de senha para um usuário (seja do banco de dados do sistema ou de alguma outra fonte, é o $6$P1jejm1i$bo02c/...
bit redigido na saída acima), uma chamada tradicional crypt(3)
deve ser suficiente para verificar a senha .
Um programa de prompt de senha também pode evitar os core dumps, bloquear a própria memória, varrer vários bits de memória e ignorar vários sinais, entre verificações ainda mais rigorosas se executar setuid, além de não repetir a senha. O OpenBSD facilita algumas dessas etapas via readpassphrase(3)
, embora outros sistemas operacionais não estejam com getpass(3)
sendo marcado como LEGACY ...