【问题标题】:How to validate a user's password, with a shell script?如何使用 shell 脚本验证用户的密码?
【发布时间】:2016-04-16 19:39:32
【问题描述】:

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

【问题讨论】:

  • 你可以把它放在一个只有特定组可以访问的目录中,然后将该目录添加到全局路径,然后将这些用户添加到该组。
  • 除非这是特定于您的应用程序的密码,否则不要参与;让需要密码的程序进行验证。
  • 从问题的当前状态来看,您实际上试图做什么还不清楚。这是特定于您的应用程序的密码吗?应该根据什么验证该密码?那么这里的权限是什么?为什么不使用通常的方法,将授权之类的事情委托给为此类事情提供服务的系统部分,例如 PAM 系统?

标签: linux bash shell ubuntu scripting


【解决方案1】:

您总是可以只使用id 命令并执行以下操作:

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

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

【讨论】:

  • 如果您包括在登录用户 AFK 几秒钟时有人抓住了终端的可能性,这并不安全,这就是为什么“更改我的密码”对话框往往要求您即使您当前已登录,也请输入您的密码。
  • @rici 好点,我想这是真的。我只是说这可能比提示用户重新输入密码更安全,除非它当然是加密连接。
  • 现在还有人使用 telnet 吗?
  • @rici 他们真的不应该,这是一个可怕的想法。然而,它仍然预装在许多基于 unix 的操作系统上的事实告诉我,不幸的是,有些人仍然在使用它。也许登录到真正旧的服务器/路由器?谁知道。任何人,我都会放弃我的说法,即我的解决方案“更安全”。我只是想给 OP 一个可能比 OP 所走的路线更简单的快速解决方案。使用 id 这样的命令来检查用户 ID 在脚本/服务中很常见。
  • 我猜 telnet 实用程序仍然有用——例如,几个月前我用它来测试 SMTP 服务器——但是你需要运行 telnet 守护程序来接受 telnet shell连接似乎不再预装。但你的答案要好得多。 +1。
【解决方案2】:
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

无论如何,至少下一次,在问之前尝试做一些事情。

【讨论】:

  • 这如何验证密码?
  • @rici 它基本上说用户是否有密码。您可以将输出设置为 1 或 0 并以某种方式使用该值
猜你喜欢
  • 1970-01-01
  • 2016-12-06
  • 2023-03-07
  • 2013-12-23
  • 2017-07-02
  • 2019-11-24
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
相关资源
最近更新 更多