在没有远程 powershell 或 WMI 的情况下获取远程 SMB/CIFS 共享的权限

Posted

技术标签:

【中文标题】在没有远程 powershell 或 WMI 的情况下获取远程 SMB/CIFS 共享的权限【英文标题】:Getting permissions of a remote SMB/CIFS share without remote powershell or WMI 【发布时间】:2022-01-18 18:03:59 【问题描述】:

我正在寻找一种从连接到共享的 Windows 计算机中导出 SMB/CIFS 共享的 ACL(不要与 NTFS ACL 混淆)的方法。到目前为止,我可以在共享的高级安全属性中看到权限,但没有办法导出或解析它们,除非是 AutoIT 怪物。

我想以我可以解析的格式获取此信息,可以是 CSV、JSON、XML 等。

我已经检查了这个建议使用 Powershell 的 Get-SmbShareAccess:Retrieving Remote File Share 'Share Permissions' Using Powershell 的问题和这个使用 Get-WmiObject:Get-wmiobject Win32_Share does not show Sharing Permissions 的 TechNet 问题,但两者都假设我们可以在托管共享的服务器上执行 Powershell 代码:这是对我来说不是这样,因为共享不是托管在 Windows 上的,而且我没有对机器的 shell 访问权限。

我对任何语言都持开放态度,但如果可以选择,我更喜欢 Powershell。

【问题讨论】:

【参考方案1】:

Windows 资源管理器通过 win32 API 方法NetShareGetInfo() 使用 RPC,但直接从 Powershell 调用并不容易。

FileShareUtils 是一个很棒的图库模块,可以为您完成所有这些工作,也是我能找到的最佳选择:

$share = Get-NetShare -Name 'MyShare' -Server 'MyFileServer01'
Server              : MyServer01
Name                : MyShare
Path                : E:\Folder\Path
Description         : 
ABE                 : Enabled
CachingMode         : Manual
ShareACLText        : BUILTIN\Administrators|FullControl,Everyone|FullControl
CurrentUses         : 4
ConcurrentUserLimit : -1
BranchCache         : Disabled
Flags               : 2051
Type                : Disk Drive
ShareSDDL           : D:(A;;FA;;;WD)(A;;FA;;;BA)
ShareACL            : System.Security.AccessControl.DirectorySecurity
$share.ShareACL.Access


FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : Everyone
IsInherited       : False
InheritanceFlags  : None
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited       : False
InheritanceFlags  : None
PropagationFlags  : None

我无法测试整个Get-NetShare 是否以非管理员用户身份工作,但如果您可以在文件资源管理器中看到“共享”权限,那么这应该适合您。如果您仍然收到拒绝访问的消息,那么您也许可以通过module code 工作并查看位置/原因。

【讨论】:

看起来棒极了,我马上测试一下。 (Get-NetShare -Name "share" -Server "myserver").ShareACL 正是我正在寻找的东西,非常感谢。

以上是关于在没有远程 powershell 或 WMI 的情况下获取远程 SMB/CIFS 共享的权限的主要内容,如果未能解决你的问题,请参考以下文章

powershell 从本地和远程设备获取WMI数据

Powershell - 调用远程 WMI 对象 - RPC 错误 HRESULT:0x800706BA(RPC 服务器不可用)

PowerShell远程管理01——Powershell远程管理依赖的服务及配置

WMI如何远程执行命令?

如何在没有 WMI 的情况下使用 PowerShell 获取总物理内存大小?

使用 WMI 在远程计算机上执行 .cmd 文件