如何使用wix安装程序拒绝用户的文件夹权限

时间:2018-03-28 20:09:32

标签: permissions wix windows-installer installer

我的目标是将我的应用程序安装到文件夹中:

  • SYSTEM
  • 可读写
  • 管理员可读写
  • 没有其他任何人的其他权限。

我尝试了wix PermissionPermissionEx元素的各种组合和排列。

我最近的尝试是:

<CreateFolder>
  <util:PermissionEx User="Users" GenericRead="no" Read="no"/>
  <util:PermissionEx User="Everyone" GenericRead="no" Read="no"/>
  <util:PermissionEx User="Administrators" GenericAll="yes"/>
</CreateFolder>

Component元素内。

我的结果始终相同:用户仍​​然显示读取读取和执行以及列表文件夹内容的权限在已安装的文件夹上。

我的目标与Restrict access to a folder installed using wix installer

非常相似

我还考虑了WIX: Giving Permissions to a folderWix: How to set permissions for folder and all sub folders

2 个答案:

答案 0 :(得分:1)

我只是想知道你的总体目标是什么(可以应用几个选项):

  • 目标是阻止普通用户运行该应用程序吗? (if so, you could make elevation required for running - 不是很好,但应该有效。在应用程序启动时会要求普通用户输入管理员密码。如果他们没有,他们就无法运行应用程序 - 据我所知 - 除非他们提升的管理员帐户没有密码!)。
  • 目标是阻止普通用户列出相关实际文件夹的内容吗?更换ACL(禁用继承权限)并仅为您希望能够访问该文件夹的用户/用户/组添加访问权限应该可以解决问题。不需要拒绝普通用户的权利或特定权利。换句话说,只需替换现有ACL并为管理员添加通用写入和SYSTEM?
  • 的完全权限

我确信您非常清楚,修改ACL会产生很多副作用,特别是拒绝权利(在自我修复过程中会发生什么?)。我现在没有时间测试特定的ACL,但如果你仍然需要,我会在明天再次检查。我认为require admin rights选项可能对您有用吗?

Quick Mock-Up

只想添加quick way来测试我发现的权限。只需在Windows资源管理器中根据需要修改ACL权限即可。然后启动提升的命令提示符并导航到要捕获其ACL的文件夹。然后去:

cacls.exe foldername /s

这应显示SDDL string您可以直接在WiX中转储以使用MSI文件中新的内置LockPermissionEx表格( MSI 5 only! ) :

<Component Feature="ProductFeature">
   <File Source="Files\Test.exe" />
   <CreateFolder>
     <PermissionEx Id="p1" Sddl="D:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;0x1200a8;;;BU)" />
   </CreateFolder>
</Component>

以上内容应该产生一个文件夹,该文件夹具有SYSTEM,Administrators和&#34;特殊访问权限的完全访问权限。对于常规用户(遍历文件夹/运行文件,读取属性,读取扩展属性,读取访问权限)。如下所述,这不能很好地工作,因为管理员通常运行非提升,然后模仿常规用户(不是100%确定这是如何工作的。)

如您所知,many, different WiX elements that relate to permissioning(中间页),您还可以使用自定义操作进行权限管理(不推荐)。明天再去测试一下。 也许升级的EXE与受保护的数据文件夹的组合可以起作用?或者可能是一种让系统尝试启动它指向的文件而没有提升的触发快捷方式调用高程的方法。

尝试列出一些选项

更新:今天没有多少测试,但我考虑了可能的选项列表。其中一些选项只是记下来而不是真的可行。他们会把事情排除在外,看看他们是否可以激发新的更好的想法。可能是8123&amp;可以使用6吗?也许是组合?

组合? :超级隐藏的安装文件夹,也是ACL锁定的,并且通过从映射驱动器运行的始终提升的EXE来访问? (访问基于访问的枚举服务器共享?):

  1. 锁定/隐藏&amp;提升 :使用ACL隐藏子文件夹,然后通过修改应用程序清单在应用程序启动时要求UAC提升?单个启动器应用程序EXE将可见? (可以超隐藏吗?见下一个要点)。
    • 安全性不高(一旦提升,访问权限普遍),但我认为它会起作用,并且没有常规用户可以访问ACL受保护的数据子文件夹(他们会看到它 - 但请查看具有超级隐藏文件夹状态的下一个选项 - 组合可能吗?)。
      • 在尝试调用需要管理员权限才能运行的可执行文件时,我会提到常规用户将被要求输入密码。没有管理员密码,据我所知,他们根本无法运行应用程序。可以在当下的热度中忘记,经理可能会错过,根本需要管理员权限来运行应用程序。我见过它。
      • 虽然可以通过组策略阻止企业网络,但如果有无密码的本地管理员帐户(这在小型企业中很常见),那么任何标准用户都可以通过无密码管理员帐户提升管理员权限 - 一旦提示输入管理员密码
        • 容易忘记
        • 巨大的安全漏洞
        • 我从未尝试过highest available elevation option(仅提升为管理员帐户的管理员权限,否则以有限权限运行)。
      • 不确定如果 UAC被禁用会发生什么。整个方法可能会失败?或者它可能只是在没有询问的情况下升高我不知道
      • 进一步的安全问题最好不要提及同一行,因为任何提升的流程都存在问题:访问权限是普遍的而不是特定的(&#34; 全部访问后台传递&#34; - 除非您limit privileges帐户良好。)
      • 毫无疑问 提升EXE文件应理想地仅用于允许系统管理员进行系统维护和配置,他们知道自己在做什么< / em>的。 Elevation在常规企业应用程序的良好软件工程中没有优势 理论上理论与实践之间应该没有区别,但在实践中有: - )。
    • 您可能需要保持主应用程序二进制文件可见,以便任何用户都可以启动它。否则,MSI自我修复会在指向的文件无法访问时启动。也许自定义快捷方式标志可以立即强制提升?去看看。
  2. 使文件夹超级隐藏 :这可能是一个愚蠢的选择。这取决于您的用例以及这些文件必须受到何种保护?他们只是想要看不见,还是他们必须被锁定&#34;无法进入? You can set a super-hidden flag for your folder with a simple attrib command

    attrib +s +h "C:\Folder\"
    

    该文件夹现在像某些核心操作系统文件夹一样是超级隐藏的。除非您采取特殊步骤使其显示(显示隐藏的操作系统文件 - 请参阅上面的链接),否则此类文件夹不会显示在Windows资源管理器或命令行中。但是,如果用户知道该文件夹在那里,则不会锁定该文件夹以进行访问。也许你可以将超隐藏旗帜与另一种方法相结合? (隐藏文件夹并将其锁定?)

  3. 基于访问权限的枚举服务器共享 :这个新的服务器功能似乎是您实际需要的。它隐藏了有问题的用户没有访问权限的文件夹,但我不认为该功能可以在普通PC(非服务器)上使用。也许它可以吗?稍后要检查的东西。我不知道是否可以选择在服务器共享上存储文件?

  4. 数据库连接 :这肯定是不可能的 - 出于某种原因 - 但房间里的大象就是这种数据访问的原因(如果它与数据相关 - 访问)是否通过数据库和经过身份验证的连接完成?
  5. 网络应用 :与4一样,显然存在一个很好的理由阻止您将其设为网络应用程序?或者我想它可能是我们所知道的网络应用程序。记下想到的任何事情,请耐心等待。
  6. 通过登录脚本/组策略映射驱动器 :我想您可以通过登录脚本(或更好,using group policy)使用映射驱动器仅映射应该有权访问该应用程序的用户?我认为简单的应用程序可以直接运行这样的映射驱动器。无法安装。或者您在映射的驱动器中保留二进制文件,并在本地保留其余文件?
  7. NTFS符号链接 :正如我所说,试图记下所有想到的内容。我从未使用过此功能,但我知道NTFS symbolic link可能指向服务器共享。如果该服务器支持基于访问的枚举怎么办?这会隐藏某些用户的文件和文件夹吗?不明智地列出你没有尝试过的选项,但是其他人可能会更好地阅读它吗?
  8. 自定义NT访问组 :我想知道最简单的&#34;修复&#34;所有这些都是创建一个本地或AD访问组,您需要成为其中的一员才能访问您的文件夹。因此,您删除所有内置组,添加SYSTEM和具有完全访问权限的自定义组以及技术上需要的任何其他组(创建者?)。 我还没有测试过这个(也许这是你尝试的第一件事?)。将这样的本地组与超级隐藏文件夹组合起来就像一个选项。普通用户不会轻易看到该文件夹​​,如果他们这样做,他们无法访问该文件夹?仍然存在启动快捷方式可见性的问题? (如果用户无法启动应用程序,为什么用户应该看到它。)

答案 1 :(得分:1)

如果您可以找到(或创建)具有所需权限的文件夹,我将首先使用CACLS.exe以SDDL格式显示权限。完成后,您可以在MSI中使用MsiLockPermissionsEx表。

WiX似乎没有直接支持MsiLockPermissionsEx表,因为似乎没有办法只是粘贴SDDL字符串来应用于某些东西,除非我在某处错过了它。