Linuxシステムコールsetsid()を使用すると、いつでも新しいセッションを作成できることは誰もが知っていますが、一般的な方法は、ログインするとき、または新しいデーモンを起動するときです。また、linux-PAM(プラガブル認証モジュール)にも「セッション管理」の概念があることに注意してください。私の質問は、Linux PAMのセッションはsetsid()によって作成されたセッションと同じですか?そして、Linux PAMセッションで通常何ができるでしょうか?ありがとう。
1 に答える
短い答えはノーです。それらは別のものですが、ログイン セッションを処理するプロセスは両方を処理する必要があります。
PAM セッションは libpam の内部概念です。簡単に言うと、PAM を使用するアプリケーションが起動すると、アプリケーションpam_start
は 1 つ以上の PAM 関数を呼び出して呼び出します。これらの関数は、libpam によって PAM モジュールにディスパッチされます。それらの呼び出しのうちの 2 つはpam_open_session
とpam_close_session
です。
PAM セッションの目的は、ログイン セッション (通常はインタラクティブですが、必ずしもそうではありません) のセットアップとティアダウンを処理することです。したがって、セッション グループで構成された PAM モジュールは、通常、ユーザーを utmp に追加する、ログインごとの環境をセットアップする (ローカル tmpdir などを構成する場合)、Kerberos 資格情報を保存するなどの処理を行います。セッションを閉じると、それらの変更が元に戻されます。
これは、呼び出しpam_open_session
を行うプロセスが、ログイン セッションの間pam_close_session
、終了時に呼び出すことができるようにする必要があることを意味することに注意してください。これを実現する魔法はありません。
setsid
もっと低いレベルのものです。 setsid
通常は tty (制御端末) に接続されているプロセスの関連グループであるプロセス グループとほぼ同じレベルです。その目的は、主にシェル セッション管理です。セッションは、シェルを閉じたときに通常 SIGHUP を受け取る必要があるすべてのプロセスであり、プロセス管理で管理する必要がある場合があります (たとえば、中断して続行するなど)。シェルのセッション グループ内のすべてのプロセスには、疑似 tty に設定された制御端末があります。これには、プロセス制御とシグナル処理に関するさまざまな低レベルの影響があります。