web-dev-qa-db-ja.com

Anacondaキックスタートとrootpwオプション

SL 6.5で暗号化されたパスワードを生成するいくつかの異なる方法を試しましたが、何も機能しないようです。さまざまな/ var/log/anaconda *ファイルのどこにもエラーは見つかりませんが、ログインできないため、明らかに機能していません。

テンプレートとして使用した/root/anaconda-ks.cfgの元の自動作成ファイルは、次のようになります。

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

次に、openssl passwd -1を試してみました。

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

私はそれがSHA-512ではないことに気付いたので、私は試しました a Pythonワンライナーいくつかの場所で繰り返されていることがわかりました

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

何も機能しません。ログインできず、シングルユーザーモードでrootパスワードをリセットする必要があります。

5
miken32

マシンにshadowとpassalgo = sha512があることを確認し、ルートパスをそのマシンで必要なパスワードに設定し、/ etc/shadowから取得してキックスタートに配置します。 これは本番環境での使用はお勧めしません。

プログラムで行うには、キックスタートファイルを生成する選択した言語の暗号ライブラリを使用します。

ルビー:

_'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)))
_

特にすべてのサーバーで同じパスワードを使用する場合は、私がここで行ったように、毎回ランダムなソルトを使用することを強くお勧めします。

[〜#〜] edit [〜#〜]Python 3:

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

_os.random_の呼び出しを暗号化固有のmksaltに置き換えます。

Python標準ライブラリを参照してください:cryptcrypt.mksalt(): "指定されたメソッドのランダムに生成されたソルトを返します。メソッドが指定されていない場合、最も強力なメソッドが返されますメソッド()が使用されています

[〜#〜]編集[〜#〜]

1)「$ 6 $」はSHA512用です。選択した暗号化タイプに置き換える必要があります。

2)bashから実行するために、これらのいずれかを1つのライナーに変換することもできます。

[〜#〜] edit [〜#〜]のおかげで完全な回答を得るためにmiken32 および dawud ):

3)BSD cryptは、GNUと比較して実装が異なるため、互換性がありません。これをBSDシステム(OSXなど)で使用する場合は、PHP(with PHP version> 5.3.0)versionは独自の crypt() 関数を実装しているため).

Macでのもう1つの方法は、 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 "")'
_

または、glibcのデフォルトのnoを使用します。ラウンド数(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 "")'
_
5

ハッシュされたパスワードが生成される方法は文書化されています here

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

これが機能しない理由は、Macを使用してハッシュを生成しているためです。 cryptの実装は、GNU/Linuxの実装とは異なります。

crypt(3)マンページから:

_   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).
_

_$id$_拡張は OSX crypt に存在しません

SHA512の場合、GNU/Linuxマシンでハッシュを生成する必要があります。

3
dawud

キックスタートオプションのハッシュ化パスワードの生成に関する詳細情報の新しいドキュメントの場所:_--iscrypted_:

http://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#rootpw

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

これにより、提供されたソルトを使用して、パスワードのsha512暗号が生成されます。

1
mastash3ff

上記のPythonの例は不完全です:

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

機能するワンライナーは次のとおりです。

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

Python 3

python -c 'import crypt; print(crypt.crypt("password", crypt.mksalt()))'
0