fundo
Estou tentando entender melhor o processo de login do OS X, para decidir a melhor maneira de obter o Logon único da VPN .
Por favor, corrija-me se estiver errado, mas acredito que
launchd(8)chamagettyent(3)e assim determina a partirttys(5)de executarloginwindow.apppara/dev/console.loginwindow.apptenta adquirir osystem.login.consoledireito de autorização, para o qual o banco de dados de autorização especifica os seguintes mecanismos (listados juntamente com meu entendimento de sua função); aqueles que são privilegiados são executados noauthdprocesso (como root), enquanto aqueles que não são privilegiados são executados noSecurityAgentprocesso (como _securityagent):builtin:policy-banner(exibe o banner da janela de login , se definido).loginwindow:login(solicita credenciais).builtin:login-beginbuiltin:reset-password,privileged(executa redefinição de senha usando o Apple ID ).builtin:forward-login,privileged(encaminha credenciais do EFI na inicialização).builtin:auto-login,privileged(aplica credenciais de login automático na inicialização).builtin:authenticate,privileged(invocapam_authenticate(3)paraauthorizationserviço; conjuntos "uid" valor de contexto).PKINITMechanism:auth,privileged(inicializa o Kerberos obtendo um TGT).builtin:login-successloginwindow:success(protege a sessão de logon do acesso remoto não autorizado; registra o logon nos bancos de dados utmp e utmpx do sistema; define o proprietário e as permissões do terminal do console).HomeDirMechanism:login,privileged(monta o diretório inicial do usuário).HomeDirMechanism:status(exibe o progresso da montagem do diretório inicial).MCXMechanism:login(aplica perfis de configuração).loginwindow:done(redefine as preferências do usuário para incluir padrões globais do sistema; configura o som do mouse, teclado e sistema usando as preferências do usuário; define as permissões de grupo do usuário; recupera o registro do usuário dos Serviços de Diretório e aplica essas informações à sessão; carrega a computação do usuário ambiente - incluindo preferências, variáveis de ambiente, permissões de dispositivos e arquivos, acesso a chaves etc. - inicia o Dock, Finder e SystemUIServer; inicia os itens de login do usuário).
Questões
Gostaria muito de confirmar minha compreensão da função de cada mecanismo:
O código fonte deles está disponível abertamente? Eu sei que os não-
builtinmecanismos são definidos por plugins que podem ser encontrados em/System/Library/CoreServices/SecurityAgentPlugins, mas não consigo encontrar a fonte a partir da qual eles foram criados. Também não consigo encontrar onde osbuiltinmecanismos estão definidos.Se a fonte não estiver disponível, os mecanismos estão documentados em algum lugar?
Observações
Como
loginwindow:loginsolicitar credenciais se ela é invocada antesbuiltin:forward-loginebuiltin:auto-loginuma das quais causa o desvio da GUI? Ele inspeciona o contexto em busca de tais credenciais e pula a si próprio se estiverem presentes? Parece estranho.Além disso, conforme descrito no white paper técnico da autenticação 802.1X da Apple :
Quando o Modo da janela de login está configurado e um usuário digita um nome de usuário e senha na janela de login, duas coisas acontecem. Primeiro, a janela de login autenticará o computador via 802.1X na rede usando o nome de usuário e a senha que o usuário digitou. Depois que a autenticação 802.1X for bem-sucedida, a janela de login autenticará o mesmo nome de usuário e senha no diretório externo.
Como o segundo estágio dessa autenticação é tratado pelo
pam_opendirectory.somódulo e depende da presença da rede, o primeiro estágio (autenticação via 802.1X na rede) deve necessariamente ocorrer antes disso. Ou seja, deve ocorrer antes dobuiltin:authenticatemecanismo.De uma inspeção casual do
loginwindowbinário do plug - in, parece que ele lida com essa autenticação 802.1X - mas o único mecanismo invocado nesse plug-in anteriormentebuiltin:authenticateéloginwindow:login. Estou correto ao pensar que esse mecanismo não apenas exibe o prompt de login, mas também tenta a autenticação 802.1X? (Nesse caso, isso não apenas parece um IMHO um tanto desleixado, mas também sugere que as credenciais do EFI / login automático não podem ser usadas para autenticação da janela de login 802.1X.)