【问题标题】:Authenticating user with LDAP from PHP with only sudo user and Password?仅使用 sudo 用户和密码从 PHP 使用 LDAP 对用户进行身份验证?
【发布时间】:2015-10-07 21:27:38
【问题描述】:

如何使用 LDAP 和 sudo 用户和密码从 PHP 进行身份验证?

我找到了简单的 php 脚本,它可以按如下方式对用户进行身份验证,但是我的 ldap 数据库中有 nosudo 用户和 sudo 用户。

此脚本验证所有用户 sudo 以及 nosudo 用户,我希望只有 sudo 用户能够登录。那你能建议修改吗?

PHP 脚本

// get username and password from form


$username = $_POST['username'];


$password = $_POST['password'];
/*
   * checks the credentials against the LDAP server
   * $user - myBYU
   * $pass - password
*/



 function authenticate($user,$pass){

  // prevents guest account access
  if($pass == ""){
     return false;
  }

  try{

     $Yldap_location = "ldap://ldap.byu.edu";
     $ldap_port = 389;

     // call the ldap connect function
     $Ydatabase = ldap_connect($Yldap_location, $ldap_port);

     // bind the connection
     $good = @ldap_bind($Ydatabase, "uid=".$user.",ou=People,o=BYU.edu", $pass);

     if($good){
        // valid credentials
        return true;
     }
     else{
        // invalid credentials
        return false;
     }

  }
  catch(Exception $e){
     return false;
  }


 }

   // call authenticate function



if(authenticate($username,$password)){
  // authenticate successful

     // set session
     $_SESSION['loggedin'] = "true";

     // redirect
     echo $_SESSION['loggedin'];
     $url = "http://orca.byu.edu/iacuc/".$_SESSION['url'];
     header("Location: ".$url);
}


else{

  // authenticate fails

     // redirect to login
     header("Location: http://orca.byu.edu/iacuc/Login.php");


}




**Sudo User Ldif is**
dn: uid=rupesh,ou=example,dc=example,dc=com

cn: Rupesh Jeevanrao Shewalkar

gidnumber: 502

homedirectory: /home/rupesh

loginshell: /bin/bash

mail: rupesh.shewalkar@example.com

mobile: 99999999

objectclass: extensibleObject

objectclass: posixAccount

objectclass: top

objectclass: shadowAccount

objectclass: sudoRole

shadowlastchange: 16148

shadowmax: 99999

shadowmin: 0

shadowwarning: 7

sudocommand: ALL

sudohost: ALL

sudooption: logfile=/var/log/sudo.log

sudooption: timestamp_timeout=5

sudooption: ignore_local_sudoers

sudooption: !env_reset

sudooption: log_year

sudooption: log_host

sudooption: insults

sudouser: rupesh

uid: rupesh

uidnumber: 2164

userpassword: welcome123

------------------------------


**Non sudo user LDIF:**


dn: uid=contactus,ou=example,dc=example,dc=com

cn: contactus

gidnumber: 502

homedirectory: /home/contactus

loginshell: /bin/bash

mail: Contact.Us@example.com

objectclass: extensibleObject

objectclass: posixAccount

objectclass: top

objectclass: shadowAccount

objectclass: sudoRole

shadowlastchange: 15621

shadowmax: 99999

shadowmin: 0

shadowwarning: 7

uid: contactus

uidnumber: 2108

userpassword:welcome@123

【问题讨论】:

  • 如何区分 LDAP 中的 sudo 用户和非 sudo 用户?有一个可以使用的对象类“sudoRole”,但它被分配给两个用户,所以它似乎没用。
  • 我会从 nonsudo 用户中删除 sudorole 但你能帮我如何在 php 中编码

标签: php ldap


【解决方案1】:

我首先对具有给定 uid 且属性 objectclass 设置为 sudorole 的用户进行 LDAP 搜索。当没有返回结果时,eitehr 用户名错误或用户不是 sudoer。

当您有结果时,您可以使用该结果dn 来检查提供的密码。我在https://gist.github.com/heiglandreas/5689592 准备了一个完整的代码示例。

您必须将第 38 行中的过滤器从 objectclass=posixAccount 调整为 objectclass=sudorole

希望有帮助

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多