Bashスクリプトを使用して、_/etc/shadow
_ファイルのようにハッシュ化されたパスワードを生成しようとしています。ユーザーは、変数PSWD
に保存されているパスワードの入力を求められます。 _/etc/shadow
_ファイルからハッシュとソルトの値を抽出し、変数HVAL
およびSVAL
にそれぞれ保存しました。
ここで、PasswordとSalt値を使用してハッシュされたパスワードを生成するには、以下のコマンドを使用する必要があります( 参照 ):
$ Perl -e 'print crypt("password","\$6\$salt\$") . "\n"'
上記のコマンドでは、「password」を_$PSWD
_変数に、「6」を_$HVAL
_に、「salt」を_$SVAL
_変数に置き換える必要があります。
以下に示すように、上記の変数をエクスポートしてPerlコマンドで置き換えようとしましたが、完全に混乱していました。
Perl -e 'print crypt("$ENV{"PSWD"}","\$$ENV{"HVAL"}\$$ENV{"SVAL"}\$") . "\n"'
修正はどうなりますか?
問題はあなたの二重引用符にあります。ここでは、これらのハッシュキーをそのまま引用する必要はありません単純な識別子。 _perldoc perldata
_から:
実際、このようなカーリー内の単純な識別子は、文字列である必要があり、同様にハッシュ添え字内でも同様です。どちらも引用する必要はありません。前の例である_
$days{'Feb'}
_は_$days{Feb}
_と書くことができ、引用符は自動的に想定されます。ただし、添え字がより複雑なものはすべて式として解釈されます。これは、たとえば、_$version{2.0}++
_は_$version{2}++
_ではなく_$version{'2.0'}++
_と同等であることを意味します。
そう:
_Perl -le 'print crypt($ENV{PSWD},"\$$ENV{HVAL}\$$ENV{SVAL}\$")'
_
バックティック内で使用する場合は、次のようにバックスラッシュを2倍にする必要があります。
_var=`Perl -le 'print crypt($ENV{PSWD},"\\$$ENV{HVAL}\\$$ENV{SVAL}\$")'`
_
代わりに、代わりに$(...)
形式のコマンド置換を使用することをお勧めします。
_var=$(Perl -le 'print crypt($ENV{PSWD},"\$$ENV{HVAL}\$$ENV{SVAL}\$")')
_
正しい見積もりを取得するためのシーケンスは、元のコマンドから始まります。
Perl -e 'print crypt("password","\$6\$salt\$") . "\n"'
スペースを追加しましょう:
Perl -e 'print crypt(" password ","\$ 6 \$ salt \$") . "\n"'
変数を同等のものに変更しましょう:
Perl -e 'print crypt(" $ENV{PSWD} ","\$ $ENV{HVAL} \$ $ENV{SVAL} \$") . "\n"'
引用符では失敗するため、同等のものは引用しないでください。
Perl -e 'print "$ENV{PSWD}" . "\n"' # correct.
Perl -e 'print "$ENV{"PSWD"}" . "\n"' # fail.
そして最後に、上に挿入されたスペースを削除しましょう。
Perl -e 'print crypt("$ENV{PSWD}","\$$ENV{HVAL}\$$ENV{SVAL}\$") . "\n"'
次に、コマンドを変数に割り当てることができます。
var="$( Perl -e 'print crypt("$ENV{PSWD}","\$$ENV{HVAL}\$$ENV{SVAL}\$") . "\n"' )"
エクスポートされた値の場合:PSWD=password
、HVAL=6
、SVAL=saltsalt
取得:
$ 6 $ saltsalt $ qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh /