PAM - flag de controle necessário e suficiente

11

Estou estudando o PAM e sou um pouco ignorante sobre o significado de alguma combinação de sinalizadores de controle. Na documentação da Red Hat, temos:

  • required
    failure of such a PAM will ultimately lead to the PAM-API returning failure but only after the remaining stacked modules (for this service and type) have been invoked

  • requisite
    like required, however, in the case that such a module returns a failure, control is directly returned to the application.

  • sufficient
    success of such a module is enough to satisfy the authentication requirements of the stack of modules (if a prior required module has failed the success of this one is ignored). A failure of this module is not deemed as fatal to satisfying the application that this type has succeeded. If the module succeeds the PAM framework returns success to the application immediately without trying any other modules.

Portanto, no meu entender, se um módulo requisite falhar, toda a pilha de módulos não será analisada e o controle voltará para o aplicativo imediatamente. Se um módulo sufficient for bem-sucedido, o restante da pilha de módulos não será analisado e o controle voltará para o aplicativo imediatamente. Se um módulo required falhar, toda a pilha será analisada.

Agora, não consigo entender qual será o comportamento quando um determinado módulo required falhar e outro módulo sufficient for bem-sucedido.

    
por ludiegu 21.12.2013 / 10:02

2 respostas

9

O PAM procede pelos itens da pilha em sequência. Ela só mantém a memória do estado em que está (sucesso ou negação, com sucesso significando sucesso até agora), não de como ela chegou a esse estado.

Se um item marcado sufficient for bem-sucedido, a biblioteca PAM parará o processamento dessa pilha. Isso acontece se houver itens required anteriores ou não. Neste ponto, o PAM retorna o estado atual: success se nenhum item required anterior falhou, caso contrário, negado.

Da mesma forma, se um item marcado com requisite falhar, a biblioteca PAM parará o processamento e retornará uma falha. Nesse ponto, é irrelevante se um item required anterior falhou.

Em outras palavras, required não necessariamente faz com que toda a pilha seja processada. Significa apenas continuar.

    
por 23.12.2013 / 02:43
0

Na minha opinião, um sinalizador de controle required precisa sempre ser bem-sucedido para que um módulo seja bem-sucedido.

Um módulo sinalizado sufficient é ignorado se falhar. Se for bem sucedido e nenhum módulo% flag required tiver falhado, nenhum outro módulo do mesmo tipo deverá ser verificado e o módulo será considerado bem-sucedido. Portanto, basicamente, o sinalizador required tem prioridade maior que o sinalizador sufficient , mas o último tem a capacidade de parar de verificar o restante deles se os required anteriores foram bem-sucedidos.

Exemplo:

1 auth       required     /lib/security/pam_nologin.so
2 auth       required     /lib/security/pam_securetty.so
3 auth       required     /lib/security/pam_env.so
4 auth       sufficient   /lib/security/pam_rhosts_auth.so
5 auth       required     /lib/security/pam_stack.so service=system-auth

Se as linhas 1, 2, 3 e 4 forem bem sucedidas, a linha 5 poderá ser ignorada e o módulo auth será bem-sucedido. Se a linha 4 não for bem sucedida, será ignorada e a linha 5 será verificada. Se alguma das linhas 1, 2, 3 falhar, a linha 4 não será levada em conta.

    
por 21.12.2013 / 13:14