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


109

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

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

回答:


126

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

方法1(md5、sha256、sha512)

openssl passwd -6 -salt xyz  yourpass

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

方法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

3
使用している場合chpasswd -e、文字列あなたに単一引用符を使用してくださいecho中。そうでない場合、$または他の特殊文字がある場合、それらは文字どおりに扱われません。
ザグズ14年

4
これらのmakeは、シェルの履歴に記録されることに注意してください。私はopenssl passwd -1、1)そこに終わらない、2)あなたのためにランダムソルトを生成します(どちらもシェル履歴になりません、どちらでもありません)。
ズティック

1
openssl passwd-1オプションが何をするのかを理解しようとする人のための文書
CivFan

4
SHA-512ハッシュの場合:python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'- 関連するServerFault質問から
-CivFan

9
上記の方法1)および2)は、ハッシュにMD5を使用しています。ハッシュの衝突が発生したため、MD5はベストプラクティスとは見なされなくなりました。方法3)またはunix.stackexchange.com/a/198906/10911で説明されている方法を使用します
ズティック

36

Ubuntu 12.04には、mkpasswd(whoisパッケージから)があります:crypt(3)の機能が多すぎます

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

どこ:

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

例えば

$ mkpasswd -m help

-s = Read password from stdin

8
ソルトを指定する必要はありません。mkpasswdはランダムなソルトを生成します。
To마SE

1
何があっても、/ etc / passwdにコピーされたmkpasswdから生成されたパスワードは常に失敗します。mkpasswdによって作成されたハッシュが正しいかどうかを確認する方法はありますか?
CMCDragonkai

@CMCDragonkai:間違った質問。システムが何を期待しているかを尋ねる必要があります。
user3183018

1
@To마SE:塩を制御することは時々有用です。別のストアにソルトを保存していたWebアプリのパスワードのハッシュ生成をテストするときに使用しました。たとえば、MySQL DBではハッシュされたパスワード、Redisではユーザーごとのソルト。
user3183018

15

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

  • インストールするものは何もありません
  • シェル履歴にパスワードを保存しません
  • ランダムソルトを生成します
  • 最新の強力なハッシュアルゴリズム、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.')"
    

参照資料


3

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

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

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


何らかの理由で、のcrypt.mksaltパスワードを生成するときにを使用しても機能しません/etc/shadow。しかし、@ Alex131089のメソッドは機能します!
maulinglawns

コメントに気付く前に、この方法を試すのに1.5時間も無駄にしただけです。誰かがそれを削除できますか?まだ投票できません。
ミチャウF

1
@MichałF塩漬けが正しく行われなかったため、これは機能しなかったようです。これを指摘してくれてありがとう。塩漬けはOSに依存するため、塩を削除しましたが、回答の中でOSのすべての範囲を考慮することは実用的ではありません。@RahulPatilで概説されている方法1を使用する必要があります。これは、ソルティングを使用できopenssl、かなり普遍的なツールであるためです。
グレッグ

パスワードはシェルの履歴に残るため、お勧めできません。
マークストースバーグ

つまり、シェル履歴からcmdをいつでもクリアできます。
グレッグ

3

現在の方法はどれも受け入れられません-それらはコマンドラインでパスワードを渡します(これは私のシェルの履歴になります)、追加のユーティリティのインストールが必要です(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))+"$")'

2
コマンド履歴にパスワードが残らないようにするには、環境変数HISTCONTROLを(少なくともbashの場合) 'ignorespace'に設定してから、コマンドの前にスペースを追加します。
adam820

@ adam820:それは1つの方法です... psコマンドが実行されているのは、1秒未満の出力のままです。(パスワードの入力を求めるバージョンを使用するのが最も安全です)
ゲルト

2

ペアは、RHEL6で私の場合には動作しませんでした。コマンドとコマンドを組み合わせて仕事をしました。 opensslchpasswd -eopenssl passwdusermod -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:::

1

パスワードを生成するもう1つの方法は、opensslツールを使用することです。

MD5パスワードを生成する

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

DESパスワードを生成する

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

3
これはRahul Patilの答えの方法1とどう違いますか?古いDESベースのパスワードハッシュアルゴリズムは絶対に使用しないでください。1つには、最大8バイトのパスワードしかサポートされていないため、最近では非常に不十分です。
CVn

3
Snowdenの引用:「あなたの敵は1秒間に1兆回の推測ができると仮定してください。まったく不合理ではない70文字の文字セットと完全にランダムなパスワードを使用すると、576秒(10分未満)になります。能力は劣るが断固とした敵に対してさえ、それはひどく不十分です。
CVn

MD5とDES ...
AdamKalisz

DESパスワードを暗号化する方法を示す唯一の答えであることに感謝します!IPカメラファームウェアのルートパスワードを上書きしようとする場合に非常に便利です。
悪意のある

1

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

必要に応じてここで拾うことができます。たくさん使用する必要がある場合は、これを環境にドロップするのは簡単です。httpでホストされているものなど、デフォルトのpythonインタープリターを使用して任意のプラットフォームで実行できます。確実に動作することを期待します。

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


既にインストールされているバージョンのpythonがインストールされているかどうかは、システムによって異なります。問題はchpasswd何ですか?
-RalfFriedl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.