2

我们都知道 linux 系统调用 setsid() 允许我们在任何时候创建一个新的会话,虽然典型的做法是当我们登录或者当我们想要启动一个新的守护进程时。而且我注意到linux-PAM(可插入身份验证模块)也有“会话管理”的概念,所以我的问题是:Linux PAM中的会话与setsid()创建的会话相同吗?在 linux PAM 会话中通常可以做什么?谢谢。

4

1 回答 1

5

简短的回答是否定的,它们是不同的东西,但是处理登录会话的进程应该同时处理它们。

PAM 会话是 libpam 内部的一个概念。简而言之,当使用 PAM 的应用程序启动时,它会调用pam_start然后调用一个或多个 PAM 函数,这些函数又由 libpam 分派到 PAM 模块。其中两个调用是pam_open_sessionpam_close_session

PAM 会话的目标是处理(通常是交互式的,但不一定是)登录会话的设置和拆卸。因此,会话组中配置的 PAM 模块通常会执行以下操作,例如将用户添加到 utmp、设置任何每次登录环境(例如,如果配置了这样的东西,则为本地 tmpdir)、存储 Kerberos 凭据等。在会话关闭时,他们将撤消这些更改。

请注意,这意味着调用的进程必须pam_open_session保留登录会话的长度,以便它可以pam_close_session在结束时调用。没有什么魔法可以让这一切发生。

setsid是低得多的东西。 setsid与进程组大致处于同一级别,进程组是通常连接到 tty(控制终端)的相关进程组。这样做的目的主要是用于 shell 会话管理:您的会话是在您关闭 shell 时通常应该接收 SIGHUP 的所有进程,您可能希望通过进程管理(例如挂起和继续)进行管理,等等。您的 shell 会话组中的所有进程都有一个设置为伪 tty 的控制终端,这对进程控制和信号处理具有各种低级含义。

于 2013-03-17T06:24:22.137 回答