设置基于 SSH 密钥的身份验证后,建议人们禁用 SSH 密码身份验证。
这是通过导航到/etc/ssh/sshd_config
并确保以下行没有被注释掉来完成的:
PasswordAuthentication no
一些教程,例如
还建议设置
UsePAM no
执行此操作后,我注意到我不再收到来自主机的会话通知。例如,当我想关闭/重新启动它时,终端会挂起,我不再收到:
Connection to 192.168.0.3 closed by remote host.
Connection to 192.168.0.3 closed.
我读过了这里一个人应该“可能想继续使用它”。此外,它实际上可能有助于您获得更安全。
问题:
- 它究竟
UsePAM no
对安全有何贡献? - 如果我禁用,我还能以某种方式获取会话状态吗
UsePAM
?
答案1
我复制了默认配置文件中的注释
将其设置为“yes”以启用 PAM 身份验证、帐户处理和会话处理。如果启用此选项,将允许通过 ChallengeResponseAuthentication 和 PasswordAuthentication 进行 PAM 身份验证。根据您的 PAM 配置,通过 ChallengeResponseAuthentication 进行 PAM 身份验证可能会绕过“PermitRootLogin without-password”的设置。如果您只希望在没有 PAM 身份验证的情况下运行 PAM 帐户和会话检查,请启用此选项,但将 PasswordAuthentication 和 ChallengeResponseAuthentication 设置为“no”。
由于这些原因,仅禁用 PasswordAuthentication 和 ChallengeResponseAuthentication 让 pam 设置为处理帐户和会话人员我复制了这些模块类型的用途
帐户
此模块类型执行非基于身份验证的帐户管理。它通常用于根据一天中的时间、当前可用的系统资源(最大用户数)或申请人的位置来限制/允许对服务的访问——“root”仅在控制台上登录。
会议
此模块类型与在为用户提供服务之前/之后需要为用户做的事情相关。这些事情包括记录与用户打开/关闭某些数据交换、安装目录等有关的信息。
您可以检查 etc/pam.conf 中的 pamd 配置文件 etc/pam.d/*,并仔细检查模块的作用。此外,连接终止消息似乎与 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));
}
就我而言,无论 UsePAM 的值是什么,它都会打印该消息。