Use estrutura AND / OR mais complexa com o PAM

4

O PAM permite usar sufficent e required para alguma lógica, como

auth sufficient pam_a.so
auth required pam_b.so
auth required pam_c.so

que significaria "ou a é verdadeiro, ou b deve ser verdadeiro e então c deve ser verdadeiro".

É possível fazer operações mais complexas? como "(a ou b) e (c ou d)" ou "(a e b) ou (c e d)"? Possivelmente com ainda mais camadas de parênteses.

    
por allo 08.03.2015 / 00:42

1 resposta

5

Sim, há lógica para poder ignorar números arbitrários de linhas. Não há "colchetes" ou qualquer coisa do tipo, mas se você combinar a lógica que acabou de mencionar com a habilidade de pular linhas, você pode excluir seletivamente o comportamento.

Veja um exemplo do meu servidor pessoal:

# Skip Google authenticator check if they're coming from a local IP.
auth    [success=1 default=ignore] pam_access.so accessfile=/etc/security/access/nogoogle.conf noaudit
auth    required        pam_google_authenticator.so nullok

Eu realmente não preciso de autenticação de dois fatores se o IP de origem estiver vindo da minha rede local, então estou usando o resultado da pam_access.so check para pular exatamente uma linha no sucesso. Se a verificação falhar, nada acontece e a próxima linha é verificada.

Você pode encontrar mais informações sobre isso na% man_de% manpage. Procure por "valor1". A seção começa assim:

  For the more complicated syntax valid control values have the following form:

            [value1=action1 value2=action2 ...]

  Where valueN corresponds to the return code from the function invoked in the
  module for which the line is defined.
  ...

Tenha em mente que essa lógica é muito mais complexa e, se as pessoas editarem suas configurações do PAM sem notar a presença de saltos de linha, elas poderão causar todos os tipos de caos adicionando ou removendo linhas nos lugares errados.

    
por 08.03.2015 / 00:51