系统在处理 SSH 连接时经历了哪些步骤?

系统在处理 SSH 连接时经历了哪些步骤?

系统在处理 SSH 连接时经历了哪些步骤?

  1. 我们尝试通过ssh登录
  2. sshd启动 pam 和 pam 模块来验证我们的身份
  3. 根据 pam 配置,我们需要提供用户名和密码(pam 检查passwdshadow文件)
  4. pam 检查hosts.allow/deny/etc/shells、 和其他内容
  5. 如果一切顺利我们就登录了
  6. ???
  7. 外壳已启动

所以我的问题是什么机制负责检查在passwd文件中将哪个 shell 分配给用户(在步骤 6 中)?是 pam 本身、某些特定的 pam 模块sshd还是其他什么?我知道我可以passwd通过编写 pam 模块来替换该文件(用于检查用户名和密码),但是如何替换passwdshell 条目的文件?

答案1

据我所知,PAM 无法确定用户的 shell,这由应用程序决定。 PAM 的会话模块执行通用操作并检查,每次使用该特定服务登录时都必须执行这些操作和检查。如果应用程序随后想要启动 shell,则可以随意执行,并且通常会在用户数据库中查找 shell。

假设你的问题是关于开放SSH,这正是它的作用:一旦用户通过身份验证,并且 PAM 会话内容已完成(如果配置为使用 PAM1),ssh 服务器会在用户数据库中查找 shell(直接,而不是通过 PAM 库)。

用户数据库不限于/usr/passwd和朋友。在Linux上(我假设您在提到后正在使用Linux ),用户数据库的组成部分由中的设置shadow决定passwd/etc/nsswitch.conf。在多计算机设置中,本地数据库的常见添加内容是NISLDAP。如果您想使用的 shell 不是 中的 shell /etc/passwd,则可能需要配置以下内容(尽管这会有点奇怪,如果您告诉我们您要实现的目标,也许人们可以提供更好的建议)。

如果您想让用户没有完全的 shell 访问权限,自然的解决方案是更改/etc/passwd为放置受限的 shell — 也许RSSH仅允许少数文件复制类型的应用程序,例如 scp、rsync 和 cvs。您还可以在用户的​​目录中使用强制命令~/.ssh/authorized_keys文件

如果您想查看 ssh 服务器正在执行的操作,请以 启动守护进程ssh -ddd。您还可以使用 获取客户端的视图ssh -vvv,尽管这里您最感兴趣的是服务器的视图。

1 OpenSSH 仅在配置了 PAM 支持且UsePAM指令设置为yesin时才使用 PAM sshd_config。即使它使用 PAM,它也提供除 PAM 之外的其他身份验证方法;特别是公钥身份验证不通过 PAM。

相关内容