Io-Redirection

如果 stdin 被重定向,為什麼 su 要求輸入密碼?我該如何避免這種情況?

  • February 9, 2020

我正在使用(對這個問題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_unixpam_unix是下面引用的模組):

空蕩蕩的

如果使用者的官方密碼為空,則此模組的預設操作是不允許使用者訪問服務。nullok 參數會覆蓋此預設值,並允許任何密碼為空的使用者訪問該服務。

nullok_secure

如果使用者的官方密碼為空,則此模組的預設操作是不允許使用者訪問服務。只要 PAM_TTY 的值設置為 /etc/securetty 中的值之一,nullok_secure 參數將覆蓋此預設值並允許任何密碼為空的使用者訪問服務。

我猜你的 PAM 設置正在使用nullok_secure. Debian 10 就是這種情況。

只需替換nullok_securenullok即可。在 Debian 上,這將是/etc/pam.d/common-auth,不同的 Unix 或 Linux 發行版可能會將其放在其他地方(例如,在特定文件中su

附加說明:要使命令在使用 時無需密碼即可成功nullok_secure,它需要在存​​在/etc/securetty 不存在的 TTY 上執行/etc/securetty(這使得語句“PAM_TTY 設置為 /etc/securetty 中找到的值之一”始終為真)。如果沒有 TTY,這將無關緊要,並且總是會失敗。

引用自:https://unix.stackexchange.com/questions/566624