2012-02-10 11 views
1

私はPHPでPAM認証を使用するスクリプトを作成しています。認証しようとすると、ファイルを所有するユーザーはうまく動作しますが、ログインしようとする他のユーザーはすべて失敗します。suphpでPAM認証に失敗する

ファイルを所有しているユーザーだけでなく、システムアカウントを持つユーザーを認証する方法を教えてください。

これは、PHPのための私のPAM設定のコピーです:

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

共通-AUTHは含まれています

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

共通アカウントが含まれています

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 

これは私が認証要求を作っています方法の例です:現在とは異なるユーザーを認証するために、[1](例えばSUIDルートファイルからの呼び出しなど)rootアクセスを必要とpam_unix.so

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

答えて

1

PAMモジュールユーザー。現在のユーザーパスワードは、ヘルパープログラムunix_chkpwdによって確認されます。あなたが観察している状況です。

私は、PHPスクリプトからPAM(pam_unix.so)を直接使用しようとしたとします。

/etc/shadowパスワードを確認する必要がある場合、私はshadowパスワードデータベース/ PAMを使用するように設定されたトラフsaslauthdデーモンを取得しようとします。ほとんどの場合、セットアップは簡単ですが、saslauth socket(/ var/runのどこか)のファイルとディレクトリのアクセス許可を見てください。

PHPでは、this moduleを使用するか、testsaslauthdをuserパラメータとpasswordパラメータで実行して戻りコードを確認することができます。

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

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

は、アカウントの確認となりますの残りの部分をオフにします:フルpam_auth()コールを使用して

0

あなたはあまりにも長い間、あなたが唯一の最も基本的な機能を使用すると、全体の影の問題を回避するオプションを使用することができますシンプルなパスワード検証を行います。

関連する問題