2013-03-12 79 views
1

我們都知道,linux系統調用setsid()允許我們隨時創建一個新的會話,雖然典型的做法是當我們登錄或當我們想要啓動一個新的守護進程時。我注意到linux-PAM(可插入認證模塊)也有「會話管理」的概念,所以我的問題是: Linux PAM中的會話與setsid()創建的會話是否相同? 通常在Linux PAM會話中可以做些什麼? 謝謝。linux-PAM會話是否與linux進程會話相同?

回答

4

簡短的回答是否定的,它們是不同的東西,但處理登錄會話的進程應該處理它們兩個。

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,這對於過程控制和信號處理具有各種低級影響。