Debian 上預設 /etc/securetty 設置的目的是什麼?
我創建了一個 Debian 不穩定容器
debootstrap
並使用systemd-nspawn.service
.我可以使用 以 root 身份登錄
machinectl login
,但同時不能超過一次。當我執行第二次登錄時,它一進入就拒絕root
;它不會提示輸入密碼。如您所料,如果我查看系統日誌,它會顯示訪問被拒絕,
pam_securetty
因為 tty/dev/pts/2
“不安全”。這提出了幾個問題。
- 第一次登錄如何被
/dev/pts/0
認為是安全的?- 為什麼
/dev/pts/1
沒有在第二次登錄時使用?- 預設的 /etc/securetty 似乎列出了每種類型的 tty - 包括可以連接到調製解調器的串列線?我可以想像排除偽終端的原因。但是,如果你要允許所有類型的物理終端,那麼這個練習有什麼意義呢?!為什麼不使用一組(短)不允許以 root 身份登錄的 tty 類型?除了偽終端之外,是否有任何故意從列表中省略的內容,需要預設阻止?如果有故意遺漏,那為什麼不評論呢?
我能夠回答 Q1。無法形容的可怕答案是,在 Debian 拉伸(9-testing,
login-4.4-4
)中,/etc/securetty 包含 /dev/pts/0 和 /dev/pts/1 但不包含 /dev/pts/2。可以猜到這是專門為支持添加的systemd-nspawn
。一個是正確的。但這只會讓我對這些設置應該完成什麼感到更加困惑!
這意味著設置沒有任何意義。
顯然,支持串列安裝的發行版希望能夠允許第一個串列控制台。您的問題是為什麼最初的 Debian 開發人員認為啟用 pam_securetty 很有用,但將其配置為允許每種類型的 tty。因此,什麼會阻止分發使用更簡單的設置。
Poettering 提出了一個答案:基於securetty 使用的分類系統已經過時,發行版應該使用更簡單的設置。
https://github.com/systemd/systemd/issues/852#issuecomment-127759667
它來自一個 tty 命名為 static 的時代。但是今天最少的 tty 是真正的舊主機板串列埠。幾乎所有這些都是通過 USB 插入的,或者是偽 tty。無論哪種方式,它們的名稱都不像 /etc/securetty 所期望的那樣固定,因此整個概念已經過時了。
因此:請讓您的發行版在預設啟用 pam_securetty 的情況下停止發貨,這確實已成為過去。同時,從 /etc/pam.d/* 中的所有文件中手動刪除它,或者將所有潛在的目前和未來 pty 添加到 /etc/securetty。
https://github.com/systemd/systemd/issues/852#issuecomment-128564307
您可以從容器中刪除 /etc/securetty,這將允許 root 登錄所有 tty。