為什麼’bin’使用者需要一個登錄shell?
在對我的一個公共網路伺服器進行審計期間
/var/log/auth.log
,我發現了這一點:Jan 10 03:38:11 Bucksnort sshd[3571]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=61.19.255.53 user=bin Jan 10 03:38:13 Bucksnort sshd[3571]: Failed password for bin from 61.19.255.53 port 50647 ssh2
乍一看,這看起來像是
ssh
來自隨機黑客的典型登錄垃圾郵件;然而,當我仔細觀察時,我注意到了別的東西。大多數失敗的/var/log/auth.log
條目invalid user
都在其中說,就像這個:Jan 9 10:45:23 Bucksnort sshd[3006]: Failed password for invalid user sales from 123.212.43.5 port 10552 ssh2
關於失敗的登錄消息的令人不安的事情
bin
是它是一個有效的使用者,/etc/passwd
甚至有一個登錄外殼:[mpenning@Bucksnort ~]$ grep ^bin /etc/passwd bin:x:2:2:bin:/bin:/bin/sh
我以為我已經涵蓋了禁用時可以遠端登錄的所有預設使用者
PermitRootLogin
名/etc/ssh/sshd_config
;發現這個條目在我偏執的頭腦中開啟了新的可能性。如果服務以某種方式在 下執行bin
,那麼遠端可能有人可以通過機器上正在執行的服務以某種方式將 ssh 密鑰插入bin
使用者目錄,所以如果可能的話,我想完全禁用bin
使用者的登錄。問題
- 這台伺服器是遠端的,而且修復起來很昂貴(即,我將支付遠端手來連接 KVM,外加 KVM 租金)。我試圖弄清楚如果我將
/etc/passwd
條目更改為bin
如下所示可能會破壞什麼:
bin:x:2:2:bin:/bin:/bin/false
- 我執行了以下命令,試圖找出
bin
需要什麼……但是,這些命令沒有提供任何文件,而且我找不到bin
. 使用者到底bin
做了什麼?
$ sudo find / -group bin
$ sudo find / -user bin
- 是否有其他使用者應該將其登錄 shell 設置為
/bin/false
?僅供參考,我已經有了/bin/false
。www-data
- 我是不是太偏執了?
我正在執行 Debian,如果這很重要的話。
擁有有效 shell 且沒有密碼的使用者仍然可以通過非基於密碼的方法登錄,最常見的是 ssh 密鑰。執行 cron 作業需要有效的 shell。有效的 shell 也是
su bin -c 'wibble'
工作所必需的(至少在 Linux 上su bin -s /bin/sh -c 'wibble'
也可以工作)。在 的情況下
bin
,大多數係統從未像bin
正常操作那樣執行命令,因此將 shell 設置為/bin/false
就可以了。允許通過 SSH 登錄不存在任何直接攻擊的風險
bin
,因為這需要/bin/.ssh/authorized_keys
以使用者bin
或 root 身份創建。換句話說,進入的唯一方法就是進入。然而,擁有一個有效的 shell 確實會增加錯誤配置的風險。它還可以允許使用 SSH 以外的服務進行一些遠端攻擊;例如,使用者報告攻擊者可以daemon
通過 Samba 遠端設置密碼,然後使用該密碼通過 SSH 登錄。
DenyUsers
您可以通過在指令中列出系統使用者的名稱來堵住 SSH 漏洞/etc/ssh/sshd_config
(不幸的是,您不能使用數字範圍)。或者,相反,您可以放置一個AllowGroups
指令,只允許包含物理使用者的組(例如users
,如果您授予所有物理使用者該組成員資格)。在 Debian ( #274229 , #330882 , #581899 ) 中針對此問題送出了一些錯誤,目前已打開並歸類為“願望清單”。我傾向於同意這些是錯誤,系統使用者應該將
/bin/false
其作為他們的外殼,除非看起來有必要這樣做。