0

我正在编写一个脚本,该脚本使用 CocoaDialog 提示登录用户输入密码,以启动 FileVault 2 加密。

理想情况下,我想验证密码是否正确,但我还没有找到这样做的好方法。我尝试通过 subprocess 模块生成 /usr/libexec/chkpasswd ,但它似乎在我可以将密码传递给标准输入之前点击返回。(我只是得到“对不起”,这是错误密码的标准输出。)

我简要地查看了 pexpect,但我想在没有第三方工具的情况下执行此操作,以保持部署简单。

所有 Mac 都将运行 OS X 10.8.2。

4

1 回答 1

1

快速浏览一下就会发现:chkpasswd 中 PAM 身份验证的达尔文源代码。看起来 chkpasswd 正在使用它自己的子 TTY 来获取您的密码:

/* Initialize PAM. */
pamc.conv = &openpam_ttyconv;
pam_start(progname, uname, &pamc, &pamh);

printf("Checking password for %s.\n", uname);

[然后是更多 PAM 特定代码,以查看密码是否有效。]

这对安全性有好处,但对您不利:您无法使用 I/O 重定向来发送密码。根据 pexpect 的工作方式,甚至可能无法做到这一点:它可能会继续向运行 chkpasswd 的 TTY 而非子终端发送输入。我对每个组件的接线了解得不够多,无法在不测试的情况下进行猜测。

我知道这并不能真正解决您的问题,但我认为这值得一提。

于 2013-01-09T00:47:12.617 回答