我想在一个shell脚本来检查,如果一个本地的Unix用户的通过用户名和密码是否正确。 什么是最简单的方法是什么?
只有我发现谷歌搜索时的事情是用“期待”和“苏”,然后检查不知何故,如果“苏”是成功还是失败。
我想在一个shell脚本来检查,如果一个本地的Unix用户的通过用户名和密码是否正确。 什么是最简单的方法是什么?
只有我发现谷歌搜索时的事情是用“期待”和“苏”,然后检查不知何故,如果“苏”是成功还是失败。
用户名和密码都写在/etc/shadow
文件。 刚刚获得用户,并从那里密码哈希( sed
将帮助),哈希自己的密码,并检查。
使用mkpasswd来生成散列。 你的hve看你的版本正在使用的盐。 最新的阴影,使用sha-512
,以便:
mkpasswd -m sha-512 password salt
帮助文档能帮助你有很多。
更简单的办法是使用PHP和PAM-AUT模块。 在那里,你可以检查争夺上组访问PWD用户PHP。
在Linux上,你需要写一个调用一个小的C程序pam_authenticate()
如果调用返回PAM_SUCCESS
,然后登录名和密码是否正确。
好了,现在这是我用来解决我的问题的脚本。 我第一次尝试亚伦Digulla为susgested写一个小的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
局部的answere将是检查用户名,它是在passwd /影子文件中定义的在/ etc然后计算密码MD5盐。 如果您的用户密码sended通过SSL(或至少一些服务器的终端服务)。
它只是一个暗示,因为我不知道该怎么做你的实际需要。 由于“苏”是主要用于认证目的。
你可以看看哪些其他议题的有Kerberos / LDAP服务,但这些都是很难的话题。