在shell脚本中检查unix用户名和密码

我想检查一个shell脚本,如果本地unix用户的用户名和密码是正确的。 什么是最简单的方法来做到这一点?

我在Google上search时发现的只是使用'expect'和'su',然后检查'su'是否成功。

用户名和密码写在/etc/shadow文件中。 只是从那里得到用户和密码哈希( sed会帮助),哈希你自己的密码,并检查。

使用mkpasswd来生成散列。 你必须看看你的版本使用哪种盐。 最新的影子是用sha-512所以:

 mkpasswd -m sha-512 password salt 

手册可以帮助你很多。

更容易使用PHP和pam-aut模块。 那里你可以检查组访问pwd用户的vie php。

在Linux上,您将需要编写一个调用pam_authenticate()的小型C程序。 如果调用返回PAM_SUCCESS ,那么登录名和密码是正确的。

好吧,现在这是我用来解决我的问题的脚本。 我首先尝试写一个由Aaron Digulla所推动的小型C程序,但事实证明太困难了。

也许这个脚本对别人有用。

 #!/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 #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 

部分回答是检查用户名,是否在/ etc中的passwd / shadow文件中定义,然后用salt计算密码MD5。 如果你的用户密码是通过SSL(或至少某些服务器终端服务)发送的。

它只是一个暗示,因为我不知道你实际需要什么。 因为“su”主要用于验证目的。

您可能会看到的其他主题是kerberos / LDAP服务,但这些主题很难。