Configurando o PAM com Augeas

1

Eu estou tentando usar o Augeas para configurar os arquivos em meu diretório /etc/pam.d em uma instalação padrão do Ubuntu 14.04. Meu objetivo é encontrar todos os nós que têm um argumento de 'nullok' ou 'nullok_secure' e remover esses argumentos da configuração. Isso eventualmente será imposto pelo Puppet, mas atualmente estou trabalhando na configuração usando o augtool em uma máquina local.

De tudo que eu li, as seguintes expressões devem me dar os nós com 'nullok e' nullok_secure ':

augtool print /files/etc/pam.d/*/*/argument[../argument = 'nullok']
augtool print /files/etc/pam.d/*/*/argument[../argument = 'nullok_secure']

Ou alternadamente:

augtool print /files/etc/pam.d/*/*/argument[. = 'nullok']
augtool print /files/etc/pam.d/*/*/argument[. = 'nullok_secure']
Infelizmente, eles não estão me levando a lugar algum, e eu não posso, pela minha vida, descobrir o porquê. Este é o augtool print dos arquivos que eu sei que tem o argumento (com comentários removidos para resumo):

/files/etc/pam.d/common-auth
/files/etc/pam.d/common-auth/1
/files/etc/pam.d/common-auth/1/type = "auth"
/files/etc/pam.d/common-auth/1/control = "[success=2 default=ignore]"
/files/etc/pam.d/common-auth/1/module = "pam_unix.so"
/files/etc/pam.d/common-auth/1/argument = "nullok_secure"
/files/etc/pam.d/common-auth/2
/files/etc/pam.d/common-auth/2/type = "auth"
/files/etc/pam.d/common-auth/2/control = "[success=1 default=ignore]"
/files/etc/pam.d/common-auth/2/module = "pam_lsass.so"
/files/etc/pam.d/common-auth/2/argument = "try_first_pass"
/files/etc/pam.d/common-auth/3
/files/etc/pam.d/common-auth/3/type = "auth"
/files/etc/pam.d/common-auth/3/control = "requisite"
/files/etc/pam.d/common-auth/3/module = "pam_deny.so"
/files/etc/pam.d/common-auth/4
/files/etc/pam.d/common-auth/4/type = "auth"
/files/etc/pam.d/common-auth/4/control = "required"
/files/etc/pam.d/common-auth/4/module = "pam_permit.so"
/files/etc/pam.d/common-auth/5
/files/etc/pam.d/common-auth/5/type = "auth"
/files/etc/pam.d/common-auth/5/control = "optional"
/files/etc/pam.d/common-auth/5/module = "pam_cap.so"

O que estou perdendo aqui? Esses comandos não deveriam me fornecer os nós que estou procurando?

    
por user7560 12.01.2015 / 21:05

2 respostas

1

Primeiro, as duas expressões que você lista não são estritamente equivalentes.

/files/etc/pam.d/*/*/argument[../argument = 'nullok']

seleciona argument nodes 2 níveis em /files/etc/pam.d que possuem um nó argument irmão (ou eles próprios) com um valor definido como nullok , enquanto

/files/etc/pam.d/*/*/argument[. = 'nullok']

seleciona argument nós 2 níveis abaixo de /files/etc/pam.d com um valor definido como nullok (mas não seus irmãos, se houver).

Agora, o problema que você está enfrentando é que os argument nós que você está tentando corresponder são, na verdade, 3 níveis em /files/etc/pam.d , não 2, então é necessário outro nível /* .

A maneira mais fácil de evitar níveis de contagem seria corresponder em qualquer nível, usando // :

/files/etc/pam.d//argument[.='nullok']

Dito isso, não sei o que você planeja fazer com ele, mas talvez queira saber que existe uma provedor Puppet baseado em Augeas para gerenciar as entradas do PAM , o que pode ser muito mais fácil do que reimplementar sua própria solução.

    
por 12.01.2015 / 23:13
0

Depois de analisar algumas coisas na sala do IRC do Augeas, parece que o meu problema foi simplesmente um erro de sintaxe. Ao usar "augtool print" diretamente (sem cair no prompt augtool >), os caminhos devem ser citados. Significado,

augtool print /files/etc/pam.d/*/*/argument[. = 'nullok_secure']

não funciona, mas:

augtool print '/files/etc/pam.d/*/*/argument[. = "nullok_secure"]'

Fornece os resultados corretos. Além disso, se você soltar no prompt do augtool, o comando funcionará corretamente, mesmo sem aspas:

$ augtool
augtool> print /files/etc/pam.d/*/*/argument[. = 'nullok_secure']
    
por 12.01.2015 / 23:36