小编Cha*_*rra的帖子

选择 AD ntSecurityDescriptor 属性作为非管理员

我正在为 Active Directory ACL/ACE 开发 SDDL/安全描述符解析器。我几乎完成了,当我使用管理帐户连接到 LDAP 时,一切正常。

但是,当我尝试将其ntSecurityDescriptor作为非管理帐户进行查询时,它不会返回任何值。用户帐户本身有权读取该属性。当我开始调查这个问题时,我遇到了以下 LDAP 服务器控件:

https://msdn.microsoft.com/en-us/library/cc223323.aspx

LDAP_SERVER_SD_FLAGS_OID 控件与 LDAP 搜索请求一起使用,以控制要检索的 Windows 安全描述符的部分。DC 仅返回安全描述符的指定部分。它还与 LDAP 添加和修改请求一起使用,以控制要修改的 Windows 安全描述符部分。DC 仅修改安全描述符的指定部分。

当将此控制发送到 DC 时,controlValue 字段设置为以下 ASN.1 结构的 BER 编码。

 SDFlagsRequestValue ::= SEQUENCE {
     Flags    INTEGER
 }
Run Code Online (Sandbox Code Playgroud)

标志值具有以下以大端字节顺序表示的格式。X 表示未使用的位,客户端应将其设置为 0,并且服务器必须忽略该位。

指定未设置位或不使用 LDAP_SERVER_SD_FLAGS_OID 控件的 Flags 相当于将 Flags 设置为 (OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION)。将此控制发送到 DC 不会导致服务器在其响应中包含任何控制。

文档中该声明的最后部分似乎不正确,至少在非管理用户的上下文中不正确。

我的问题:我应该如何使用标准 PHP LDAP 库函数将此控件发送到 LDAP?我知道我必须设置服务器控件,但我不确定如何对值进行编码。我已将范围缩小到最简单的示例:

$user = 'user@example.local';
$pass = 'secret';
$server = 'dc1.example.local';

$ldap = ldap_connect($server);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, …
Run Code Online (Sandbox Code Playgroud)

php ldap active-directory

4
推荐指数
1
解决办法
4262
查看次数

标签 统计

active-directory ×1

ldap ×1

php ×1