Python – Criando senhas criptografadas para usuários Linux

PythonCryptYoctoProject_cleitonbueno.com

A um tempo atras precisei implementar uma receita do Yocto Project onde alguns usuários deveriam ser criados, porém enfrentei dois problemas.

1) Teria que criar algumas senhas e criptografar elas e como eram usuários Unix teria que ser no formato “compativel” com /etc/shadow

2) Pode ser que o operador pude-se adicionar a senha ou alterar sem criar usuário e/ou executar um passwd

Sem muito esforço já havia utilizado a crypt.h em C e nativamente o Python possui o modulo crypt, deve-se atentar sobre as versões Python 2.6, 2.7, 3.2 e Python 3.3 ou superior, pois na versão <= 3.2 existe uma implementação e na versão superior a 3.2 possui a mesma porém com alguns adendos, da implementação do crypt usando Python 2.6, 2.7 ou 3.2 irá funcionar nas versões mais nova o contrario não.

Olhe nos links abaixo a diferença.

https://docs.python.org/2/library/crypt.html

https://docs.python.org/3.3/library/crypt.html

Vamos ao primeiro exemplo básico e já funcional:

Executando o script acima e para a senha 123456:

Ok, bateu, mas que magia negra é aquele “$6$SalG4ndo$“? Vamos ver agora.

Primeiro que não foi de primeira que cheguei no hash que esperava, e segundo que houve uma analise necessária para obter os parâmetros corretos para gerar o hash correto para o /etc/shadow em uso que pode variar e deve-se atentar aos 3 itens a seguir.

1) Verificar no seu Linux qual o método de encriptação configurado, pode obter facilmente com o comando abaixo:

2)  Eu não comentei do crypt do Linux? Vamos ver este cara que é a base para entendermos o crypt do Python

Eu cortei boa parte do man e peguei apenas o que analisei para entender do que precisaria. Pode ver completo no link a seguir.

http://linux.die.net/man/3/crypt

3) Precisaria então algo assim no crypt do Python:

Você pode ser mais hardcore e fazer direto no terminal com Python, usando o poder/facilidade do Python para isso:

Então os métodos disponíveis e mais usados são:

$1 : MD5

$5 : SHA256

$6 : SHA512

$salt : String para embaralhar

Eu nunca usei “salt” como string, alguns casos gerei randomicamente, adaptei nosso primeiro exemplo para o a seguir onde a string salt é gerada randomicamente com 16 caracteres e estou usando encode base-64 ([A-Za-z0-9], “/” e “+”), pode usar outros modos de encode como hex para hexadecimal, e logo em seguida eu fatio do 2º ao 9º caractere ficando com 8 caracteres e adiciono $6$ e $ ao final da string.

Executando:

E assim ficou o script dentro da distribuição que gerei com Yocto Project e que também pode ser chamada para as senhas dos usuários já criados e que pode ser utilizado para qualquer Linux.

Espero que tenham gostado, futuramente em um artigo de Yocto Project vou mostrar como adicionar um usuário e poder já inserir esta senha criada em uma receita.

Até a próxima!

Referências

https://docs.python.org/2/library/crypt.html

https://docs.python.org/3.3/library/crypt.html

http://linux.die.net/man/3/crypt

http://cleitonbueno.com/yocto-project-introducao/

http://www.gnu.org/software/libc/manual/html_node/crypt.html

Share Button

CC BY-NC-SA 4.0 Python – Criando senhas criptografadas para usuários Linux by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.