Gerar manualmente a senha para / etc / shadow

94

Eu preciso editar manualmente o /etc/shadow para alterar a senha do root dentro de uma imagem da máquina virtual.

Existe uma ferramenta de linha de comando que usa uma senha e gera um hash de senha compatível com /etc/shadow no padrão?

    
por Lorin Hochstein 30.06.2013 / 19:41

8 respostas

106

Você pode usar os seguintes comandos para o mesmo:

Método 1

openssl passwd -1 -salt xyz  yourpass

Método 2

makepasswd --clearfrom=- --crypt-md5 <<< YourPass

Método 3

Como @tink sugeriu, podemos atualizar a senha usando chpasswd usando:

echo "username:password" | chpasswd 

Ou você pode usar a senha criptografada com chpasswd . Primeiro, gere-o usando isto:

perl -e 'print crypt("YourPasswd", "salt"),"\n"'

Mais tarde, você pode usar a senha gerada para atualizar:

echo "username:encryptedPassWd"  | chpasswd -e

Esta senha criptografada que podemos usar para criar um novo usuário com senha, por exemplo:

useradd -p 'encryptedPassWd'  username

Método 4

echo -e "md5crypt\npassword" | grub | grep -o "\.*"

Método 5

perl -e 'use Crypt::PasswdMD5; print unix_md5_crypt("Password", "Salt"),"\n"'

Este é usado por makepasswd , mas permite mais versatilidade (como sal personalizado ou vazio).

    
por 30.06.2013 / 20:07
30

No Ubuntu 12.04, há o mkpasswd (do pacote whois):   Parte frontal com excesso de características da cripta (3)

mkpasswd  -m sha-512 -S saltsalt -s <<< YourPass

Onde:

  • -m = Calcule a senha usando o método TYPE. Se TYPE for ajuda, os métodos disponíveis serão impressos.
  • -S = sal usado.

Por exemplo,

$ mkpasswd -m help

-s = Read password from stdin
    
por 27.04.2015 / 16:38
12

Esta solução tem os seguintes benefícios:

  • Nada adicional para instalar
  • Não armazena a senha no seu histórico de shell
  • Gera um sal aleatório para você
  • Utiliza um algoritmo hash moderno e robusto, o SHA-512
  • Solicita novamente a senha para evitar erros.

    $ python3 -c "from getpass import getpass; from crypt import *; \
        p=getpass(); print('\n'+crypt(p, METHOD_SHA512)) \
        if p==getpass('Please repeat: ') else print('\nFailed repeating.')"
    

Referências

por 05.02.2016 / 19:51
4

Nenhum dos métodos atuais é aceitável para mim - Eles passam a senha na linha de comando (que acaba no histórico do meu shell), exigem a instalação de utilitários adicionais ( python3 , makepasswd ), usam muito os sais codificados ou usar antigas técnicas de hash.

Esse método geraria hashes SHA-512 após solicitar a senha e usaria um sal aleatório.

Um método que utiliza o Python 2 sem nenhuma biblioteca não padrão:

python2 -c 'import crypt, getpass,os,base64; print crypt.crypt(getpass.getpass(), "$6$"+base64.b64encode(os.urandom(16))+"$")'

Para fazer isso sem um prompt: (Isso deixará sua senha no histórico de comandos)

python2 -c 'import crypt, os,base64; print crypt.crypt("MyPassword", "$6$"+base64.b64encode(os.urandom(16))+"$")'
    
por 22.12.2017 / 14:43
3

Para aqueles sem sistemas baseados em Debian. O Python3 funciona igualmente bem.

python3 -c 'import crypt; print(crypt.crypt("test"))'

OBSERVAÇÃO: A string "test" é a senha que estamos gerando como uma string criptografada.

    
por 05.02.2016 / 02:47
1

O par openssl e chpasswd -e não funcionou no meu caso no RHEL6. A combinação do comando "openssl passwd" e "usermod -p" funcionou.

Gere o valor hash da senha junto com o valor salt.

$ openssl passwd -1 -salt 5RPVAd clear-text-passwd43

$ 1 $ 5RPVAd $ vgsoSANybLDepv2ETcUH7.

Em seguida, copie a string criptografada para usermod. Certifique-se de envolvê-lo com aspas simples.

$ usermod -p '$ 1 $ 5RPVAd $ vgsoSANybLDepv2ETcUH7.' raiz

Faça check-out no arquivo shadow.

$ grep root / etc / shadow

raiz: $ 1 $ 5RPVAd $ vgsoSANybLDepv2ETcUH7.: 17774: 0: 99999: 7 :::

    
por 31.08.2018 / 23:53
1

Expandindo um pouco as críticas de u150825 e Gert van den Berg, encontrei-me precisando de algo relativamente flexível para diferentes situações com diferentes sistemas de automação. Decidi adicionar minha pequena biblioteca de scripts úteis e escrever isso. Ele usa apenas bibliotecas nativas do python 2.7+ e também funciona no python3.

Você pode pegá-lo aqui se quiser. É tão fácil abandonar isso em seu ambiente se você precisar usá-lo muito, http hospedado ou qualquer outra coisa, e você pode executá-lo em qualquer plataforma usando qualquer que seja o interpretador python padrão que você tenha disponível para você, confiavelmente contando com ele trabalhando.

O padrão é solicitar o uso de getpass com prompts em stderr (permitindo a captura fácil de stdout), mas se você canalizar uma string para ela, ela apenas obterá stdin. Dependendo de como você está lidando com isso, ele pode não estar aparecendo no histórico de comandos, portanto, apenas esteja ciente do que é que você está trabalhando. Eu gosto de ter uma ferramenta flexível que se comportará de uma maneira esperada, ao invés de ter que depender de pacotes ou python, abrindo caminho para a vitória de 10 formas diferentes.

    
por 03.09.2018 / 22:46
0

Ainda outro método para gerar senhas, é usar a ferramenta openssl .

Gerar senhas MD5

openssl passwd -1 -salt SaltSalt SecretPassword
# output: $1$SaltSalt$FSYmvnuDuSP883uWgYBXW/

Gerar senhas de DES

openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2
    
por 30.05.2016 / 13:19