php5-auth-pam을 교체하여 로컬 사용자에 대한 웹사이트 로그인을 인증하세요.

php5-auth-pam을 교체하여 로컬 사용자에 대한 웹사이트 로그인을 인증하세요.

저는 PHP 기반 웹사이트에 대한 로그인 작업을 하고 있는데 사용자가 시스템에 유효한 사용자 이름과 비밀번호를 입력하면 로그인이 성공할 것입니다. 주위를 둘러보면 전통적인 접근 방식은 다음과 같습니다.PHP PAM 모듈.

불행하게도 이 모듈은 이제 다음과 같습니다.더 이상 사용되지 않음apt-get install php5-pam-auth더 이상 Ubuntu Server 14.04에 설치할 수 없습니다 . force 를 사용하여 설치할 수 있었지만 pecl install pam, 이를 사용하려면 다음과 같이 호출 시간이 참조로 전달되어야 하기 때문에 여전히 작동하지 않습니다.

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

...이로 인해 더 이상 사용되지 않는 참조로 전달을 호출할 때 PHP에서 불만이 발생합니다.

[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/

이를 수행하는 더 새로운 방법이나 대체 방법이 있습니까? 내가 찾았어이 답변비슷한 질문이지만 C 코드를 컴파일할 수 없으며 다음과 같은 오류가 발생합니다.

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

보고서에 따르면 phpinfo()저는 PHP 버전을 실행하고 있습니다 5.5.9-1ubuntu4.11.

답변1

나는 php-auth-pam을 더 이상 사용하지 않기로 한 결정에 동의하지 않습니다. 비록 그들이 그렇게 한 이유는 이해할 수 있지만. php와 pam을 통합하는 데에는 php가 멀티 스레드일 수도 있고 아닐 수도 있는 웹 서버에 연결되는 경우가 많다는 점(그리고 pam을 사용하여 여러 스레드를 처리하는 것은 문제가 될 수 있음)을 포함하여 많은 문제가 있습니다. 적중률(pam은 더 낮은 적중률을 가정함) 및 php pam 솔루션은 확장성이 좋지 않습니다(일부 응용 프로그램에서는 유용할 수 있음).

이러한 변경으로 인해 귀하의 어려움에 대한 해결책은 기본적으로 세 가지 범주로 나누어집니다. 가장 적게 권장되는 관점에서는 다음과 같습니다.

  1. 직접 작성해 보세요.
  2. 도우미 프로세스를 사용합니다.
  3. 우회 팸.

지금까지 얻은 경험 없이 직접 작성하면 제가 언급한 모든 어려움이 따릅니다. 도우미 프로세스는 pam과 php를 별도의 프로세스로 분리하여 많은 문제를 관리 가능한 수준으로 줄이면서 IPC를 증가시킵니다. 가장 일반적인 해결책은 PHP와 운영 체제가 동일한 데이터베이스(예: ldap) 또는 SQL 데이터베이스(예: mysql 또는 postgres)에 대해 인증하도록 하는 것입니다. 이 작업을 수행하려면 언제든지 모듈을 사용할 수 있습니다.

유일한 다른 해결책은 PHP에서 인증하지 않고 서버(pam auth 모듈은 apache에서 사용 가능) 또는 다른 방법(cgi 및 mod_perl 모두 pam 인증을 수행하지만 세션을 앞뒤로 전달하는 것은 적어도 작동할 것입니다)에서 인증하는 것입니다. 흥미롭다고 말했습니다. .)

귀하의 경우에는 보조 프로세스를 권장합니다. (Apache에는 PHP를 사용하지 않고도 이를 쉽게 수행할 수 있는 방법이 있습니다.)

관련 정보