在 system32 中创建指向 dll 的硬链接 mklink 会导致访问被拒绝

Chr*_*isM 5 windows cmd mklink

设想

我目前正在研究我的应用程序安装程序的安全问题。尽管完整的上下文可能与我的问题无关,但这就是我想要做的: https: //skanthak.homepage.t-online.de/ !execute.html

问题

我确实有一个具有提升权限的 CMD,并且被冒充为 SYSTEM,这是我使用 Sysinternals 套件中的 PsExec 进行的(请参阅)。

当前文件夹是我的用户文件夹内的一个新的空文件夹。

当我执行时

mklink /h version.dll C:\Windows\System32\version.dll
Run Code Online (Sandbox Code Playgroud)

我收到“访问被拒绝”

我已向我的用户、系统和管理员授予“创建符号链接”权限,如此处答案中所述

我已使用提升的资源管理器尽可能删除了 windows 文件夹及其所有子文件夹的写保护(特别是 version.dll 没有写保护)

我正在 HyperV 托管的虚拟机中执行所有这些操作。虚拟操作系统是Windows 7 Professional SP1。

问题

为什么命令失败并显示 ACCESS DENIED?

Ben*_*ick 3

您遇到的问题是 dll 本身的安全问题。

默认情况下,某些受保护的操作系统文件仅允许受信任的安装程序完全控制它们,并将受信任的安装程序设置为文件的默认所有者。

为了创建硬链接,您必须从受信任的安装程序获取文件的所有权(否则,您无法更改文件的权限)。

设置文件所有者后,您可以更改文件的权限,以便为您的用户提供完全控制权。 -- 之后您可以随时将自己设置回减少的权限集,因为除非您想删除硬链接,否则您将不再需要它们

我刚刚自己测试了这种方法,以验证它是否仍然有效,尽管在过去我已经想出了如何减少对完全控制的需求,但这只是手动分配可能的特殊权限的问题,这样你就可以做到这一点如果你喜欢(我相信最小是完整的“文件属性”和“特殊文件属性”添加/更改/删除)

不管怎样,很高兴解决你的问题。:)

最初我有同样的问题:

C:\Admin>mklink /h C:\Admin\testlink\version.dll C:\Windows\System32\version.dll
Access is denied.
Run Code Online (Sandbox Code Playgroud)

获得文件的所有权并授予我的用户完全权限后,链接能够成功建立:

C:\Admin>mklink /h C:\Admin\testlink\version.dll C:\Windows\System32\version.dll
Hardlink created for C:\Admin\testlink\version.dll <<===>> C:\Windows\System32\version.dll
Run Code Online (Sandbox Code Playgroud)