Windows上限制某些应用访问某些文件夹
起因
Windows的权限管理实在太松,所有软件都可以访问整个硬盘的所有文件. 虽然从Windows Vista开始就有了UAC,Windows 7开始有了AppLocker,但它们并没有阻止某些软件访问某些文件的功能. 有的软件甚至必须要求在管理员权限下才能运行. 想到电脑里还放着一些私钥和保密文件,很有必要对某些不信任的软件加以限制,阻止它们访问不该访问的文件了.
解决方法
HIPS
我想到的第一个方法就是HIPS——能监控程序、文件和注册表的行为,并且现在在用的ESET自带这个功能. 但是当我设置时,发现ESET的HIPS只能控制文件被写入、删除或者通过非标准手段直接对磁盘读写. 没用……
查阅了一些杀毒软件的官网后,发现可能支持阻止文件访问的杀毒软件有卡巴斯基和火绒 ,我都没有尝试 . 卡巴斯基付费的版本才有这个功能,但是实在没摸清楚到底怎么用……
另外,Windows Defender也有一个叫”受控制文件夹的访问“的功能,也是只能控制写入和删除不能控制读取.(毕竟设计出来的作用是防止勒索病毒……)
Sandboxie
Sandboixe作为一款著名的沙盒软件,可以满足我的需求. 安装好后,建一个新沙盘,在沙盘设置
>程序启动
>强制运行文件夹
里设置好需要限制访问文件的程序. 在沙盘设置
>资源访问
>文件访问
>阻止访问
里设置好限制访问的文件夹就完成了.
但是沙盘有沙盘的弊端,某些程序在沙盘里运行,界面的资源会加载不全;一些复制粘贴文件的操作也变得比较麻烦.
以其他用户运行
Windows也是有多用户的(虽然从没用过).
在运行中输入
compmgmt.msc
,打开计算机管理
在
计算机管理
>系统工具
>本地用户和组
>用户
下新建一个用户,设置好密码,让改新用户隶属于User
给新用户完全控制受限制软件所在文件夹的权限,(也可以顺便禁止当前用户的执行权限). 禁止新用户所有对受保护文件的权限
打开PowerShell,执行
1
read-host -assecurestring | convertfrom-securestring > password
输入新用户的密码,回车,生成加密后的新用户的密码
在
C:\Users\Public
里新建一个PowerShell脚本(可能在其他地方建也可以,但有时候会莫名其妙的权限不足),内容如下1
2
3$pwd = "<上一步生成的password文件里的内容>" | convertto-securestring
$cred = new-object pscredential -argumentlist ("<新建用户的用户名>", $pwd)
start-process -filepath "<受限制程序的路径>" -credential $cred以这个PowerShell脚本运行的程序就以新用户运行了
其他用户默认是没法访问当前用户的个人文件夹的可能需要手动赋予权限
关于美观性
如果觉得图标难看或者启动前的PowerShell窗口难看可以创建快捷方式,在属性里修改图标,并以最小化运行. 想固定到开始菜单的磁贴上的话可以把快捷方式放到Windows菜单文件夹里,从Windows菜单里固定
关于双击直接执行PowerShell脚本
Windows出于安全性双击PowerShell脚本会以记事本打开,可以通过修改注册表解决
打开HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\
,修改右侧的默认
键值
0
表示直接运行Edit
表示用PowerShell ISE打开Open
表示用记事本打开
关于在Windows登录界面不显示用户名
- 找到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
- 在
Winlogon
项下新建一个SpecialAccounts
项 - 在
SpecialAccounts
项下新建一个UserList
项 - 在
UserList
项下新建一个名称为<用户名>
的 DWORD ,数据为0
表示隐藏,数据为1
表示显示.
碎碎念
HIPS这种需要用户自己配置的工具已经不怎么流行了,毕竟以破坏用户硬件和文件为目的的病毒也少了(这也让一些用户觉得病毒变少了),越来越多的病毒变成的在后台悄悄挖矿、收集用户隐私或者直接劫持流量的流氓软件,面对越来越流氓的程序、驱动用户更喜欢的是Windows Defender那种不需要配置,静悄悄地运行就很安全的软件.
感觉Windows并没有专为个别程序使用其他用户运行的设计,登陆界面多出来了个没头像的用户真不好看……