本文簡述通過PHP操作AD
工具 ADLDAP.php
下載位置http://adldap.sourceforge.net/download.php
API(以下來自http://adldap.sourceforge.net,翻譯水平有限,如有不妥之處敬請指正)
constructor($options=array())//構造器
你可以通過配置變量的方式指定該類中AD的設置, 或者當類被調用的時候可以通過指定$option數組的方式被覆蓋.
調用方式形似 $object = new adLDAP($options); $options 是一個由下列一個或多個keys組成的數組
account_suffix
默認:”@mydomain.local”
完整的域帳戶後綴
base_dn
默認: “DC=mydomain,DC=local”
域的base dn. 一般來講 base dn 與account suffix相同, 但是被隔開的且以"DC="為前綴. base dn 可被定位於Active Directory Users及Computers MMC的擴
展屬性上
如果認證用戶正常,但不能搜索,一般來說是由於指定了不正確的base_dn
domain_controllers
默認: array (“dc01.mydomain.local”)
域控制器數組,如果你希望該類通過多個控制器來平衡查詢,可以在該數組中指定多個控制器,記住該類會向一個不可連接的域控制器發送請求,因為它只實施平衡
而無容錯
.
ad_username
默認: NULL
默認地,adLDAP會以已經認證的用戶帳號權限執行查詢,你可以指定一個擁有更高權限的用來執行授權操作的用戶帳號
ad_password
默認: NULL
ad_username相應的密碼.
real_primarygroup
通過“Domain Users” 覆蓋 primary group
use_ssl
默認: false
adLDAP 可以通過SSL使用LDAP以提供額外功能例如修改密碼,選擇此項時你的域控制器和WEB服務器均需配置相應選項,不只將其設置為true,詳細請參考SSL方式的
LDAP選項
recursive_groups
默認: true
遞歸查詢組成員
如用戶Fred是組“Business Unit” 的成員,“Business Unit” 是組Department”的成員,Department”是組“Company”的成員
user_ingroup(“Fred”,”Company”)當該項開啟的時候返回true,否則返回false
------------------------以下主要的操作方法
authenticate($username,$password,$prevent_rebind=false)
鑒別域控制器用戶的username/password
group_add_group($parent,$child)
向父組裡添加子組,返回true或false
group_add_user($group,$username)
向一個組裡添加一個用戶,返回true或false
group_create($attributes)
以指定屬性創建一個組,返回true或false
Attribute Req Notes
group_name *
container *
description
group_del_group($parent,$child)
從父組裡刪除子組,返回true或false
group_del_user($group,$users)
從一個組裡刪除一個用戶,返回true或false
group_info($group_name,$fields=NULL)
返回一個關於指定組的信息數組,組名稱區分大小寫
默認文件包含member, memberof, description, distinguishedname, objectcategory, samaccountname
user_create($attributes)
創建一個用戶,操作成功或失敗時返回true或false
Attribute Req Notes
username *
firstname *
surname *
email *
container * The folder in AD to add the user to.
address_city
address_code
address_pobox
address_state
address_street
change_password 如果為0用戶下次登錄時無需修改密碼為1時下次登錄時必須修改密碼
company 公司名稱.
department
description
display_name
email email地址,非exchange mailbox
enabled 0 為 disabled 1 為 enabled
expires 帳戶有效期 (unix timestamp).
firstname
home_directory
home_drive
initials
logon_name 登錄名稱不同於其他用戶名.
manager
office
password The password can only be set over SSL. It must also meet the password policy for your domain.
profile_path
script_path
surname
title
telephone
web_page
user_delete($username)
刪除一個用戶,返回 true 或 false
user_groups($username,$recursive=NULL)
返回用戶所屬組的信息
如果$recursive為 true, 將遞歸返回組列表.
user_info($username,$fields=NULL)
返回指定用戶的信息數組,$fields必須為數組
默認fields 為: samaccountname, mail, memberof, department, displayname, telephonenumber, primarygroupid
欲查看所有可用信息,將$fields 設置"*"調用此函數
這個函數將返回一個有限集,除非當前認證帳戶為administrator,一個用戶也不能查詢另一個用戶的"memberof"域,除非它們是這個容器的管理者
user_ingroup($username,$group,$recursive=NULL)
用戶是否屬於該組,返回true或false
像user_info()函數一樣,這個函數只有當當前認證用戶是administrator時才會返回有效結果
user_modify($username,$attributes)
修改用戶屬性,返回true或false
user_password($username,$password)
設置指定用戶的密碼,. 要求配置通過ldaps.
computer_info($computer_name,$fields=NULL)
返回指定計算機的詳細信息.
all_users($include_desc = false, $search = "*", $sorted = true)
返回AD裡用戶所有列表,在大目錄裡可能無法工作
all_groups($include_desc = false,$search = "*", $sorted = true)
返回AD裡組所有列表,在大目錄裡可能無法工作
Samples:
登錄
<?php
include "adLDAP.php"
$config['account_suffix'] = '@xxx.com';//域控制器後綴
$config['adserver'] = array('192.168.1.10','192.168.1.1');//域控制器,如果只有一台array('192.168.1.10')
$config['base_dn'] = 'cn=users,dc=xxx,dc=com';
$adldap =new adLDAP(array('domain_controllers'=>$config['adserver'],'account_suffix'=>$config['account_suffix'],'base_dn'=>$config
['base_dn'],'ad_username' => 'administrator','ad_password' => ''));
if($adldap)
{
echo "登錄成功";
}
else
{
echo "登錄失敗";
}
?>
列出所有用戶
<?php
echo "<b>All users</b><br>";
foreach($adldap->all_users() as $val)
{
echo $val."<br>";
}
?>
列出所有組
<?php
echo "<b>groups</b><br>";
foreach($adldap->all_groups() as $val)
{
echo $val."<br>";
}
?>
打印某台計算機信息
<?php
print_r($adldap->user_info("wang"));
?>
創建用戶
<?php
if ($adldap->user_create(array('username' => 'tonix','firstname' => 'firstname','surname' => "surname",'email' => '[email protected]','container' =>
'container')))
{
echo "OK";
}
else
{
echo "error";
}
?>
創建組
<?php
if ($adldap->group_create("group_name=test,container=www"))
{
echo "OK";
}
else
{
echo "error";
}
?>
作者“飛翔的人生”