pam_exec.so não escreve a senha para o script quando expose_authtok está habilitado

2

Estamos usando o PAM para autenticação com o servidor radius externo. Nós temos a seguinte linha em /etc/pam.d/common-auth

auth [sucesso = 6 padrão = ignorar] pam_exec.so expose_authtok /home/cliuser/radiusAuth.sh

O PAM grava a senha para stdin do script e fornece o nome do usuário como uma variável de ambiente.

Isso funcionava até a versão 1.1.1-6.1 da libpam-modules. Após a atualização para 1.1.3-7.1, a senha está chegando como vazia quando tento ler no script. Estamos usando o open-ssh como nosso servidor ssh.

Obrigado, Prasanth

    
por Prasanth Ramachandran Pillai 11.04.2015 / 15:21

2 respostas

6

Resposta curta

Eu estava passando por esse problema e o problema era que havia uma política em / etc / ssh / sshd_config que estava sendo violada. O meu era que AllowUsers estava definido e eu estava tentando fazer o login como um usuário que ainda não existia no sistema.

Resposta mais longa

A resposta mais longa é que a senha estava sendo sobrescrita. Na verdade, não estava chegando tão vazio. Acontece que a primeira linha tinha um caractere de retrocesso não exibível (^ H) e uma nova linha. O comando de leitura que eu estava usando estava lendo apenas a primeira linha na variável. Depois de usar cat on stdin, o conteúdo completo (como mostrado por vim com: set list) foi

"^H$
^M^?INCORRECT^@"

O cifrão é uma nova linha.

Depois de algumas escavações, encontramos isso no código-fonte openssh

link

Que mostra a senha sendo substituída por

link

Que contém os caracteres que esperávamos. Os comentários explicam por que:

/*
 * If the user logging in is invalid, or is root but is not permitted
 * by PermitRootLogin, use an invalid password to prevent leaking
 * information via timing (eg if the PAM config has a delay on fail).
 */

A lógica de validação usada para marcar o authctxt- > válido como falso está aqui link

Que define todas as razões pelas quais o usuário / senha podem ser inválidos.

Editar: atualizei os links para bloquear um commit específico para que eles permaneçam corretos. Embora o código tenha mudado, o comportamento não mudou.

    
por 06.07.2015 / 21:54
0

Outro erro / equívoco comum é como obter a senha do pam que é passada no stdin. A maneira mais fácil que vi é

PASS='cat -'

O método mais comum de ler argumentos como $ @, $ 1, etc. NÃO FUNCIONA.

    
por 18.10.2017 / 20:29

Tags