SSH - 使用PAM 是还是不是?

San*_*rsu 11 server ssh networking

设置基于 SSH 密钥的认证后,建议禁用 SSH 密码认证。

这是通过导航到/etc/ssh/sshd_config并确保以下行未被注释掉来完成的:

PasswordAuthentication no
Run Code Online (Sandbox Code Playgroud)

一些教程,例如

也推荐设置

UsePAM no
Run Code Online (Sandbox Code Playgroud)

这样做之后,我注意到我不再收到来自主机的会话通知。例如,当我想关闭/重新启动它时,终端挂起,我不再得到:

Connection to 192.168.0.3 closed by remote host.
Connection to 192.168.0.3 closed.
Run Code Online (Sandbox Code Playgroud)

我在这里读到,人们应该“可能想要继续下去”。此外,它实际上可以帮助您变得更安全。

问题

  1. UsePAM no对安全性的贡献究竟有多大?
  2. 如果我禁用,我还能以某种方式获得会话状态UsePAM吗?

fus*_*tor 2

我复制了默认配置文件中的注释

将此设置为“yes”以启用 PAM 身份验证、帐户处理和会话处理。如果启用此功能,将允许通过 ChallengeResponseAuthentication 和 PasswordAuthentication 进行 PAM 身份验证。根据您的 PAM 配置,通过 ChallengeResponseAuthentication 进行的 PAM 身份验证可能会绕过“PermitRootLogin without-password”的设置。如果您只想在没有 PAM 身份验证的情况下运行 PAM 帐户和会话检查,请启用此功能,但将 PasswordAuthentication 和 ChallengeResponseAuthentication 设置为“no”。

由于这些原因,仅禁用 PasswordAuthentication 和 ChallengeResponseAuthentication 让 pam 设置为处理帐户和会话人员我复制了这些模块类型的用途

帐户

此模块类型执行基于非身份验证的帐户管理。它通常用于根据一天中的时间、当前可用的系统资源(最大用户数)或申请用户的位置(仅在控制台上“root”登录)来限制/允许对服务的访问。

会议

此模块类型与在向用户提供服务之前/之后需要为用户完成的事情相关联。这些事情包括记录有关与用户打开/关闭某些数据交换、安装目录等的信息。

您可以检查 etc/pam.conf etc/pam.d/* 中的 pamd 配置文件,并仔细检查模块的功能。此外,连接终止消息似乎与 pam 配置无关...它是由 sshd 专门在 clientloop.c 函数 client_loop 中发送的

         /*
          * In interactive mode (with pseudo tty) display a message indicating
          * that the connection has been closed.
          */
         if (have_pty && options.log_level != SYSLOG_LEVEL_QUIET) {
                 if ((r = sshbuf_putf(stderr_buffer,
                     "Connection to %.64s closed.\r\n", host)) != 0)
                         fatal("%s: buffer error: %s", __func__, ssh_err(r));
         }
Run Code Online (Sandbox Code Playgroud)

就我而言,无论 UsePAM 的值如何,它都会打印该消息。