Io-Redirection
如果 stdin 被重定向,為什麼 su 要求輸入密碼?我該如何避免這種情況?
我正在使用(對這個問題
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是下面引用的模組):空蕩蕩的
如果使用者的官方密碼為空,則此模組的預設操作是不允許使用者訪問服務。nullok 參數會覆蓋此預設值,並允許任何密碼為空的使用者訪問該服務。
nullok_secure
如果使用者的官方密碼為空,則此模組的預設操作是不允許使用者訪問服務。只要 PAM_TTY 的值設置為 /etc/securetty 中的值之一,nullok_secure 參數將覆蓋此預設值並允許任何密碼為空的使用者訪問服務。
我猜你的 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,這將無關緊要,並且總是會失敗。