Linux 如何验证用户';密码,带shell脚本?

Linux 如何验证用户';密码,带shell脚本?,linux,bash,shell,ubuntu,scripting,Linux,Bash,Shell,Ubuntu,Scripting,我正在为Ubuntu终端制作一个bash脚本。我需要先验证用户,然后代码才能继续。我如何询问和验证他们现有的登录密码 getent shadow | cut -d ":" -f 2 如果返回,未设置密码,否则用户拥有密码 在这之后,我们可以做: #!/bin/bash for user in $(getent shadow | cut -d ":" -f 1); do has_pass=$(getent shadow | grep $user | cut -d ":" -f 2)

我正在为Ubuntu终端制作一个bash脚本。我需要先验证用户,然后代码才能继续。我如何询问和验证他们现有的登录密码

getent shadow | cut -d ":" -f 2
如果返回
,未设置密码,否则用户拥有密码

在这之后,我们可以做:

#!/bin/bash

for user in $(getent shadow | cut -d ":" -f 1);
do
  has_pass=$(getent shadow | grep $user | cut -d ":" -f 2)
    if [ $has_pass = "!!" ]; then
      echo "User $user does not have password"
    else
      echo "User $user has password"
    fi
done
无论如何,至少下一次,在提出要求之前试着做点什么

如果返回
,未设置密码,否则用户拥有密码

在这之后,我们可以做:

#!/bin/bash

for user in $(getent shadow | cut -d ":" -f 1);
do
  has_pass=$(getent shadow | grep $user | cut -d ":" -f 2)
    if [ $has_pass = "!!" ]; then
      echo "User $user does not have password"
    else
      echo "User $user has password"
    fi
done

无论如何,至少下一次,试着在询问之前做点什么。

您可以随时使用
id
命令并执行以下操作:

user=$(id -u) # Set $user to user's user id

如果在脚本中执行此操作,则可以检查
$user
是否为有效的用户id。您可以查看
/etc/group
文件中的用户名和id。当然,这并不是在验证用户的密码。相反,这只是检查运行脚本的用户的id。

您始终可以使用
id
命令执行以下操作:

user=$(id -u) # Set $user to user's user id


如果在脚本中执行此操作,则可以检查
$user
是否为有效的用户id。您可以查看
/etc/group
文件中的用户名和id。当然,这并不是在验证用户的密码。相反,这只是检查运行脚本的用户的id。

您可以将其放在仅可供特定组访问的目录中,然后将目录添加到全局路径,然后将这些用户添加到所述组。除非这是特定于您的应用程序的密码,否则不要参与;让需要密码的程序进行验证。从您的问题的当前状态来看,您实际上试图做什么还不清楚。这是应用程序的特定密码吗?应该根据什么验证该密码?那么这里的权威是什么?为什么不使用通常的方法,将授权等事务委托给为此类事务提供服务的系统部分,例如PAM系统?交叉发布:您可以将其放在只能由某个组访问的目录中,然后将该目录添加到全局路径,然后将这些用户添加到所述组。除非这是特定于您的应用程序的密码,否则不要参与;让需要密码的程序进行验证。从您的问题的当前状态来看,您实际上试图做什么还不清楚。这是应用程序的特定密码吗?应该根据什么验证该密码?那么这里的权威是什么?你为什么不使用通常的方法,将授权之类的事情委托给为这类事情提供服务的系统部分,比如PAM系统?交叉发布:这如何验证密码?@rici它基本上是说用户是否有密码。。您可以改为将输出设置为1或0,并使用该值。这如何验证密码?@rici它基本上表示用户是否拥有密码。。您可以改为将输出设置为1或0,并使用值somehow。如果您将登录用户处于AFK状态数秒时有人抓取终端的可能性包括在内,则不安全,这就是“更改我的密码”的原因对话框往往要求您输入密码,即使您当前已登录。@rici很好,我想这是真的。我只是说,这可能比提示用户重新输入密码更安全,当然,除非是加密连接。现在还有人使用telnet吗?@rici他们真的不应该,这是个可怕的主意。然而,它仍然预装在许多基于unix的操作系统上,这一事实告诉我,不幸的是,有些人仍然在使用它。也许要登录到非常旧的服务器/路由器?谁知道呢。任何人,我都会放弃我的声明,说我的解决方案“更安全”。我只是想给OP一个快速的解决方案,可能比OP的路线要简单。使用像那样的
id
命令来检查用户id在脚本/服务中非常常见。我想telnet实用程序仍然很有用,例如,我在几个月前用它来测试SMTP服务器,但是您需要运行以接受telnet外壳连接的telnet守护程序似乎不再是预安装的。但你的答案要好得多+1.如果您将登录用户在AFK状态下几秒钟内有人抓取终端的可能性包括在内,则不会更安全,这就是为什么“更改我的密码”对话框往往要求您输入密码,即使您当前已登录。@rici很好,我想这是真的。我只是说,这可能比提示用户重新输入密码更安全,当然,除非是加密连接。现在还有人使用telnet吗?@rici他们真的不应该,这是个可怕的主意。然而,它仍然预装在许多基于unix的操作系统上,这一事实告诉我,不幸的是,有些人仍然在使用它。也许要登录到非常旧的服务器/路由器?谁知道呢。任何人,我都会放弃我的声明,说我的解决方案“更安全”。我只是想给OP一个快速的解决方案,可能比OP的路线要简单。使用像那样的
id
命令来检查用户id在脚本/服务中非常常见。我想telnet实用程序仍然很有用,例如,我在几个月前用它来测试SMTP服务器,但是您需要运行以接受telnet外壳连接的telnet守护程序似乎不再是预安装的。但你的答案要好得多+1.