据我所知,PAM不能确定用户的外壳,这留给了应用程序。PAM的会话模块执行通用操作并检查使用该特定服务的每次登录所必须执行的操作。如果应用程序随后要启动外壳程序,则可以这样做,并且通常会在用户数据库中查找该外壳程序。
假设您的问题是关于OpenSSH的,那就正是它的作用:一旦用户通过身份验证,并且完成了PAM会话的工作(如果配置为使用PAM¹),则ssh服务器将在用户数据库中查找shell(直接而不是直接)。通过PAM库)。
用户数据库不仅限于/usr/passwd
和朋友。在Linux(我假设你正在使用,因为你提到shadow
),是什么构成了用户数据库是由确定passwd
的设置/etc/nsswitch.conf
。在多计算机设置中,对本地数据库的常见添加是NIS和LDAP。如果您要使用的外壳不是该外壳,则/etc/passwd
可能是要配置的外壳(尽管有点奇怪,如果您告诉我们您要完成的操作,也许人们会提供更好的建议)。
如果您希望用户没有完全的外壳程序访问权限,自然的解决方案是更改/etc/passwd
为放置受限制的外壳程序-可能是rssh以仅允许一些文件复制类型的应用程序,例如scp,rsync和cvs。您还可以在用户~/.ssh/authorized_keys
文件中使用强制命令。
如果您想查看ssh服务器的运行情况,请以方式启动守护程序ssh -ddd
。您也可以通过使用来获取客户端的视图ssh -vvv
,尽管在这里服务器视图是您最感兴趣的。
¹
如果配置了PAM支持和OpenSSH的只使用PAM UsePAM
指令被设置为yes
在sshd_config
。即使使用PAM,它也提供PAM之外的其他身份验证方法。特别是公共密钥身份验证不通过PAM。