Tentando executar um script com autenticação pam

1

Eu quero poder executar um script personalizado quando o pam fizer a autenticação, mas recebo um erro que não consigo passar:

Feb 20 17:39:47 DC03R07DS25-08 sockd[2874]: pam_exec(sockd:auth): send password to child Feb 20 17:39:47 DC03R07DS25-08 sockd[2893]: pam_exec(sockd:auth): Calling /tmp/test.sh ... Feb 20 17:39:47 DC03R07DS25-08 sockd[2874]: pam_exec(sockd:auth): waitpid returns with -1: No child processes

Esse é um script muito básico que apenas imprime um 0 para permitir tudo.

#!/bin/bash
# read the users password from stdin (pam_exec.so gives the provided password
# if invoked with expose_authtok)

read password
echo $password > /tmp/a.txt

exit 0

E aqui está minha configuração pam.d:

auth required pam_exec.so debug expose_authtok /tmp/test.sh
account required    pam_permit.so

Esta é a minha primeira vez brincando com pam tão nua comigo por favor. O que estou fazendo errado aqui?

P.S. Eu realmente preciso de expose_authtok para poder ter acesso à senha nesse script.

    
por Romeo Mihalcea 21.02.2016 / 04:37

1 resposta

1

Parece ser uma corrida de colheita. O processo de chamada (sockd?) configura o manipulador SIGCHLD, o qual reage a test.sh em vez de pam_exec. veja link

Editar: desculpe, deixe-me explicar o que você pode encontrar no link acima: Quando me deparei com esse bug, tive que recompilar o pam_exec.so com algumas modificações no pam_exec.c. Defina o manipulador SIGCHLD como padrão antes de fork () e reconfigure-o após waitpid () e depois que fork falhe (pid == - 1 branch). Algo como:

definido:

struct sigaction newact, oldact;
newact.sa_handler = SIG_DFL;
newact.sa_flags = 0;
sigfillset(&newact.sa_mask);
sigaction (SIGCHLD, &newact, &oldact);

redefinir:

sigaction (SIGCHLD, &oldact, NULL);
    
por 21.02.2016 / 18:33