Anaconda kickstart e opção rootpw

5

Eu tentei alguns métodos diferentes de gerar uma senha criptografada no SL 6.5, mas nada parece funcionar para mim. Eu não estou encontrando nenhum erro em nenhum dos vários arquivos / var / log / anaconda *, mas eu não consigo logar, então obviamente não está funcionando.

O arquivo original criado automaticamente em /root/anaconda-ks.cfg I usado como modelo ficou assim:

rootpw  --iscrypted $6$...(about 100 characters)
authconfig --enableshadow --passalgo=sha512

Em seguida, tentei openssl passwd -1 , o que me deu:

rootpw  --iscrypted $1$...(about 30 characters)
authconfig --enableshadow --passalgo=sha512

Eu percebi que não era SHA-512, então eu tentei um one-liner do Python que encontrei repetido em alguns lugares :

rootpw  --iscrypted $6...(about 10 characters)
authconfig --enableshadow --passalgo=sha512

Nada funciona; Não consigo fazer login e acabo tendo que redefinir a senha de root no modo de usuário único.

    
por miken32 12.04.2014 / 01:38

4 respostas

5

Certifique-se de que você tem shadow e passalgo = sha512 em uma máquina, defina o root pass como a senha que você quer naquela máquina, pegue-a em / etc / shadow e coloque-a no kickstart. Isso não é aconselhável para uso em produção.

Para fazer isso de forma programática, use a biblioteca de criptografia do idioma escolhido que gera o arquivo de kickstart:

RUBY:

'password'.crypt('$6$' + (Base64.encode64(6.times.map{ Random.rand(256).chr }.join)).strip)

PHP:

crypt ('password', '$6$' . base64_encode (openssl_random_pseudo_bytes(6)));

Perl:

crypt ('password', '$6$' . encode_base64 (join '' => map chr (rand (256)), 0..5))

Python:

crypt.crypt('password', '$6$' + base64.b64encode(os.urandom(6)))

É altamente recomendável que você use um sal aleatório a cada vez, como eu fiz aqui, especialmente se você usar a mesma senha em todos os servidores.

EDITAR : Python 3:

crypt.crypt("password", crypt.mksalt())

Substitui a chamada para os.random pela criptografia específica mksalt .

Veja Biblioteca padrão do Python: crypt : crypt.mksalt() : "Retorna um sal gerado aleatoriamente do Se nenhum método é dado, o método mais strong disponível como retornado por métodos () é usado "

EDITAR :

1) '$ 6 $' é para o SHA512. Você precisaria substituí-lo pelo tipo de criptografia de sua escolha.

2) Você pode transformar qualquer um deles em um liner também para fazer isso do bash.

EDITAR (para ter uma resposta completa, graças a miken32 e dawud ):

3) O BSD crypt é uma implementação diferente em comparação com o GNU, portanto, eles não são compatíveis. Se você quiser usar isto em sistemas BSD (como o OSX), você pode usar a versão PHP (com versão do PHP > 5.3.0) enquanto ela implementa sua própria crypt () função.

Outra alternativa no mac é usar passlib :

python -c 'import getpass; import passlib.hash; h=passlib.hash.sha512_crypt.hash(getpass.getpass()); print(h if (passlib.hash.sha512_crypt.verify(getpass.getpass("Confirm:"), h)) else "")'

ou, com o padrão da glibc no. de rodadas (5000):

python -c 'import getpass; import passlib.hash; h=passlib.hash.sha512_crypt.using(rounds=5000).hash(getpass.getpass()); print(h if (passlib.hash.sha512_crypt.verify(getpass.getpass("Confirm:"), h)) else "")'
    
por 12.04.2014 / 06:49
3

A forma como uma senha hash é gerada é documentada aqui .

$ python -c 'import crypt; print(crypt.crypt("My Password", "$6$My salt"))'

O motivo pelo qual não está funcionando é porque você está usando um Mac para gerar o hash. A implementação crypt difere da implementação GNU / Linux.

Na% man_de% manpage:

   Glibc notes
   The glibc2 version of  this  function  supports  additional  encryption
   algorithms.

   If  salt is a character string starting with the characters "$id$" fol-
   lowed by a string terminated by "$":

          $id$salt$encrypted

   then instead of using the DES machine,  id  identifies  the  encryption
   method  used  and  this  then  determines  how the rest of the password
   string is interpreted.  The following values of id are supported:

          ID  | Method
          ---------------------------------------------------------
          1   | MD5
          2a  | Blowfish (not in mainline glibc; added in some
              | Linux distributions)
          5   | SHA-256 (since glibc 2.7)
          6   | SHA-512 (since glibc 2.7)

   So   $5$salt$encrypted   is   an   SHA-256   encoded    password    and
   $6$salt$encrypted is an SHA-512 encoded one.

   "salt" stands for the up to 16 characters following "$id$" in the salt.
   The encrypted part of the password string is the actual computed  pass-
   word.  The size of this string is fixed:

   MD5     | 22 characters
   SHA-256 | 43 characters
   SHA-512 | 86 characters

   The  characters  in  "salt"  and  "encrypted"  are  drawn  from the set
   [a-zA-Z0-9./].  In the MD5 and SHA implementations the  entire  key  is
   significant (instead of only the first 8 bytes in DES).

A extensão crypt(3) não existe em OSX $id$

Para o SHA512, você precisa gerar o hash em uma máquina GNU / Linux.

    
por 12.04.2014 / 11:15
1

Nova localização da documentação de onde descobrir mais sobre como gerar uma senha com hash para a opção de kickstart: --iscrypted :

link

python -c 'import crypt; print(crypt.crypt("My Password", "$6$My Salt"))

This will generate sha512 crypt of your password using your provided salt.

    
por 17.01.2018 / 17:37
0

O exemplo acima do Python está incompleto:

crypt.crypt('password', '$6$' + base64.b64encode(os.urandom(6)))

Um trabalho de uma linha seria:

python -c 'import crypt,base64,os; print(crypt.crypt("password", "$6$" + base64.b64encode(os.urandom(6))))'

Em Python 3

python -c 'import crypt; print(crypt.crypt("password", crypt.mksalt()))'
    
por 17.07.2015 / 14:05