我想了解如何在非 sudo 命令中提示用户密码
编辑:
我认为我无法根据注释清楚地告诉它,所以我将用示例详细说明我的请求,例如我打开终端并输入“ ls -l ”命令,按 Enter 后它应该询问我用户密码我希望每个非 sudo 命令。
答案1
典型的缺乏对影子文件中的密码散列的访问可能会使该请求对于使用系统密码数据库的随机用户空间程序来说是有问题的,因为它们sudo
往往chsh
会设置 setuid 位,以便它们root
可以运行访问影子文件。
[jdoe@centos ~]$ id -u
1001
[jdoe@centos ~]$ perl -E 'say for getpwuid(1001)'
jdoe
x
1001
1001
/home/jdoe
/bin/bash
[jdoe@centos ~]$ sudo perl -E 'say for getpwuid(1001)'
jdoe
$6$P1jejm1i$bo02c/...
1001
1001
/home/jdoe
/bin/bash
[jdoe@centos ~]$
一旦程序可以获得用户的密码哈希(无论是从系统数据库还是其他来源,它都是$6$P1jejm1i$bo02c/...
上面输出中的编辑位),传统的crypt(3)
调用应该足以验证密码。
除了不回显密码之外,密码提示程序可能还希望防止核心转储、将自身锁定到内存、随后清理内存的各个位以及忽略各种信号,如果运行 setuid,则进行更严格的检查。 OpenBSD 使其中一些步骤变得简单,readpassphrase(3)
尽管其他操作系统没有那么多被getpass(3)
标记为“LEGACY”...