如何使用 pam 阻止用户进行 ssh 访问?

如何使用 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 的工作原理。

答案1

使用access.conf阻止ssh,并且仅使用ssh,登录不起作用。但是,可以通过使用pam_access另一个配置文件来完成。

首先,必须将 PAM 配置为使用 pam_access。可能不是默认情况下。 PAM 配置account required pam_access.so中应该有一行sshd,可能是通过password-auth配置文件,sshd 配置可能会包含该行。

在 Fedora 上,authselect可用于启用 PAM 配置以使用 pam_access:

sudo authselect enable-feature with-pamaccess

此时,人们可能会认为可以通过access.conf以下行来阻止访问:

-:username:sshd

这并不能防止用户名使用服务时免于访问sshd。原因是 pam_access 联机帮助页中的这一点:

...或 PAM 服务名称(如果是)非联网的登录。

由于ssh是网络登录(PAM的RHOST字段已定义),因此不使用服务名称。仅使用远程主机名、IP 地址、网络组等。

此联机帮助页并不完全准确,因为仅在非联网登录时才使用 PAM 服务名称和非 tty。本地登录,例如在控制台登录提示符、桌面问候语或运行 sudo 时,将使用关联的 tty 或 X 显示而不是服务名称。

实际上,服务名称仅用于后台登录,例如 atd 或 crond。因此,您不能仅以这种方式阻止 ssh,因为 access.conf 中无法过滤 ssh 与其他任何内容。

长话短说

人们可以限制所有远程登录,不仅可以使用 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 地址应该可以,但对我来说不行。

相关内容