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.app
para/dev/console
.loginwindow.app
tenta adquirir osystem.login.console
direito 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 noauthd
processo (como root), enquanto aqueles que não são privilegiados são executados noSecurityAgent
processo (como _securityagent):builtin:policy-banner
(exibe o banner da janela de login , se definido).loginwindow:login
(solicita credenciais).builtin:login-begin
builtin: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)
paraauthorization
serviço; conjuntos "uid" valor de contexto).PKINITMechanism:auth,privileged
(inicializa o Kerberos obtendo um TGT).builtin:login-success
loginwindow: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-
builtin
mecanismos 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 osbuiltin
mecanismos estão definidos.Se a fonte não estiver disponível, os mecanismos estão documentados em algum lugar?
Observações
Como
loginwindow:login
solicitar credenciais se ela é invocada antesbuiltin:forward-login
ebuiltin:auto-login
uma 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.so
mó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:authenticate
mecanismo.De uma inspeção casual do
loginwindow
biná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.)