2013-03-12 5 views
1

리눅스 시스템 호출 setsid()는 우리가 로그인 할 때나 새로운 데몬을 시작하고자 할 때마다 우리가 원하는 언제든지 새로운 세션을 생성 할 수 있다는 것을 알고 있습니다. 그리고 linux-PAM (pluggable authentication module)도 "세션 관리"라는 개념을 가지고 있습니다. 따라서 제 질문은 입니다. Linux PAM의 세션은 setsid()가 작성한 세션과 동일합니까? 그리고 일반적으로 리눅스 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 (제어 터미널)에 연결된 프로세스의 관련 그룹 인 프로세스 그룹과 거의 같은 수준입니다. 그 목적은 주로 쉘 세션 관리를위한 것입니다. 세션은 쉘을 닫을 때 일반적으로 SIGHUP을 수신해야하는 프로세스, 프로세스 관리 (예 : 일시 중단 및 계속) 등으로 관리하고자하는 모든 프로세스입니다. 쉘의 세션 그룹에있는 모든 프로세스는 프로세스 제어 및 신호 처리에 대한 다양한 저수준 함의를 갖는 pseudo-tty로 설정된 제어 터미널을 갖습니다.