簡體   English   中英

僅使用sudo用戶和密碼從PHP認證LDAP用戶?

[英]Authenticating user with LDAP from PHP with only sudo user and Password?

如何使用sudo用戶和密碼使用LDAP從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

我首先用給定的uid對用戶進行LDAP搜索,該uid的屬性objectclass設置為sudorole 如果未返回任何結果,則說明用戶名錯誤或用戶不是sudoer。

得到結果后,可以使用該結果dn來檢查提供的密碼。 我有一個完整的代碼示例, 網址https://gist.github.com/heiglandreas/5689592

您必須將第38行中的過濾器從objectclass=posixAccountobjectclass=sudorole

希望能有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM