O que os mecanismos de autorização do OS X realmente fazem?

13

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

  1. launchd(8)chama gettyent(3)e assim determina a partir ttys(5)de executar loginwindow.apppara /dev/console.

  2. loginwindow.apptenta adquirir o system.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 no authdprocesso (como root), enquanto aqueles que não são privilegiados são executados no SecurityAgentprocesso (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(invoca pam_authenticate(3)para authorizationserviç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:

  1. 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 os builtinmecanismos estão definidos.

  2. Se a fonte não estiver disponível, os mecanismos estão documentados em algum lugar?

Observações

  1. Como loginwindow:loginsolicitar credenciais se ela é invocada antes builtin:forward-login e builtin: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.

  2. 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 do builtin: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 anteriormente builtin: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.)

eggyal
fonte

Respostas:

1
  1. Pelo que me lembro, o loginwindow: login é realmente usado para gerar a janela de login da GUI, semelhante ao builtin: policy-banner. Portanto, é lógico ser gerado antes do restante das ações. Portanto, a janela da GUI é realmente irrelevante / ignorável, não as credenciais em si.

  2. O que exatamente você gostaria de modificar e com que finalidade? Por exemplo, se você precisar que o plug-in de autorização seja chamado em outras situações, poderá fazê-lo editando auth.db.

Além disso, os subsistemas builtin: authenticate devem lidar com a diferença entre 802.1X e autenticação local.

Overmind
fonte
1
builtin:forward-login,privileged

Encaminha o logon bem-sucedido do FileVault para a janela de logon do OS X e ignora a necessidade de logon lá. É como um logon único. Desativei isso no meu ambiente, pois não estava usando o perfil 802.1X que eu tinha configurado. Eu tentaria fazer isso.

OS X: Como desativar o login automático quando o FileVault está ativado

sudo defaults write /Library/Preferences/com.apple.loginwindow DisableFDEAutoLogin -bool YES
mistacabbage
fonte