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

时间:2016-11-11 10:05:55

标签: windows cmd access mklink

方案

我目前正在查看我的应用安装程序的安全问题。即使完整的上下文可能与我的问题无关,这里也是我要做的:https://skanthak.homepage.t-online.de/!execute.html

问题

我确实拥有一个具有提升权限的CMD并被模仿为SYSTEM,我使用Sysinternals套件中的PsExec(请参阅this)。

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

执行时

mklink /h version.dll C:\Windows\System32\version.dll

“拒绝访问”

我已按照答案here中的说明向我的用户,系统和管理员授予了“创建符号链接”权限。

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

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

问题

为什么命令失败并且ACCESS DENIED?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

我刚刚测试了这个方法,以验证它仍然有效,虽然在过去我已经想出如何减少对完全控制的需求,但这只是手动筛选可能的特殊权限,所以你如果你愿意,可以这样做(我相信最小是“文件属性”和“特殊文件属性”添加/更改/删除)

无论如何,很高兴解决您的问题。 :)

最初我遇到了同样的问题:

C:\Admin>mklink /h C:\Admin\testlink\version.dll C:\Windows\System32\version.dll
Access is denied.

获取该文件的所有权并授予我的用户完全权限后,该链接可以成功完成:

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