【问题标题】:How to programmatically read permissions on MSMQ queues?如何以编程方式读取 MSMQ 队列的权限?
【发布时间】:2011-09-24 18:44:17
【问题描述】:

有大量在线建议使用 .net System.Messaging.MessageQueue SetPermissions 方法以编程方式设置 MSMQ 权限。但我找不到任何 system.messaging 属性可以让我读取现有队列上当前配置的权限。

我正在尝试编写一个 powershell 审计脚本来评估几十台机器的配置,如果我无法获得队列的配置权限,它几乎完全没用。

我对命令行选项的建议持开放态度,但在 stackoverflow 中没有发现任何内容。 Yoel 的 MSMQ WMI 提供程序没有公开必要的信息,据我所知,MSMQ 没有提供任何命令行来帮助您。

不敢相信这是没有人解决的问题。 Microsoft 的另一款企业产品缺少基本安全功能(验证)。

使用 powershell 进行审计,更喜欢内置或 .net 框架解决方案,但如果需要,可以通过任何必要的方式 (CLI) 获取信息。

【问题讨论】:

    标签: powershell permissions msmq


    【解决方案1】:

    您可能无法使用P/Invoke to call MQGetQueueSecurity。 IIRC COM 接口也不支持读取队列权限。

    【讨论】:

    • 感谢您的信息,如果可能,我想避免调用 dll。此外,代码仅获取二进制安全描述符,如果我通过 powershell reg ex 解析 Queue lqs 文件,它实际上也可用。我想下一个问题是如何从中获取安全主体、权限等?例如:[Properties] Label=private$\testtran Type=00000000-0000-0000-0000-000000000000 QueueName=\private$\testtran Journal=00 Quota=4294967295 Security=01000780b0000000cc000000000000001400000002009c00050000000000140004000000010100000000000507000000000024003f000f00010500000000000...
    • 我还没有考虑到这一点(所以我可能会半途而废),但我认为你会想要使用 System.Security.AccessControl 命名空间来剥离访问控制列表。把它变成一个字节数组,你至少应该能够从中创建一个RawAcl。甚至可以将字节数组变成更有用的东西。
    • 太糟糕了,我不能指望所有有 Windows Vista plus 的盒子......从 Vista WMI 有一个安全描述符类,可以读取二进制安全描述符并吐出包含几乎所有内容的 win32_ACE 数组(不清楚它是否适用于 MSMQ SD,需要尝试)。 msdn.microsoft.com/en-us/library/…
    【解决方案2】:

    我遇到了同样的问题,并接受了这里提出的一些建议。我做了一个小的 c# 项目,它使用 p/invoke 来获取用户对给定队列的权限。

    请随意使用或贡献:

    https://github.com/jlevitt/MSMQSecurity

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 2016-08-10
      • 2010-11-06
      • 2012-04-27
      • 2011-07-30
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 2010-12-07
      相关资源
      最近更新 更多