我将部分程序从 Program Files 和 Program Files (x86) 移至辅助驱动器上的另一个文件夹以节省空间。但是,任何具有用户级权限的程序现在都可以写入该文件夹,从而修改/后门我的程序。对于 Program Files 来说这是不可能的,因为 Program Files 只有管理员才可以写入。
如何对我的文件夹应用与 Program Files 相同级别的保护?谢谢
答案1
驱动器必须使用 NTFS。您无法在 FAT/exFAT 上执行此操作。
在 NTFS 卷上,所有此类保护均基于普通文件 ACL,您可以通过icacls.exe
、Set-Acl
或文件夹“属性”窗口中的“安全”选项卡来更改这些 ACL。
克隆现有 ACL 的简单方法是通过 PowerShell(它生成相同的有效 ACL,但顺序略有不同):
PS> Get-Acl "C:\Program Files" | Set-Acl D:\Games
...或使用 icacls 中的备份/恢复功能(生成精确副本):
CMD> cd/d "C:\Program Files"
CMD> icacls . /save C:\theacl.txt
CMD> cd/d D:\Games
CMD> icacls . /restore C:\theacl.txt
或者,您可以禁用主文件夹的继承,删除现有访问条目并从头开始构建 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
在 icacls 中,“I”表示“继承”,“OI”表示“可由文件继承”(对象),“CI”表示“可由子文件夹继承”(容器),“IO”表示“仅继承”(适用于子项但不适用于对象本身)。无论您使用 icacls 还是“安全”窗口,它们都有相同的选项。
不要忘记检查所有子文件夹是否都使用继承的权限 - 如果任何子文件夹禁用了继承,它将不会自动接收您设置的保护。icacls D:\Games\Foo /reset /t
就可以了。
作为最后一步,将目录的所有权交给管理员或 TrustedInstaller,因为所有者始终被允许编辑权限(因此恶意软件可以按你希望的方式运行)技术上授予自己完全访问权限):
> takeown /f "D:\My Programs" /a /r