在没有远程 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 对象 - RPC 错误 HRESULT:0x800706BA(RPC 服务器不可用)
PowerShell远程管理01——Powershell远程管理依赖的服务及配置