【问题标题】:LDAP Authentification not working after Web-Server migrationWeb 服务器迁移后 LDAP 身份验证不起作用
【发布时间】:2019-02-17 03:08:26
【问题描述】:

最近我将一个网络服务器从一台 linux 机器移到了一个 docker 容器。 这不是一个巨大的项目。它是一个 15 年前由学生编写的定制 Web 应用程序。

我做了什么……

在 docker 中安装了这些包

阿帕奇2 mysql服务器 网络工具 php php-{bcmath,bz2,intl,gd,mbstring,mysql,zip} libapache2-mod-php
wget 解压

然后我创建了数据库和数据库用户。 然后我从原始 sql 数据库中导入了转储文件。 在 config.php 文件中进行了一些路径更改

此时一切似乎都很好..数据库中有数据,也可以访问该站点。

但是... Web 应用程序使用 LDAP 身份验证,但如果我输入我的凭据,则会出现 500 内部服务器错误。所以我检查我是否可以从主机 ping 我们的 ldap-server -> 是的,ping 成功。 当我输入 no pw 时,它说 -> Passwort leer!就像它在 login.php 文件中一样。但是如果我输入了错误的密码或真正的密码,它只会显示 500 错误。

在实时系统上,LDAP 身份验证工作正常。

有没有我必须安装的包? 或其他好的建议,我接下来应该检查什么?我现在不知道了^^

在此处输入凭据后出现错误 Error 500 - Internal Server Error

来自 login.php 的代码

<form name="login" action="index.php" method="post">
                        <table class="tocenter">
                            <tr>
                                <td>
                                    <input type="hidden" name="dologin" value="1">
                                    <table id="text">
                                        <tr>
                                            <td><span >Login Name:</span></td>
                                            <td><input <?php if($_SESSION["fault"] & 1) {echo "class=\"false\" ";} ?>name="loginuser" type="text" size="20" maxlength="30" value="<?php echo $_SESSION["loginuser"]; ?>"></td>
                                        </tr>
                                        <tr>
                                            <td>Passwort:</td>
                                            <td><input <?php if($_SESSION["fault"] & 2) {echo "class=\"false\" ";} ?>name="password" type="password" size="20" maxlength="32"></td>
                                        </tr><?php /*
                                        <tr>
                                            <td colspan="2"><hr></td>
                                        </tr> */ ?>
                                        <tr>
                                            <td colspan="2"><input class="button" type="submit" value="Einloggen"></td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                    </form>

<?php
    if($_SESSION["fault"] != 0) {
?>
<span id="delMsg" onclick="document.getElementById('fault').innerHTML = ''; document.getElementById('delMsg').style.display = 'none';"></span>
<div id="fault">
    <?php
        if(!($_SESSION["fault"] ^ 3)) {
            ?>
                User-Name und Passwort leer!
            <?php
        } else if($_SESSION["fault"] & 1) {
            ?>
                User-Name leer!
            <?php
        } else if($_SESSION["fault"] & 2) {
            ?>
                Passwort leer!
            <?php
        } else if($_SESSION["fault"] & 4) {
            ?>
                Login falsch!
            <?php
        } else if($_SESSION["fault"] & 8) {
            ?>
                keine Berechtigung!
            <?php
        } else if($_SESSION["fault"] & 16) {
            ?>
                LDAP ERROR!
            <?php
        }
    ?>
</div>
<?php
    }
?>

<?php
    if ($show_version) {
        echo "<div id=\"version\">";
            include("version.php");
        echo "</div>";
    }
?>

这里是 LDAP 部分

<?php
    session_unset();
    exit();
}


$_SESSION["fault"] = 0;
$_SESSION["loginuser"] = $_POST["loginuser"];

if ($_POST["loginuser"] == "") {
    $_SESSION["fault"] = $_SESSION["fault"] | 1;
}
if ($_POST["password"] == "") {
    $_SESSION["fault"] = $_SESSION["fault"] | 2;
}
if ($_SESSION["fault"] != 0) {
    require("redirect.php");
}

    /* log logins to file */
    if (isset($loginsLog)) {
        $fh = fopen($loginsLog, 'a');
        if ($fh) {
            fwrite($fh, $_POST["loginuser"].";".date("y-m-d H:i:s").";".$_SERVER['REMOTE_ADDR']."\n");
            fclose($fh);
        }
    }
    /*** uncomment to bypass login ***/
    #$_SESSION["login"] = 2;
    #require("redirect.php");

$ldap=ldap_connect($ldap_server);
if (!$ldap) {
    $_SESSION["fault"] = $_SESSION["fault"] | 16;
    require("redirect.php");
}

ldap_set_option($ldap,LDAP_OPT_PROTOCOL_VERSION,3) or die ("Failed to set LDAP protocol version to 3");

$ldapuser = $dn_user_pre . $_POST["loginuser"] . $dn_user;
$bind_results=@ldap_bind($ldap, $ldapuser, $_POST["password"]);
if (!$bind_results) {
    if (ldap_errno($ldap) == 49 || ldap_errno($ldap) == 32)
        $_SESSION["fault"] = $_SESSION["fault"] | 4;
    else
        $_SESSION["fault"] = $_SESSION["fault"] | 16;
    require("redirect.php");
}

$r=ldap_compare($ldap, $gdn_write, $attr, $ldapuser);

if ($r === -1) {
    $_SESSION["fault"] = $_SESSION["fault"] | 16;
    require("redirect.php");
} elseif ($r === TRUE) {
    $_SESSION["login"] = 2;
} elseif ($r === FALSE) {
    $r=ldap_compare($ldap, $gdn_read, $attr, $ldapuser);
    if ($r === -1) {
        $_SESSION["fault"] = $_SESSION["fault"] | 16;
        require("redirect.php");
    } elseif ($r === TRUE) {
        $_SESSION["login"] = 1;
    } elseif ($r === FALSE) {
        $_SESSION["fault"] = $_SESSION["fault"] | 8;
        require("redirect.php");
    }
}

ldap_close($ldap);

?>

感谢您的帮助!

最好的问候,

沃尔夫冈

【问题讨论】:

    标签: php web-services web server ldap


    【解决方案1】:

    已解决:必须安装 php-mysql

    多么糟糕的错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      相关资源
      最近更新 更多