배경
VPN Single Sign On 을 달성하는 가장 좋은 방법을 결정하기 위해 OS X 로그인 프로세스를 더 잘 이해하려고합니다 .
내가 틀렸다면 저를 바로 잡으십시오. 그러나 나는 믿습니다.
launchd(8)
를 호출 하여에 대해 실행 을gettyent(3)
결정 합니다 .ttys(5)
loginwindow.app
/dev/console
loginwindow.app
system.login.console
인증 데이터베이스가 다음 메커니즘을 지정하는 인증 권한 획득 시도 (기능에 대한 이해와 함께 나열 됨) 권한이없는authd
프로세스 는 프로세스 내에서 실행 되고 (root로) 권한이없는SecurityAgent
프로세스 는 프로세스 내에서 실행됩니다 (_securityagent).builtin:policy-banner
( 설정된 경우 로그인 창 배너 표시 ).loginwindow:login
(자격 증명을위한 프롬프트).builtin:login-begin
builtin:reset-password,privileged
( Apple ID를 사용하여 비밀번호를 재설정 합니다 ).builtin:forward-login,privileged
부팅시 EFI의 자격 증명을 전달합니다.builtin:auto-login,privileged
(부팅시 자동 로그인 자격 증명을 적용합니다).builtin:authenticate,privileged
( 서비스를 호출pam_authenticate(3)
하고authorization
"uid"컨텍스트 값을 설정합니다).PKINITMechanism:auth,privileged
TGT를 확보하여 Kerberos를 초기화합니다.builtin:login-success
loginwindow:success
(무단 원격 액세스로부터 로그인 세션을 보호하고, 시스템의 utmp 및 utmpx 데이터베이스에 로그인을 기록하고, 콘솔 터미널의 소유자와 권한을 설정합니다).HomeDirMechanism:login,privileged
(사용자의 홈 디렉토리를 마운트합니다).HomeDirMechanism:status
(홈 디렉토리 마운트 진행 상태를 표시합니다).MCXMechanism:login
(구성 프로파일을 적용합니다).loginwindow:done
(글로벌 시스템 기본값을 포함하도록 사용자의 환경 설정을 재설정합니다. 사용자 환경 설정을 사용하여 마우스, 키보드 및 시스템 사운드를 구성합니다. 사용자의 그룹 권한을 설정합니다. 디렉토리 서비스에서 사용자 레코드를 검색하여 해당 정보를 세션에 적용합니다. 사용자의 컴퓨팅을로드합니다. 환경-환경 설정, 환경 변수, 장치 및 파일 권한, 키 체인 액세스 등을 포함하고 Dock, Finder 및 SystemUIServer를 시작하고 사용자의 로그인 항목을 시작합니다).
질문
각 메커니즘의 기능에 대한 이해를 확인하고 싶습니다.
소스 코드를 공개적으로 사용할 수 있습니까? 비
builtin
메커니즘은에서 찾을 수있는 플러그인으로 정의되어/System/Library/CoreServices/SecurityAgentPlugins
있지만 빌드 된 소스를 찾을 수 없다는 것을 알고 있습니다.builtin
메커니즘이 정의 된 곳도 찾을 수 없습니다 .소스를 사용할 수없는 경우 메커니즘이 어디에나 문서화되어 있습니까?
관찰
어떻게 할 수
loginwindow:login
가 불려 갔을 경우 자격 증명을 요청 하기 전에builtin:forward-login
그리고builtin:auto-login
, 둘 중 하나의 우회 할 수있는 GUI를 유발? 이러한 자격 증명에 대한 컨텍스트를 검사하고 존재하는 경우 스스로 건너 뜁니까? 이상해 보인다.또한 Apple의 802.1X 인증 기술 백서에 설명 된대로 :
로그인 창 모드가 구성되고 사용자가 로그인 창에 사용자 이름과 비밀번호를 입력하면 두 가지 일이 발생합니다. 먼저 로그인 창은 사용자가 입력 한 사용자 이름과 암호를 사용하여 802.1X를 통해 네트워크에 컴퓨터를 인증합니다. 802.1X 인증에 성공하면 로그인 창에서 동일한 사용자 이름과 비밀번호를 외부 디렉토리에 인증합니다.
해당 인증의 두 번째 단계는
pam_opendirectory.so
모듈에 의해 처리되며 현재 존재하는 네트워크에 의존하기 때문에 첫 번째 단계 (802.1X를 통해 네트워크에 인증)는 반드시 그 전에 수행되어야합니다. 즉,builtin:authenticate
메커니즘 전에 발생해야합니다 .loginwindow
플러그인 바이너리에 대한 일반적인 검사를 통해 802.1X 인증을 처리하는 것으로 보이지만 이전에 플러그인 내에서 호출 된 유일한 메커니즘builtin:authenticate
은loginwindow:login
입니다. 이 메커니즘이 로그인 프롬프트를 표시 할뿐만 아니라 802.1X 인증을 시도한다고 생각하는 것이 맞습니까? (그렇다면 약간 허잡 한 IMHO처럼 보일뿐만 아니라 EFI / 자동 로그인의 자격 증명을 802.1X 로그인 창 인증에 사용할 수 없음을 나타냅니다.)