私は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がマルチスレッドであってもなくてもよいWebサーバーに接続することが多いという点を含め、多くの問題があります。あります。ヒット率(pamはより低いヒット率を想定しています)とphp pamソリューションはスケーラブルではありません(一部のアプリケーションでは便利です)。
これらの変更により、お客様の問題に対する解決策は基本的に3つのカテゴリに分けられます。最も少なく推奨される観点からは、
- 自分で書いてみてください。
- ヘルパープロセスを使用します。
- バイパスパム。
これまでに得た経験なしに自分で書くことは、私が言及したすべての困難に従います。ヘルパープロセスは pam と php を別々のプロセスに分け、多くの問題を管理可能なレベルに減らし、IPC を増やします。最も一般的な解決策は、PHPとオペレーティングシステムが同じデータベース(たとえばldap)またはSQLデータベース(mysqlやpostgresなど)に対して認証できるようにすることです。これを行うには、いつでもモジュールを使用できます。
唯一の他の解決策は、PHPで認証せずにサーバー(pam authモジュールはapacheで利用可能)または他の方法(cgiとmod_perlの両方でpam認証を実行しますが、セッションを前後に転送することは少なくとも機能します)で認証することです。 。面白いと言いました。 .)
あなたの場合は、補助プロセスをお勧めします。 (ApacheにはPHPを使用せずにこれを簡単に行う方法があります。)