/sbin/nologin 和 /bin/false 有什麼區別?
我經常聽到它建議通過將使用者帳戶的外殼設置為
/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/false
in/etc/rsh
,這將禁止使用這些 shell 的使用者chsh
在他們獲得 shell 的不幸事件中使用更改他們的 shell。FTP 守護程序可能不允許使用不在 /etc/shells 中的 shell 訪問使用者,或者他們可能會使用他們希望的任何其他邏輯。在任何情況下都應避免執行 FTP,因為
sftp
(提供類似的功能)類似但安全。一些站點用於/sbin/nologin
禁用 shell 訪問,同時通過將其放入/etc/shells
. 如果允許使用者創建 cronjobs,這可能會打開一個後門。在任何一種情況下,
scp
都不會使用無效的 shell。scponly
在這種情況下可以用作外殼。此外,shell 的選擇會影響
su -
(AKAsu -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,這將阻止登錄。