2012-02-10 89 views
1

我正在使用PHP中使用PAM身份驗證的腳本。當我嘗試進行身份驗證時,對於擁有該文件的用戶來說工作正常,但任何其他嘗試登錄的用戶都將失敗。PAM身份驗證失敗,以suphp

如何獲得具有系統帳戶的任何用戶進行身份驗證,而不僅僅是擁有該文件的用戶?

這是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 

這是我想提出認證請求的一個示例:

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

回答

1

PAM模塊pam_unix.so需要根訪問[1](如從SUID根文件調用)來驗證用戶比現有不同用戶。當前用戶密碼通過助手程序unix_chkpwd進行驗證 - 這是您正在觀察的情況。

所以我會說任何直接從PHP腳本使用PAM(pam_unix.so)的嘗試都是註定要失敗的。

如果您必須檢查/ etc/shadow密碼,那麼我會嘗試將槽saslauthd守護程序配置爲使用影子密碼數據庫/ PAM。在大多數情況下,安裝並不重要,但請查看saslauth套接字的文件和目錄訪問權限(/ var/run中的某處)。

在PHP中,您可以使用this module或者使用用戶名和密碼參數調用testsaslauthd可執行文件並檢查它的返回代碼。

[1]好吧,影子團體可能就足夠了。

0

使用完整pam_auth()調用允許你使用圍繞整個影問題得到,只要選擇你只使用最基本的功能:

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

關閉帳戶,支票,使其餘它做簡單的密碼驗證。