显示在unix“passwd”命令中输入的新密码

显示在unix“passwd”命令中输入的新密码

是否可以运行密码带有显示新输入密码选项的命令?默认情况下,它不会显示我输入的内容,而且我不想要这样。

[dave@hal9000 ~]$ passwd 
Changing password for user dave.
Changing password for dave.
(current) UNIX password: 
New password: bowman
Retype new password: bowman
passwd: all authentication tokens updated successfully.

答案1

如果你真的想走这条路却没有密码参数,你可以使用这个预计脚本:

#!/usr/bin/env expect -f
set old_timeout $timeout
set timeout -1

stty -echo
send_user "Current password: "
expect_user -re "(.*)\n"
set old_password $expect_out(1,string)

stty echo
send_user "\nNew password: "
expect_user -re "(.*)\n"
set new_password $expect_out(1,string)

set timeout $old_timeout
spawn passwd
expect "password:"
send "$old_password\r"
expect "password:"
send "$new_password\r"
expect "password:"
send "$new_password\r"
expect eof

怎么运行的:

[dave@hal9000 ~]$ ./passwd.tcl
Current password: 
New password: bowman
spawn passwd
Changing password for user dave.
Changing password for dave.
(current) UNIX password: 
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

这个 shell 脚本也可能有效(在 Fedora 20 上使用 bash-4.2.47-2 和 passwd-0.79-2 进行测试):

#!/bin/sh
stty -echo
echo -n "Current password: "
read old_password

stty echo
echo
echo -n "New password: "
read new_password

passwd << EOF
$old_password
$new_password
$new_password
EOF

怎么运行的:

[dave@hal9000 ~]$ ./passwd.sh
Current password: 
New password: bowman
Changing password for user dave.
Changing password for dave.
(current) UNIX password: New password: Retype new password: passwd: all authentication tokens updated successfully.

答案2

您并不完全清楚您到底想查看什么……您自己的密码?别人的?

我记得连操作系统也不知道你的密码,因为它是经过哈希处理的。您可以从影子文件中清除密码,有效地将其清空(通常通过从另一个启动磁盘启动),然后重新输入密码,但窃取实际密码将需要破解散列字符串......暴力破解或使用字典攻击、彩虹表或类似的东西。我将把机制留给你的 Google fu。

简而言之;不,如果不拦截和记录击键,您就无法检索密码,但如果您对驱动器(或映像)有物理访问权限,则可以删除密码。

编辑:啊,澄清了您在键入时显示的内容。再说一遍,不,我所知道的任何版本都没有。我相信这是为了防止肩冲浪;当您打字时,人们会从您的肩膀后面看,或者在您打字时远程查看您的显示器。

如果您想解决这个问题(例如,如果您使用的是 GUI),您可以将文本字符串剪切并粘贴到提示中,尽管这通常会很痛苦。这取决于您为什么希望回显您的文本(如果您可以看到您正在输入的内容,为什么还要两次输入密码……这就是让您重新输入密码以减少拼写错误的目的。)

根据您的 Linux 版本的工作方式,我想您可以尝试直接对密码字符串进行哈希处理,并将生成的哈希值输入到影子文件中……这是一种奇怪的解决方法,但可能有效。或者您可以找到一个奇怪的解决方法,其中您有一个 PAM 模块针对不同的系统/数据库进行身份验证,您可以更直接地更改它。但从安全角度来看,任何在某个阶段通过纯文本泄露密码的行为都是自找麻烦……您需要决定愿意承担多大的风险。

相关内容