1

PHPでPAM認証を使用するスクリプトに取り組んでいます。認証しようとすると、ファイルを所有しているユーザーには問題なく機能しますが、ログインしようとした他のユーザーは失敗します。

ファイルを所有しているユーザーだけでなく、システムアカウントを持っているユーザーを認証するにはどうすればよいですか?

これは、php用の私のpam構成のコピーです。

auth       optional   pam_faildelay.so  delay=3000000
@include common-auth
@include common-account
@include common-session

common-authに含まれるもの:

auth    [success=1 default=ignore]      pam_unix.so nullok_secure
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so

common-accountに含まれるもの:

account [success=1 new_authtok_reqd=done default=ignore]        pam_unix.so
account requisite                       pam_deny.so
account required                        pam_permit.so

共通セッションには次のものが含まれます。

session [default=1]                     pam_permit.so    
session requisite                       pam_deny.so
session required                        pam_permit.so
session required                        pam_unix.so

これは、私が認証要求を行う方法の例です。

if(pam_auth($username,$password)){
    displayMappings();
}
else{
    echo("authentication failure. Please try again.");
}
4

2 に答える 2

1

PAMモジュールpam_unix.soは、現在のユーザーとは異なるユーザーを認証するためにrootアクセス[1](suidルートファイルからの呼び出しなど)を必要とします。現在のユーザーパスワードはヘルパープログラムunix_chkpwdで確認されます-それはあなたが観察している状況です。

したがって、PHPスクリプトから直接PAM(pam_unix.so)を使用する試みはすべて運命づけられていると言えます。

/ etc / shadow passwordsをチェックする必要がある場合は、シャドウパスワードデータベース/PAMを使用するように構成されたsaslauthdデーモンを取得しようとします。ほとんどの場合、セットアップは簡単ですが、saslauthソケット(/ var / runのどこかにある)のファイルおよびディレクトリへのアクセス許可を確認してください。

PHPでは、このモジュールを使用するか、ユーザーとパスワードのパラメーターを指定してtestsaslauthd実行可能ファイルを呼び出し、戻りコードを確認できます。

[1] OK、シャドウグループでおそらく十分でしょう。

于 2012-02-10T10:32:16.517 に答える
0

フルコールを使用pam_auth()すると、最も基本的な機能のみを使用する限り、シャドウの問題全体を回避するオプションを使用できます。

$error="";
$auth = pam_auth($user,$pass,$error,false);

残りのアカウントチェックをオフにして、簡単なパスワード検証を実行します。

于 2015-01-30T01:06:14.010 に答える