web-dev-qa-db-ja.com

/ etc / shadowのパスワードを手動で生成する

仮想マシンイメージ内のルートパスワードを変更するには、/etc/shadowを手動で編集する必要があります。

パスワードを受け取り、標準出力で/etc/shadow互換のパスワードハッシュを生成するコマンドラインツールはありますか?

115
Lorin Hochstein

同じために次のコマンドを使用できます。

方法1(md5、sha256、sha512)

openssl passwd -6 -salt xyz  yourpass

注:-1を渡すとMD5パスワードが生成され、-5はSHA256と-6 SHA512が生成されます(推奨)

方法2(md5、sha256、sha512)

mkpasswd --method=SHA-512 --stdin

メソッドはmd5sha-256およびsha-512を受け入れます

方法3(des、md5、sha256、sha512)

@tinkが示唆したように、chpasswdを使用してパスワードを更新できます。

echo "username:password" | chpasswd 

または、chpasswdで暗号化されたパスワードを使用できます。まずこれを使ってそれを生成します:

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

その後、生成されたパスワードを使用して更新できます。

echo "username:encryptedPassWd"  | chpasswd -e

この暗号化されたパスワードを使用して、パスワードで新しいユーザーを作成できます。次に例を示します。

useradd -p 'encryptedPassWd'  username
133
Rahul Patil

Ubuntu 12.04には、(whoisパッケージの)mkpasswdがあります:crypt(3)へのフロントエンドの機能過剰

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

どこ:

  • -m = TYPEメソッドを使用してパスワードを計算します。 TYPEがヘルプの場合、使用可能なメソッドが出力されます。
  • -S =塩を使用。

例えば。

$ mkpasswd -m help

-s = Read password from stdin
37
user3183018

このソリューションには次の利点があります。

  • インストールする追加のものはありません
  • シェルの履歴にパスワードを保存しません
  • あなたのためにランダムな塩を生成します
  • 最新の強力なハッシュアルゴリズムであるSHA-512を使用
  • 間違いを避けるためにパスワードの再プロンプトを出します。

    $ 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.')"
    

参考文献

17
u150825

現在の方法はどれも私には受け入れられません-コマンドラインでパスワードを渡すか(シェルの履歴に残る)、追加のユーティリティのインストールが必要です(python3makepasswd)、ハードコードされたソルトを使用するか、古いハッシュ手法を使用します。

この方法では、パスワードの入力を求められた後にSHA-512ハッシュが生成され、ランダムなソルトが使用されます。

非標準ライブラリなしでPython 2を利用する方法:

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

プロンプトなしでこれを行うには:(これにより、コマンド履歴にパスワードが残ります)

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

Debianベースのシステムを持たない人向け。 Python3も同様に機能します。

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

注:文字列「test」は、暗号化された文字列として生成するパスワードです。

3
Greg

opensslおよびchpasswd -e RHEL6で私の場合、ペアが機能しませんでした。結合openssl passwdおよびusermod -pコマンドがジョブを実行しました。

パスワードのハッシュ値とソルト値を生成します。

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

$1$5RPVAd$vgsoSANybLDepv2ETcUH7.

次に、暗号化された文字列をusermodにコピーします。必ず一重引用符で囲んでください。

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

シャドウファイルで確認してください。

$ grep root /etc/shadow

root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::
2
Joon Byun

パスワードを生成するさらに別の方法は、opensslツールを使用することです。

MD5パスワードを生成する

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

DESパスワードを生成する

openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2
2
Evgeny

U150825とGert van den Bergの批判を少し広げると、私は、さまざまな自動化システムのさまざまな状況に比較的柔軟なものが必要だと気づきました。私は自分の便利なスクリプトの小さなライブラリに追加してこれを書くことにしました。 python 2.7+のネイティブライブラリのみを使用し、python3でも動作します。

よろしければ こちら を受け取ります。これをhttpホストなどで何度も使用する必要があり、デフォルトのpythonインタプリタを使用して任意のプラットフォームで実行できますあなたが利用できるようになったのは、かなり確実に機能することを期待しています。

デフォルトでは、stderrのプロンプトでgetpassを使用してプロンプトを表示します(stdoutを簡単にキャプチャできるようにします)が、それにストリングをパイプすると、stdinから取得するだけです。これをどのように行っているかによっては、コマンド履歴にも表示されない場合があります。そのため、作業している内容を認識してください。私は、パッケージに頼る必要がなく、python 10の異なる方法で勝利するために私の方法を1行で並べるよりも、期待どおりに動作する柔軟なツールを用意するのが好きです。

1
James Harmison