使用与程序文件中相同的权限保护外部驱动器上的程序

Ric*_* V. 3 windows security permissions file-permissions

我将一些程序从 Program Files 和 Program Files (x86) 移动到辅助驱动器上的另一个文件夹以节省空间。但是,任何具有用户级权限的程序现在都可以写入该文件夹,从而修改/后门我的程序。这对 Program Files 来说是不可能的,因为 Program Files 只能由管理员写入。

如何对我的文件夹应用与 Program Files 相同的保护级别?谢谢

use*_*686 6

驱动器必须使用 NTFS。您不能在 FAT/exFAT 上执行此操作。

在NTFS卷上,所有的这些保护是基于普通文件的ACL,你可以改变通过icacls.exeSet-Acl或在文件夹的“属性”窗口中选择“安全”选项卡。

克隆现有 ACL 的一种简单方法是通过 PowerShell(它产生相同的有效 ACL,但顺序略有不同):

PS> Get-Acl "C:\Program Files" | Set-Acl D:\Games
Run Code Online (Sandbox Code Playgroud)

...或使用 icacls 中的备份/恢复功能(生成精确副本):

CMD> cd/d "C:\Program Files"
CMD> icacls . /save C:\theacl.txt
CMD> cd/d D:\Games
CMD> icacls . /restore C:\theacl.txt
Run Code Online (Sandbox Code Playgroud)

或者,您可以禁用主文件夹上的继承,删除现有访问条目并从头开始构建 ACL:

> icacls D:\Games /inheritance:r
> icacls D:\Games /grant SYSTEM:(OI)(CI)F
> icacls D:\Games /grant "NT SERVICE\TrustedInstaller:(OI)(CI)F"
> icacls D:\Games /grant Administrators:(OI)(CI)F
> icacls D:\Games /grant Users:(OI)(CI)RX
> icacls D:\Games\Foo\Screenshots /grant Users:(OI)(CI)M
Run Code Online (Sandbox Code Playgroud)

在 icacls 中,“I”的意思是“继承”,“OI”的意思是“文件可继承”(对象),“CI”的意思是“子文件夹可继承的”(容器),“IO”的意思是“仅继承”(适用于儿童,但不是对象本身)。无论您使用 icacls 还是“安全”窗口,它们都有相同的选项。

不要忘记检查所有子文件夹是否都在使用继承权限——如果任何子文件夹禁用了继承,它就不会自动接收您设置的保护。icacls D:\Games\Foo /reset /t会做的伎俩。

作为最后一步,将目录的所有权交给例如管理员甚至 TrustedInstaller,因为所有者始终可以编辑权限(因此恶意软件运行时您可以在技术上授予自己完全访问权限):

> takeown /f "D:\My Programs" /a /r
Run Code Online (Sandbox Code Playgroud)