Quero verificar, na linha de comando do linux, se uma senha de texto não criptografado é a mesma de uma senha criptografada em um arquivo / etc / shadow
(Eu preciso disso para autenticar usuários da Web. Estou executando um linux incorporado.)
Eu tenho acesso ao próprio arquivo / etc / shadow.
linux
command-line
password
embedded
michelemarcon
fonte
fonte
Respostas:
Você pode extrair facilmente a senha criptografada com o awk. Você precisa extrair o prefixo
$algorithm$salt$
(supondo que este sistema não esteja usando o DES tradicional, que é fortemente reprovado, porque pode ser forçado a força hoje em dia).Para verificação de senha, a função C subjacente é
crypt
, mas não há comando shell padrão para acessá-lo.Na linha de comando, você pode usar um liner Perl para chamar
crypt
a senha.Como isso não pode ser feito em ferramentas de shell puro, se você tiver o Perl disponível, faça tudo isso no Perl. (Ou Python, Ruby, ... o que você tiver disponível que possa chamar a
crypt
função.) Aviso, código não testado.Em um sistema incorporado sem Perl, eu usaria um pequeno programa C dedicado. Atenção, digitado diretamente no navegador, eu nem tentei compilar. Isso serve para ilustrar as etapas necessárias, não como uma implementação robusta!
Uma abordagem diferente é usar um programa existente como
su
oulogin
. De fato, se você puder, seria ideal organizar o aplicativo da Web para executar o que for necessáriosu -c somecommand username
. A dificuldade aqui é alimentar a senhasu
; isso requer um terminal. A ferramenta usual para emular um terminal é de esperar , mas é uma grande dependência para um sistema incorporado. Além disso, enquantosu
estiver no BusyBox, muitas vezes é omitido porque muitos de seus usos exigem que o binário do BusyBox seja raiz setuid. Ainda assim, se você puder fazer isso, essa é a abordagem mais robusta do ponto de vista da segurança.fonte
su
abordagem.Dê uma olhada
man 5 shadow
eman 3 crypt
. Com o último, você pode aprender que os hashes de senha/etc/shadow
têm o seguinte formato:onde
id
define o tipo de criptografia e, lendo mais, pode ser um dosDependendo do tipo de hash, você precisa usar a função / ferramenta apropriada para gerar e verificar a senha "manualmente". Se o sistema contiver um
mkpasswd
programa, você poderá usá-lo conforme sugerido aqui . (Você pega o salt do arquivo shadow, se isso não fosse óbvio.) Por exemplo, commd5
senhas:irá gerar a string que deve corresponder à
/etc/shadow
entrada.fonte
mkpasswd
, que eu tive que instalar usandoapt-get install whois
. A linha de comando para a linha de sombra<user>:$6$<salt>$<pwd>:
eramkpasswd -msha-512 <password> <salt>
Houve uma pergunta semelhante no Stack Overflow . O cluelessCoder forneceu um script usando o expect , que você pode ou não ter no seu sistema incorporado.
fonte
Lembre-se de que, supondo que o sistema esteja configurado corretamente, o programa precisará ser executado como root.
Uma solução melhor do que ler o arquivo shadow diretamente e escrever seu próprio código em torno do crypt seria usar apenas as ligações pam.
O squid tarball costumava vir com uma ferramenta CLI simples para verificar nomes de usuário / senhas usando stdio - tão simples de se adaptar ao uso de argumentos - embora a versão que eu hackeava anteriormente não fosse um poster de pin-up para programação estruturada. Um google rápido e parece que as versões mais recentes foram limpas significativamente, mas ainda há algumas que estão lá.
fonte
fonte
line 61: :: syntax error: operand expected (error token is ":")