ローカルのUNIXユーザが渡したユーザ名とパスワードが正しいかどうかをシェルスクリプトでチェックしたいと思います。これを行う最も簡単な方法は何ですか?シェルスクリプトでunixのユーザ名とパスワードを確認する
グーグルで見つかったことは、 'expect'と 'su'を使用していて、 'su'が成功したかどうかどうか調べていたことだけでした。
ローカルのUNIXユーザが渡したユーザ名とパスワードが正しいかどうかをシェルスクリプトでチェックしたいと思います。これを行う最も簡単な方法は何ですか?シェルスクリプトでunixのユーザ名とパスワードを確認する
グーグルで見つかったことは、 'expect'と 'su'を使用していて、 'su'が成功したかどうかどうか調べていたことだけでした。
これは私の問題を解決するために使用したスクリプトです。私は最初、Aaron Digullaによって釣り上げられた小さなc-programmを書こうとしましたが、それは非常に困難でした。
おそらく、このスクリプトは他の誰かにとって役に立ちます。
#!/bin/bash
#
# login.sh $USERNAME $PASSWORD
#this script doesn't work if it is run as root, since then we don't have to specify a pw for 'su'
if [ $(id -u) -eq 0 ]; then
echo "This script can't be run as root." 1>&2
exit 1
fi
if [ ! $# -eq 2 ]; then
echo "Wrong Number of Arguments (expected 2, got $#)" 1>&2
exit 1
fi
USERNAME=$1
PASSWORD=$2
# Setting the language to English for the expected "Password:" string, see http://askubuntu.com/a/264709/18014
export LC_ALL=C
#since we use expect inside a bash-script, we have to escape tcl-$.
expect << EOF
spawn su $USERNAME -c "exit"
expect "Password:"
send "$PASSWORD\r"
#expect eof
set wait_result [wait]
# check if it is an OS error or a return code from our command
# index 2 should be -1 for OS erro, 0 for command return code
if {[lindex \$wait_result 2] == 0} {
exit [lindex \$wait_result 3]
}
else {
exit 1
}
EOF
スクリプトの先頭に 'export LC_ALL = C'を指定すると、デフォルト言語が異なるシステムで動作するようになります。文字列' Password: 'を期待しているので、このスクリプトの実行言語を英語に設定します。 http://askubuntu.com/a/264709/18014を参照してください。 –
ユーザ名とパスワードは/etc/shadow
ファイルに書き込まれています。 ちょうどそこからユーザーとパスワードのハッシュ(sed
が役に立ちます)を取得し、自分のパスワードをハッシュして確認します。
ハッシュを生成するためにmkpasswdを使用します。 あなたのバージョンが使用している塩を調べてください。最新の影がとてもsha-512
を使用している:
mkpasswd -m sha-512 password salt
マンページがあり、多くのお手伝いをすることができます。
簡単には、phpとpam-autモジュールを使用することです。あなたはグループアクセスのpwdユーザー上でphieを調べることができます。
部分的にはユーザ名を確認することです。/ etcのpasswd/shadowファイルで定義されていますか? 次にsaltでパスワードMD5を計算します。ユーザーパスワードがSSL(または少なくとも一部のサーバーターミナルサービス)経由で送信されている場合。
あなたは実際に何が必要なのか分からないので、そのちょっとしたヒント。 "su"は主に認証目的のためです。
あなたが見るかもしれない他のトピックはkerberos/LDAPサービスですが、それは難題です。
これはMD5ハッシュではなく、SHAです。 – bua
Linuxでは、pam_authenticate()
という小さなCプログラムを書く必要があります。呼び出しがPAM_SUCCESS
を返す場合、ログインとパスワードは正しいです。
達成しようとしていることとスクリプトが行っていることの詳細を確認することができます。 –