我正在使用(对这个问题su
不感兴趣)并观察以下行为:sudo
$ su USER -s /bin/bash -c "echo hi"
hi
$ printf "" | su USER -s /bin/bash -c "echo hi"
Password: su: Authentication failure
$ su USER -s /bin/bash -c "echo hi" < /dev/null
Password: su: Authentication failure
$ su USER -s /bin/bash -c "echo hi" < /dev/tty
Password:
$ su USER -s /bin/bash -c "echo hi" < /dev/tty1
hi
对于我的生活,我不明白为什么 stdin 的重定向会导致出现密码提示。我su
在 stdin 已经重定向的上下文中使用,所以我无法避免这种情况。
这是什么原因,如何避免在su
重定向标准输入时出现提示?
为了澄清,OP 评论说帐户 USER 没有设置密码。
从
man pam_unix
(pam_unix是下面引用的模块):我猜你的 PAM 设置正在使用
nullok_secure
. Debian 10 就是这种情况。只需替换
nullok_secure
为nullok
即可。在 Debian 上,这将是/etc/pam.d/common-auth
,不同的 Unix 或 Linux 发行版可能会将其放在其他地方(例如,在特定文件中su
)附加说明:要使命令在使用 时无需密码即可成功
nullok_secure
,它需要在存在/etc/securetty
或不存在的 TTY 上运行/etc/securetty
(这使得语句“PAM_TTY 设置为 /etc/securetty 中的值之一”始终为真)。如果没有 TTY,这将无关紧要,并且总是会失败。