处理SSH连接时,系统需要经过哪些步骤?


9

处理SSH连接时,系统需要经过哪些步骤?

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

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

Answers:


8

据我所知,PAM不能确定用户的外壳,这留给了应用程序。PAM的会话模块执行通用操作并检查使用该特定服务的每次登录所必须执行的操作。如果应用程序随后要启动外壳程序,则可以这样做,并且通常会在用户数据库中查找该外壳程序。

假设您的问题是关于OpenSSH的,那就正是它的作用:一旦用户通过身份验证,并且完成了PAM会话的工作(如果配置为使用PAM¹),则ssh服务器将在用户数据库中查找shell(直接而不是直接)。通过PAM库)。

用户数据库不仅限于/usr/passwd和朋友。在Linux(我假设你正在使用,因为你提到shadow),是什么构成了用户数据库是由确定passwd的设置/etc/nsswitch.conf。在多计算机设置中,对本地数据库的常见添加是NISLDAP。如果您要使用的外壳不是该外壳,则/etc/passwd可能是要配置的外壳(尽管有点奇怪,如果您告诉我们您要完成的操作,也许人们会提供更好的建议)。

如果您希望用户没有完全的外壳程序访问权限,自然的解决方案是更改/etc/passwd为放置受限制的外壳程序-可能是rssh以仅允许一些文件复制类型的应用程序,例如scp,rsync和cvs。您还可以在用户~/.ssh/authorized_keys文件中使用强制命令。

如果您想查看ssh服务器的运行情况,请以方式启动守护程序ssh -ddd。您也可以通过使用来获取客户端的视图ssh -vvv,尽管在这里服务器视图是您最感兴趣的。

¹ 如果配置了PAM支持和OpenSSH的只使用PAM UsePAM指令被设置为yessshd_config。即使使用PAM,它也提供PAM之外的其他身份验证方法。特别是公共密钥身份验证不通过PAM。


我想允许我的应用用户以普通用户身份登录Shell,而无需在系统中创建帐户。用户数据(用户名,密码和外壳程序)将存储在sqlite db中。第一步是sqlite pam模块,该模块对用户的数据库进行身份验证。第二步是提供从数据库读取的shell。因此,我认为可以通过编写适当的nis模块来实现。谢谢回答……
pbm

@pbm:我认为您不是想要的nisdb或者(或者是自定义模块)。
吉尔(Gilles)'所以

我的意思是“通过编写适当的(自定义)nss模块” ...
pbm 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.