【发布时间】: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 中编码