【问题标题】:PAM authentication failing with suphpPAM 身份验证因 suphp 失败
【发布时间】:2012-02-10 07:37:41
【问题描述】:

我正在编写一个在 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

普通账户包含:

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.");
}

【问题讨论】:

    标签: php authentication debian pam


    【解决方案1】:

    PAM 模块 pam_unix.so 需要 root 访问权限[1](例如从 suid root 文件调用)来验证不同于当前用户的用户。当前用户密码已通过帮助程序 unix_chkpwd 进行验证——您正在观察这种情况。

    所以我想说,任何直接从 PHP 脚本使用 PAM (pam_unix.so) 的尝试都注定要失败。

    如果您必须检查 /etc/shadow 密码,那么我会尝试将 saslauthd 守护进程配置为使用影子密码数据库/PAM。在大多数情况下,设置很简单,但请查看 saslauth 套接字的文件和目录访问权限(在 /var/run 中的某个位置)。

    在 PHP 中,您可以使用 this module 或使用用户和密码参数调用 testsaslauthd 可执行文件并检查它的返回码。

    [1] 好的,影子组可能就足够了。

    【讨论】:

      【解决方案2】:

      使用完整的 pam_auth() 调用允许您使用解决整个影子问题的选项,只要您只使用最基本的功能:

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

      关闭其余的帐户检查并使其进行简单的密码验证。

      【讨论】:

        猜你喜欢
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 2015-02-17
        • 1970-01-01
        • 1970-01-01
        • 2021-06-04
        • 2011-02-14
        • 1970-01-01
        相关资源
        最近更新 更多