/etc/shadow
仮想マシンイメージ内のルートパスワードを変更するには、手動で編集する必要があります。
/etc/shadow
パスワードを取得し、標準出力で互換性のあるパスワードハッシュを生成するコマンドラインツールはありますか?
/etc/shadow
仮想マシンイメージ内のルートパスワードを変更するには、手動で編集する必要があります。
/etc/shadow
パスワードを取得し、標準出力で互換性のあるパスワードハッシュを生成するコマンドラインツールはありますか?
回答:
同じために次のコマンドを使用できます。
openssl passwd -6 -salt xyz yourpass
注:渡す-1
とMD5パスワード、-5
SHA256および-6
SHA512 が生成されます(推奨)
mkpasswd --method=SHA-512 --stdin
方法は受け入れmd5
、sha-256
そしてsha-512
@tinkが示唆したように、次を使用chpasswd
してパスワードを更新できます。
echo "username:password" | chpasswd
または、で暗号化されたパスワードを使用できますchpasswd
。最初にこれを使用して生成します:
perl -e 'print crypt("YourPasswd", "salt", "sha512"),"\n"'
その後、生成されたパスワードを使用して更新できます。
echo "username:encryptedPassWd" | chpasswd -e
この暗号化されたパスワードを使用して、パスワードを持つ新しいユーザーを作成できます。次に例を示します。
useradd -p 'encryptedPassWd' username
openssl passwd -1
、1)そこに終わらない、2)あなたのためにランダムソルトを生成します(どちらもシェル履歴になりません、どちらでもありません)。
python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'
- 関連するServerFault質問から
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
このソリューションには次の利点があります。
ミスを避けるために、パスワードの再入力を求めます。
$ 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.')"
Debianベースのシステムがない人向け。Python3も同様に機能します。
python3 -c 'import crypt; print(crypt.crypt("test"))'
注:文字列「test」は、暗号化された文字列として生成するパスワードです。
crypt.mksalt
パスワードを生成するときにを使用しても機能しません/etc/shadow
。しかし、@ Alex131089のメソッドは機能します!
openssl
、かなり普遍的なツールであるためです。
現在の方法はどれも受け入れられません-それらはコマンドラインでパスワードを渡します(これは私のシェルの履歴になります)、追加のユーティリティのインストールが必要です(python3
、makepasswd
)、ハードコーディングされたソルトを使用するか、古いハッシュ技術を使用します。
このメソッドは、パスワードの入力を求められた後に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))+"$")'
ps
コマンドが実行されているのは、1秒未満の出力のままです。(パスワードの入力を求めるバージョンを使用するのが最も安全です)
ペアは、RHEL6で私の場合には動作しませんでした。コマンドとコマンドを組み合わせて仕事をしました。 openssl
chpasswd -e
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:::
パスワードを生成するもう1つの方法は、openssl
ツールを使用することです。
MD5パスワードを生成する
openssl passwd -1 -salt SaltSalt SecretPassword
# output: $1$SaltSalt$FSYmvnuDuSP883uWgYBXW/
DESパスワードを生成する
openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2
u150825とGert van den Bergの批判を少し広げると、さまざまな自動化システムのさまざまな状況に対して比較的柔軟なものが必要であることがわかりました。私は自分の小さな便利なスクリプトのライブラリに追加してこれを書くことにしました。python 2.7+のネイティブライブラリのみを使用し、python3でも同様に動作します。
必要に応じてここで拾うことができます。たくさん使用する必要がある場合は、これを環境にドロップするのは簡単です。httpでホストされているものなど、デフォルトのpythonインタープリターを使用して任意のプラットフォームで実行できます。確実に動作することを期待します。
デフォルトでは、stderrのプロンプトでgetpassを使用してプロンプトが表示されます(stdoutを簡単にキャプチャできます)が、文字列をパイプすると、stdinから取得します。これをどのように行っているかにもよりますが、コマンド履歴にも表示されない場合があります。そのため、使用しているものを認識してください。パッケージやpythonに頼って10通りの方法で勝利するよりも、期待どおりに動作する柔軟なツールが好きです。
chpasswd
何ですか?
chpasswd -e
、文字列あなたに単一引用符を使用してくださいecho
中。そうでない場合、$
または他の特殊文字がある場合、それらは文字どおりに扱われません。