Restringindo logons de conta usando LDAP e PAM

14

Eu esperava que alguns gurus do PAM / LDAP pudessem me ajudar aqui. Recentemente, configurei um diretório LDAP no Ubuntu Server para manter contas para meus clientes (para uso com sistemas baseados na Web) e para a equipe (que precisará fazer login via SSH).

A autenticação LDAP está funcionando perfeitamente. No entanto eu não pode obter as restrições de conta de trabalho: contas pessoal terá IDs entre 2001e 2999e será um membro do ssh-usersgrupo que lhes permitam o login para os servidores.

As restrições em questão estão em /etc/ldap.conf, e são pam_min_uid, pam_max_uide pam_groupdn.

pam_groupdncontém o DN completo para o meu ssh-usersgrupo. pam_min_uid= 2000e pam_max_uid= 2999.

Agora, eu consegui fazê-los funcionar adicionando:

account [success=1 default=ignore] pam_ldap.so

acima da pam_unix.solinha /etc/pam.d/common-account. No entanto, as contas locais do Unix NÃO podem fazer login: o servidor SSH mata a conexão assim que tenta.

Eu configurei o pam_ldap.somódulo sufficientno arquivo acima, mas os usuários inválidos receberão uma mensagem dizendo que não podem fazer login, mas eles os logam de qualquer maneira.

Então, como posso definir essas restrições de conta para usuários LDAP, enquanto continuo permitindo que usuários UNIX efetuem login?

Como você provavelmente pode adivinhar, sou novato no PAM, embora tenha conseguido que o módulo "faça diretórios pessoais automaticamente" funcione :-)

Muito obrigado, Andy

Andy Shellam
fonte

Respostas:

11

O PAM tem a capacidade de restringir o acesso com base em uma lista de controle de acesso (pelo menos no Ubuntu) que, como a resposta de kubanskamac (+1), considera os grupos como grupos posix, estejam eles armazenados em LDAP /etc/groupou NIS.

/etc/security/access.confé o arquivo da lista de acesso. No meu arquivo, eu coloquei no final:

-:ALL EXCEPT root sysadmin (ssh-users):ALL

Isso nega a todos, exceto root, sysadmin e no grupo ssh-users (que está no LDAP) onde quer que eles façam login (o segundo ALL).

Em seguida, no meu arquivo de conta PAM (este é um módulo de conta), adiciono no final:

account required pam_access.so

que diz ao PAM para usar esse arquivo. Funciona um prazer :-)

Andy Shellam
fonte
Vale a pena notar que você pode precisar colocar pam_access.so no início do arquivo da sua conta PAM para que ele entre em vigor.
crb
5

Eu simplesmente usaria

auth required    pam_listfile.so   sense=accept item=group file=/etc/groups.allow onerr=fail

para permitir apenas grupos específicos (para grupos locais e LDAP). Dessa forma, você não precisa especificar nada ldap.conf.

Se você deseja manter a autorização do seu jeito, não deve filtrar os usuários pelo passe de "conta". Eu acredito que você deveria fazê-lo no passe "auth". Em segundo lugar, como você pode ver, o pam_unix processa contas locais e LDAP (pelo menos na passagem "account"), portanto parece que não há necessidade de pam_ldap.

Edição: Em terceiro lugar, se você insistir em ter coisas no passe de "conta" (que eu acredito que podem ter efeitos colaterais estranhos), sua sequência deve terminar com: ..., "pam_ldap suficiente", "pam_localuser necessário", "pam_unix necessário" . Quero dizer, se você tiver outros módulos, mova-os para pam_ldap - caso contrário, eles serão ignorados nas contas LDAP devido à cláusula "suficiente".

kubanczyk
fonte
Acho que o pam_unix está usando as chamadas getent para recuperar as informações da conta - que usa LDAP como em /etc/nsswitch.conf. Essas linhas foram adicionadas aos arquivos de configuração do PAM pelo instalador do pacote libpam-ldap. A ação padrão do pam_groupdn não estava fazendo nada e, enquanto procurava respostas, alguém disse que isso não entraria em vigor a menos que o módulo pam_ldap.so fosse usado durante o passe "account". Se possível, prefiro manter as configurações no ldap.conf, pois elas estão relacionadas especificamente ao LDAP.
Andy Shellam 07/02
(1) Você está certo sobre pam_unix. (2) Estou atualizando minha resposta com o conselho de pam_localuser.
Kubanczyk
Tudo o que li sobre o PAM indica que a conta é a seção correta para isso. auth - Identifica o usuário e autentica a conta da conta - Verifica as características da conta do usuário, como duração da senha, restrições de tempo de login e restrições de login remoto Não é um problema de autenticação - porque o nome de usuário / senha está correto e o usuário pode estar identificado. É uma restrição de conta, porque não quero que algumas contas possam fazer login.
Andy Shellam 8/02
0

Apenas para adicionar ao @ andy-shellam, aqui está o meu common-accountarquivo:

account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore]            pam_ldap.so
account requisite                     pam_deny.so
account required                      pam_access.so
account required                      pam_permit.so
Hank
fonte