Linux

/sbin/nologin 和 /bin/false 有什麼區別?

  • September 1, 2013

我經常聽到它建議通過將使用者帳戶的外殼設置為/bin/false. 但是,在我現有的 Linux 系統上,我看到大量現有帳戶(所有這些帳戶都是服務帳戶)都有一個外殼/sbin/nologin

我從手冊頁中看到/sbin/nologin向使用者列印一條消息,說明該帳戶已被禁用,然後退出。大概/bin/false不會列印任何東西。

我還看到它/sbin/nologin列在 中/etc/shells,而/bin/false沒有。

手冊頁說 FTP 將禁用具有列出的 shell 的使用者的訪問權限,/etc/shells並暗示其他程序可能會這樣做。這是否意味著有人可以使用具有/sbin/nologin外殼的帳戶進行 FTP 訪問?

這裡有什麼區別?我應該使用其中哪一個來禁用使用者帳戶,以及在什麼情況下?上市還有哪些其他影響/etc/shells

/bin/false是一個實用程序,/bin/true它是 的伴侶,在某種抽象意義上有助於確保 unix 功能完整。然而,這些程序的緊急目的已經被發現;考慮 BASH 語句/some/program || /bin/true$? = 0無論/some/program.

正如您所指出的,緊急使用/bin/false是作為不允許登錄的使用者的空 shell。在這種情況下,系統的行為就像 shell 無法執行一樣。

POSIX(雖然我可能錯了,它可能是 SUS)限制這兩個命令除了返回適當的布爾值之外什麼都不做。

/sbin/nologin是一個 BSD 實用程序,具有與 (返回布爾值 false) 類似的行為/bin/false,但也列印輸出,這/bin/false是禁止的。這應該有助於使用者理解發生了什麼,儘管實際上許多終端仿真器會在 shell 終止時簡單地關閉,在某些情況下呈現消息幾乎不可讀。

上市沒有什麼/sbin/nologin意義/etc/shells。的標準效果/etc/shells是列出當使用者更改自己的 shell 時允許使用的程序chsh(並且沒有可靠的理由將自己的 shell 更改為/sbin/nologin)。超級使用者可以將任何人的外殼更改為任何內容。但是,您可能希望同時列出/sbin/nologin/bin/falsein /etc/rsh,這將禁止使用這些 shell 的使用者chsh在他們獲得 shell 的不幸事件中使用更改他們的 shell。

FTP 守護程序可能不允許使用不在 /etc/shells 中的 shell 訪問使用者,或者他們可能會使用他們希望的任何其他邏輯。在任何情況下都應避免執行 FTP,因為sftp(提供類似的功能)類似但安全。一些站點用於/sbin/nologin禁用 shell 訪問,同時通過將其放入/etc/shells. 如果允許使用者創建 cronjobs,這可能會打開一個後門。

在任何一種情況下,scp都不會使用無效的 shell。 scponly在這種情況下可以用作外殼。

此外,shell 的選擇會影響su -(AKA su -l) 的操作。特別是,/sbin/nologin如果是shell,輸出將列印到stdout;情況並非如此/bin/false。在任何一種情況下,執行命令su -cl都會失敗。

最後,答案:

要禁用帳戶,不依賴於這些,而是將 shell 設置為/sbin/nologin用於提供資訊(除非/sbin/nologin在 中/etc/shells,此時您應該使用/bin/false,但不應該使用)。相反,將密碼欄位設置/etc/passwd!,以保證crypt對無密碼有效。考慮以相同的方式設置雜湊/etc/shadow以避免錯誤。 passwd -l會為你做這件事。

禁用帳戶的第三種方法是將帳戶到期日期欄位設置為舊日期(例如usermod --expiredate 1)。如果您的設置允許使用者在沒有密碼的情況下對他們的 unix 帳戶進行身份驗證並且他們使用的服務不需要 shell,這將阻止登錄。

引用自:https://serverfault.com/questions/519215