디스플레이 관리자는 사용자를 어떻게 로그인합니까?

디스플레이 관리자는 사용자를 어떻게 로그인합니까?

나만의 디스플레이/로그인 관리자 개발을 시작하려고 합니다. 나는 모든 X11 관련 작업을 처리할 수 있을 것이라고 생각했지만 사용자가 자신의 사용자 이름과 비밀번호를 입력하면 어떻게 해야 할지 몰랐다는 것을 깨달았습니다.

디스플레이 관리자가 사용자 이름과 비밀번호를 갖게 되면 어떤 역할을 합니까? 어떻게 로그인하나요? 구성 파일 가져오기와 같은 로그인 관리자에 대한 다른 특정 요구 사항이 있습니까? 아니면 이 모든 것이 데스크톱 환경에 따라 달라지나요?

답변1

이 문제를 이해하는 데 어느 정도 진전이 있었다고 생각하므로 여기에 제가 알고 있는 내용을 게시하겠습니다. 이 답변은 현재 다음을 사용하는 사람들에게 효과적입니다.폴리아크릴아미드. 다른 로그인 방법을 발견하면 더 추가하겠습니다.

디스플레이 관리자 필드에 사용자 이름과 비밀번호를 입력하면 디스플레이 관리자가 이 두 필드를 사용하여 PAM 인증 프로세스를 시작합니다.

먼저 를 호출합니다 pam_start(). 이는 PAM에게 어떤 세션 기능을 사용하고 있는지(우리는 그것이 무엇인지 배우게 됩니다) pam_handle_t초기화할 구조를 알려줍니다. 이 pam_handle_t구조를 모든 후속 호출에 전달합니다 .

그런 다음 를 사용하여 사용자 이름과 같은 속성을 설정할 수 있습니다 pam_set_item(). 여기서 사용자 이름을 설정할 필요는 없습니다. 에 전화하면 pam_authenticate()아직 가지고 있지 않은 정보를 요청합니다.

다음으로 전화하여 pam_authenticate()사용자 이름과 비밀번호가 유효한지 확인합니다. 이 시점에서 pam_authenticate()다음을 사용하여 없는 정보를 얻으세요.대화 기능. 자세한 내용은 해당 링크를 확인하세요. 간단히 말해서 PAM은 pam_start()호출 후 전달한 구조에서 제공한 대화 기능을 호출합니다 pam_authenticate(). 그런 다음 일련의 메시지를 대화 기능에 전달합니다. 그렇다면 사용자 이름 msg_stylePAM_PROMPT_ECHO_ON요청하고, 그렇다면 msg_style비밀번호 PAM_PROMPT_ECHO_OFF를 요청하세요. 다른 두 옵션은 사양에 설명되어 있으며 오류 및 정보 메시지에 사용됩니다. 메시지 유형에 따라 resp배열을 응답으로 채우고 올바른 오류 코드를 반환합니다.

이제 pam_authenticate()를 반환 하면 PAM_SUCCESS사용자가 존재한다는 의미입니다. 그런 다음 현재 사용자에게 로그인 권한이 있는지 확인하기 위해 전화해야 합니다 pam_acct_mgmt()(이 권한이 어디에 있는지, 어떻게 설정하는지 모르겠습니다).

이 시점에서 우리는 토큰을 얻은 pam_setcred()다음 세션을 여는 데 사용 합니다 pam_open_session(). 이게 무슨 목적인지, 실제로 토큰이 어떻게 사용되는지는 모르겠지만 필수입니다. 더 알고 계시다면 알려주시기 바랍니다.

이제 를 사용하여 원하는 모든 bash 변수를 설정할 수 있습니다 pam_putenv(). 환경에 필요한 모든 것이 있으면 새 프로세스를 포크한 다음 exec명령을 실행할 수 있습니다 startx.

이 프로세스가 완료되면 사용자는 로그아웃됩니다. 이 시점에서 pam_close_session(), pam_setcred(선택적으로 자격 증명 제거)를 pam_end()순서대로 호출합니다 .

이 내용 중 잘못된 내용이 있거나 더 많은 정보를 추가해야 하는 경우 알려주시기 바랍니다. 너는 볼 수있어내 디스플레이 관리자(아직 개발 중)을 예로 들어보겠습니다.

관련 정보