在shell脚本检查UNIX用户名和密码(check unix username and passw

2019-08-08 19:38发布

我想在一个shell脚本来检查,如果一个本地的Unix用户的通过用户名和密码是否正确。 什么是最简单的方法是什么?

只有我发现谷歌搜索时的事情是用“期待”和“苏”,然后检查不知何故,如果“苏”是成功还是失败。

Answer 1:

用户名和密码都写在/etc/shadow文件。 刚刚获得用户,并从那里密码哈希( sed将帮助),哈希自己的密码,并检查。

使用mkpasswd来生成散列。 你的hve看你的版本正在使用的盐。 最新的阴影,使用sha-512 ,以便:

mkpasswd -m sha-512 password salt

帮助文档能帮助你有很多。

更简单的办法是使用PHP和PAM-AUT模块。 在那里,你可以检查争夺上组访问PWD用户PHP。



Answer 2:

在Linux上,你需要写一个调用一个小的C程序pam_authenticate() 如果调用返回PAM_SUCCESS ,然后登录名和密码是否正确。



Answer 3:

好了,现在这是我用来解决我的问题的脚本。 我第一次尝试亚伦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


Answer 4:

局部的answere将是检查用户名,它是在passwd /影子文件中定义的在/ etc然后计算密码MD5盐。 如果您的用户密码sended通过SSL(或至少一些服务器的终端服务)。

它只是一个暗示,因为我不知道该怎么做你的实际需要。 由于“苏”是主要用于认证目的。

你可以看看哪些其他议题的有Kerberos / LDAP服务,但这些都是很难的话题。



文章来源: check unix username and password in a shellscript
标签: unix shell