我们都知道linux系统调用setsid()允许我们随时创建一个新的会话,尽管典型的做法是我们登录或者想要启动一个新的守护进程。我注意到linux-PAM(可插拔认证模块)也有“会话管理”的概念,所以我的问题是: Linux PAM中的会话是否与setsid()创建的会话相同? 通常在Linux PAM会话中可以做些什么? 感谢。
答案 0 :(得分:4)
简短的回答是否定的,它们是不同的东西,但处理登录会话的进程应该处理它们。
PAM会话是libpam内部的概念。简而言之,当使用PAM的应用程序启动时,它会调用pam_start
然后调用一个或多个PAM函数,而这些函数又由libpam调度到PAM模块。其中两个来电是pam_open_session
和pam_close_session
。
PAM会话的目标是处理(通常是交互式的,但不一定是)登录会话的设置和拆除。因此,在会话组中配置的PAM模块通常会执行诸如将用户添加到utmp,设置任何每个登录环境(例如,如果配置此类事物的本地tmpdir),存储Kerberos凭据等操作。在会话结束时,他们将撤消这些更改。
请注意,这意味着调用pam_open_session
的进程必须保持登录会话的长度,以便在结束时调用pam_close_session
。没有任何魔法可以实现这一点。
setsid
是一个低得多的东西。 setsid
与进程组大致处于同一级别,进程组是通常附加到tty(控制终端)的相关进程组。其目的主要是用于shell会话管理:您的会话是关闭shell时通常应该接收SIGHUP的所有进程,您可能希望通过进程管理(例如,挂起和继续)等来管理。 shell的会话组中的所有进程都有一个设置为伪tty的控制终端,它对进程控制和信号处理有各种低级别的影响。