Substituição do php5-auth-pam para autenticar o login do site contra usuários locais

2

Estou trabalhando em um login para um site baseado em PHP onde os usuários devem ter efetuado login com êxito se inserirem um nome de usuário e senha válidos para uma conta local no sistema. Olhando em volta, parece que a maneira tradicional de fazer isso foi usando o módulo PHP PAM .

Infelizmente, parece que este módulo está agora obsoleto e Não consigo mais instalá-lo com apt-get install php5-pam-auth no Ubuntu Server 14.04. Eu fui capaz de instalá-lo com força com pecl install pam , mas mesmo assim ele não funciona porque usá-lo requer um passe no tempo de chamada por referência como:

if ( pam_auth( $uname, $pswd, &$error ) ) {
    echo "You are authenticated!"
}

... que resulta no PHP reclamando que a passagem do tempo de chamada por referência também é obsoleta:

[Fri Jul 24 01:25:35.788680 2015] [:error] [pid 25328] [client xx.xxx.xx.xx:1179] PHP Fatal error:  Call-time pass-by-reference has been removed in /var/www/academies/phptest/login.php on line 7, referer: http://<domain>:81/phptest/

Existe uma maneira atualizada ou alternativa de fazer isso? Eu encontrei esta resposta para uma pergunta semelhante, mas não consegui obter o código C para compilar; me deu o seguinte erro:

pam.c: In function ‘authenticate’:
pam.c:63:9: error: expected declaration or statement at end of input
         return ( retval == PAM_SUCCESS ? 0:1 );
         ^

De acordo com phpinfo() , estou executando a versão do PHP 5.5.9-1ubuntu4.11 .

    
por tlng05 24.07.2015 / 03:31

1 resposta

0

Eu não concordo com a decisão de depreciar o php-auth-pam, embora eu possa entender por que eles fizeram isso. Há uma série de desafios para integrar php e pam, incluindo que php é frequentemente ligado ao seu servidor que pode ou não ser multithreaded (e lidar com vários threads com pam pode ser problemático), php tende a ter uma taxa de acerto muito alta (onde pam assume uma baixa taxa de acerto) e as soluções php pam não se adaptam bem (embora possam ser úteis em algumas aplicações.

Com essa mudança, existem basicamente três classes de soluções para sua dificuldade. Pelo menos recomendado eles são:

  1. escreva o seu próprio.
  2. use um processo auxiliar.
  3. ignorar pam.

Escrever o seu próprio tem todos os desafios que eu já mencionei, sem a experiência adquirida até agora. O processo auxiliar separa pam e php em processos separados, o que reduz muitos dos desafios para níveis gerenciáveis, mas adiciona IPC. A solução mais comum é ter o php e o sistema operacional autenticados no mesmo banco de dados, como o ldap ou um banco de dados sql, como o mysql ou o postgres. Módulos estão prontamente disponíveis para fazer isso.

A única outra solução é não autenticar em php mas no servidor (pam auth modules estão disponíveis para apache) ou outro método (cgi, e mod_perl pode fazer autenticação pam mas passar a sessão para frente e para trás é interessante dizer o mínimo.)

No seu caso, eu recomendaria um processo auxiliar. (o apache tem uma maneira fácil de fazer isso sem envolver o php.)

    
por 24.07.2015 / 05:12

Tags