Sshd

如何使用 pam 阻止對使用者的 ssh 訪問?

  • June 5, 2021

上週左右我一直在四處/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 地址應該可以工作,但不適合我。

引用自:https://unix.stackexchange.com/questions/387781