如何使用 pam 阻止對使用者的 ssh 訪問?
上週左右我一直在四處
/etc/ssh/sshd_config
尋找,試圖弄清楚如何阻止除了我自己之外的所有使用者的 ssh 訪問。我的目標是讓除了我之外的所有使用者都無法通過 ssh 登錄,並且我的帳戶可以通過 2fa+密碼或基於密鑰的身份驗證訪問。我目前有後半部分的工作,但我不知道如何阻止除我自己以外的所有使用者。我已經有了我希望在我的工作中工作的線路
sshd_config
:AllowUsers me DenyUsers *
但是當我嘗試 ssh 到另一個使用者帳戶(例如,
fred
)時,它仍然提示我使用Password:
. 我還嘗試在我的頂部添加以下行/etc/pam.d/sshd
:auth required pam_succeed_if.so user ingroup ssh
並且只有我自己在
ssh
小組中。我做錯了什麼來阻止除我自己以外的所有使用者進行 ssh 訪問?我必須使用 PAM,因為這就是我的 2fa 的工作方式。
用於防止ssh
access.conf
,並且只有 ssh,登錄不起作用。但是,它可以通過pam_access
與另一個配置文件一起使用來完成。首先,必須將 PAM 配置為使用 pam_access。預設情況下可能不是。PAM 配置
account required pam_access.so
中應該有一行 with ,可能是通過配置文件,sshd 配置可能會包含該行。sshd``password-auth
在 Fedora 上,
authselect
可用於啟用 PAM 配置以使用 pam_access:sudo authselect enable-feature with-pamaccess
在這一點上,人們可能會認為可以通過以下一行來阻止訪問
access.conf
:-:username:sshd
這不能阻止使用者在使用服務時訪問
sshd
。原因是 pam_access 手冊頁中的這一點:… 或 PAM 服務名稱(如果是非網路登錄)。
由於 ssh 是網路登錄(
RHOST
定義了 PAM 的欄位),所以不使用服務名稱。僅使用遠端主機名、IP 地址、網路組等。該手冊頁並不完全準確,因為 PAM 服務名稱僅在登錄為 non-networked和 non-tty時使用。本地登錄,例如在控制台登錄提示、桌面歡迎程序或執行 sudo,將使用相關的 tty 或 X 顯示而不是服務名稱。
實際上,服務名稱僅用於後台登錄,例如 atd 或 crond。因此,您不能以這種方式阻止 ssh,因為在 access.conf 中無法過濾 ssh 與其他任何內容。
TL; 博士
可以通過以下方式限制所有遠端登錄,不僅可以使用 ssh,還可以使用所有其他服務:
+:username:LOCAL -:username:ALL
要僅適用於 ssh,必須將 PAM 配置為對 sshd 使用不同的 access.conf 文件。將這樣的行添加到
/etc/pam.d/sshd
,可能就在包含以下內容的行之前account include password-auth
:account required pam_access.so accessfile=/etc/security/access-sshd.conf
現在
/etc/security/access-sshd.conf
使用僅適用於 ssh 登錄的訪問控制進行創建。例子:# Don't allow user 'username' access -:username:ALL # Only allow user 'trusted' access and no one else -:ALL EXCEPT trusted:ALL # Only allow user 'username' when they are coming from localhost +:username:127.0.0.1 ::1 -:username:ALL
請注意,使用
localhost
而不是數字 IPv4 和 IPv6 地址應該可以工作,但不適合我。