如何以编程方式从 Active Directory 获取 objectSid 值?

问题描述 投票:0回答:2

我正在寻找一种以编程方式获取 Active Directory 组的 objectSid 值的方法。 我找到了使用 powerShell 获取此值的解决方案:

Get-WMIObject win32_group -filter "name='WIKI_ADMIN'"|select sid

但是我想要做的不是从 Windows 机器获取这个值,而是从远程 Linux 机器获取。

我发现了一个工具“adcli”,它在 AD 上提供了一些功能(创建用户、组……),但无法获取 groupSid 信息。

是否有其他工具、解决方案、脚本来获得这样的值?

谢谢你

command-line azure-active-directory
2个回答
0
投票

好的,我找到了使用 ldapsearch 命令行的解决方案:

ldapsearch -x -LLL -h ldap_url -D 'cn=user name,OU=users,OU=myOU,DC=myou,DC=com' -w my_password -b 'CN=the_group_name,OU=users,OU=myOU,DC=myou,DC=com' -s sub '(objectClass=group)' | grep objectSid

这给了我类似的东西:

objectSid:: AQUsAAAAAAUVAAAA5BLIGcudyeZ/J0pqbvoAxA==

但是该值是二进制和 Base64 编码的,我在另一个论坛中找到了一个脚本,可以成功解码它:

!/bin/bash
# Base-64 encoded objectSid

OBJECT_ID="AQUAAAAAAAUVAAAAPWW1S5rojK4mDAiG5BAAAA=="

OBJECT_ID=$1


# Decode it, hex-dump it and store it in an array

G=($(echo -n $OBJECT_ID | base64 -d -i | hexdump -v -e '1/1 " %02X"'))



# SID in HEX

# SID_HEX=${G[0]}-${G[1]}-${G[2]}${G[3]}${G[4]}${G[5]}${G[6]}${G[7]}-${G[8]}${G[9]}${G[10]}${G[11]}-${G[12]}${G[13]}${G[14]}${G[15]}-${G[16]}${G[17]}${G[18]}${G[19]}-${G[20]}${G[21]}${G[22]}${G[23]}-${G[24]}${G[25]}${G[26]}${G[27]}${G[28]}



# SID Structure: https://technet.microsoft.com/en-us/library/cc962011.aspx

# LESA = Little Endian Sub Authority

# BESA = Big Endian Sub Authority

# LERID = Little Endian Relative ID

# BERID = Big Endian Relative ID



BESA2=${G[8]}${G[9]}${G[10]}${G[11]}

BESA3=${G[12]}${G[13]}${G[14]}${G[15]}

BESA4=${G[16]}${G[17]}${G[18]}${G[19]}

BESA5=${G[20]}${G[21]}${G[22]}${G[23]}

BERID=${G[24]}${G[25]}${G[26]}${G[27]}${G[28]}



LESA1=${G[2]}${G[3]}${G[4]}${G[5]}${G[6]}${G[7]}

LESA2=${BESA2:6:2}${BESA2:4:2}${BESA2:2:2}${BESA2:0:2}

LESA3=${BESA3:6:2}${BESA3:4:2}${BESA3:2:2}${BESA3:0:2}

LESA4=${BESA4:6:2}${BESA4:4:2}${BESA4:2:2}${BESA4:0:2}

LESA5=${BESA5:6:2}${BESA5:4:2}${BESA5:2:2}${BESA5:0:2}

LERID=${BERID:6:2}${BERID:4:2}${BERID:2:2}${BERID:0:2}



LE_SID_HEX=${LESA1}-${LESA2}-${LESA3}-${LESA4}-${LESA5}-${LERID}



# Initial SID value which is used to construct actual SID

SID="S-1"



# Convert LE_SID_HEX to decimal values and append it to SID as a string

IFS='-' read -ra ADDR <<< "${LE_SID_HEX}"

for OBJECT in "${ADDR[@]}"; do

  SID=${SID}-$((16#${OBJECT}))

done
echo ${SID}

我得到了这个:

S-1-48378511622149-21-432542436-3871972811-1783244671-3288398446

:)


0
投票

对于那些愿意使用 C# 选项(或愿意将 DLL 提取到 PowerShell 中)的人来说,还有另一个选择,那就是您可以使用一个包在 Linux/Windows/任何可以运行 dotnet 的操作系统上获取和转换 SecurityIdentifier。 (披露:我是作者)

https://www.nuget.org/packages/KuzniaSolutions.LdapClient

© www.soinside.com 2019 - 2024. All rights reserved.