Problema ao obter entrada do usuário através do script chamado por pam_exec

0

Eu estava tentando usar o pam_exec.so no Ubuntu para chamar um script, solicitar a entrada do usuário e permitir que o usuário faça o login através do SSH se o script sair com um código de saída 0. Eu não consegui fazer isso funcionar . Então eu escrevi um script simples como segue para testar o pam_exec.so e ver se o problema estava no meu script original. No entanto, estou recebendo os mesmos problemas mesmo com este script simples.

/usr/local/bin/test.sh

#!/bin/bash
echo -n "Please enter your name:"
read name
echo "Hello $name"

Eu o chamei incluindo a seguinte linha depois de @include common-auth em /etc/pam.d/sshd

auth    required        pam_exec.so stdout /usr/local/bin/test.sh

Mas quando eu SSH neste sistema como visto abaixo, eu não recebo um aviso para inserir qualquer entrada. Assim que eu inserir a senha, eu entro na conta. No entanto, a saída do script é visível.

Entãoeumudeioscriptacimacomosegueparasaircomumcódigodesaídade1senenhumaentradafordada.

#!/bin/bashecho-n"Please enter your name:"
read name
if [ -z "$name" ]
then
        exit 1
else
        echo "Hello $name"
        exit 0
fi

Então, não consigo acessar o SSH no sistema (captura de tela abaixo), mesmo quando eu digito a senha correta e não vejo nenhuma saída do script.

Então, o que eu quero saber é como posso corrigir esse problema e usar o pam_exec.so para executar um script, obter entrada do usuário e permitir a autorização do ssh somente se esse script sair com um código de saída de 0?

    
por Nilushan 07.11.2017 / 06:49

1 resposta

0

Não estou familiarizado com a implementação de pam_exec.so , mas fiz um pequeno PAM e acho complicado qualquer módulo lidar com sessões interativas com um script de terceiros devido à maneira como a conversa do PAM funciona ( pam_conv_* funções) e a necessidade de saber quando o script de terceiro estaria lendo stdin ou não (já que o script não é simplesmente exec pelo módulo em primeiro plano).

Dependendo da quantidade de esforço que alguém está disposto a ir, construir um PAM não é complicado e você tem exemplos fáceis de ler em python ou golang

Outra opção (talvez mais rápida) é usar a opção stdin em pam_exec.so .
Segurança à parte, e dependendo do seu caso de uso, isso pode ser suficiente, pois envia a senha para o script stdin.

Se a entrada de script concatenada com senha for uma opção para você (como algumas implementações 2FA nas quais você insere senha + OTP no campo de senha):

  • Adicione a opção stdin à sua linha pam_exec.so
  • No seu script, divida a senha da sua segunda entrada
  • Manipule a autenticação de senha em si (como pam_unix não conseguirá fazer isso com a entrada extra)
  • Faça uso de sua entrada extra
por 05.12.2018 / 14:38

Tags