Como as opções avançadas do PAM funcionam exatamente?

2

Eu tenho lido tudo o que posso encontrar no PAM (por exemplo, link ), mas ainda estou confuso sobre como precisamente as opções avançadas devem funcionar. Por exemplo, toda referência diz isso:

Each of the four control-flag keywords (required, requisite, sufficient, and
optional) have an equivalent expression in terms of the [...] syntax:

required
    [success=ok new_authtok_reqd=ok ignore=ignore default=bad]

Meu entendimento é que os módulos podem retornar diversos tokens e que a ação associada a cada token é descrita no arquivo de configuração. Com base nesse entendimento, o que faz

new_authtok_reqd=ok

tem a ver com o sinalizador de controle obrigatório ? Qual é o significado / propósito de

ignore=ignore ?

Só isso:

success=ok

é o que eu acho que corresponde ao comportamento obrigatório , mas

default=bad

significa que se o módulo retornar algum outro token de ação, o módulo falhará? O token action = value success = ok é anulado por default = bad , ou vice-versa? Qual precede? Não está claro em nada que eu tenha lido.

Mais geralmente, suponha que eu tenha algo como

[success=done default=die]

O que acontece se o módulo retornar sucesso e outro token?

Por fim, não consigo encontrar a resposta para esta pergunta: cada valor ok, done, bad, die, ignore, reset, N pode estar associado a alguma ação? O que significaria dizer

[default=done] ?
    
por pgoetz 13.11.2014 / 23:42

2 respostas

4

Em primeiro lugar, o ua2b forneceu a resposta crítica que estava causando minha confusão:

Os módulos PAM só podem retornar um único valor de status por chamada

Como os módulos só podem retornar um código de status, fica claro que a ação para qualquer conjunto entre pares de valores / ações não é ambíguo. Eu pensei que um módulo poderia retornar vários códigos de status de uma só vez ( baseado na leitura de vários documentos ), daí minha confusão. Confunde-me que nenhuma referência que eu pudesse encontrar, incluindo a documentação oficial, é capaz de afirmar isso claramente. Em vez disso, encontra comentários como este:

" Um ou mais códigos de status são retornados por cada rotina PAM-API. "

Isso para mim parece que um módulo pode retornar vários códigos de status. Foi somente depois de ler o guia do desenvolvedor do módulo PAM que percebi que os códigos de status são retornados como um único inteiro que mapeia para os possíveis valores do código de status conforme descrito aqui (Sim, a mesma referência!)

Minha próxima pergunta tinha a ver com equacionar a palavra-chave do sinalizador de controle de estilo antigo obrigatório com essa sintaxe de colchetes:

[success=ok new_authtok_reqd=ok ignore=ignore default=bad]

Essa equivalência é repetida em todo o lugar, por exemplo, aqui .

Acontece que isso é um absurdo completo e total. Os códigos de status retornados por qualquer módulo específico podem diferir e diferir novamente, dependendo do tipo de grupo de gerenciamento (por exemplo, auth vs. conta).

Veja, por exemplo, o módulo pam_securetty . Este módulo fornece apenas o tipo auth e possui os seguintes valores possíveis de retorno de código de status:

PAM_SUCCESS
PAM_AUTH_ERR
PAM_INCOMPLETE
PAM_SERVICE_ERR
PAM_USER_UNKNOWN

O ignore=ignore valor / mapeamento de ação, consequentemente, parece ser inútil, já que este módulo nunca retorna ignorar. Neste caso, você pode querer considerar o uso de user_unknown=ignore se, na verdade, você quiser ignorar o resultado, se o usuário não puder ser encontrado.

    
por 19.11.2014 / 22:11
7

Os módulos PAM têm mais de 30 valores de retorno diferentes que são mapeados para passar ou falhar de toda a pilha PAM, conforme indicado pela configuração.

Vale ressaltar que um módulo PAM pode se comportar diferente dependendo do contexto (auth, conta, senha, sessão) em que é chamado.

Os pares de valor = ação entre colchetes descrevem qual ação tomar para cada valor de retorno possível do módulo PAM.

Uma boa explicação de valores e ações pode ser encontrada lendo atentamente a página acima mencionada até o final.

  • success=ok o módulo retornou com sucesso, isso será honrado na avaliação de toda a pilha PAM, se nenhum módulo anterior falhar, considere passar para a pilha inteira até este ponto.
  • new_authtok_reqd=ok é necessário um novo token de autenticação. Por exemplo. no contexto sessão , isso pode fazer com que o usuário altere sua senha.
  • ignore=ignore o módulo PAM quer que seu resultado seja ignorado, então nós o ignoramos.
  • default=bad todos os outros resultados fazem a pilha do PAM falhar (mas não parem de processar módulos subseqüentes)

What happens if the module returns success and one other token?

Os módulos PAM retornam apenas um valor único.

Finally, I can't find the answer to this question, either: can every value ok, done, bad, die, ignore, reset, N be associated with any action? What would it even mean to say

[default=done] ?

Isso significa que qualquer token não mencionado aqui (ou seja, todos os tokens possíveis) termina o processamento da pilha PAM e retorna o resultado até o momento.

    
por 14.11.2014 / 04:19