↓ 跳过正文

Block Delete Windows File

·4360 字·9 分钟
Suntower Lee
作者
Suntower Lee
记录工作中的技术笔记和日常观察,也发布自己开发的小软件。

场景重新确认与整体思路评估
#

基于您描述的场景,我们的目标是确保普通用户(标准账户)在Windows 11专业版(Pro)或企业版(Enterprise)中,能够以自己的身份登录并运行软件,该软件需要对指定文件夹的完全控制权限(包括创建、修改和删除内部文件,以支持连续数据采集)。同时,在软件关闭后,该用户无法通过任何常见操作删除或移动软件生成的文件或文件夹本身。这包括阻止资源管理器(File Explorer)中的右键删除/重命名菜单、拖拽到回收站或移动动作、键盘Delete/Shift+Delete/Cut(Ctrl+X)等操作,以及禁用命令行工具(如CMD或PowerShell)来防止绕过。

您提出的思路——避免使用NTFS权限设置,转而通过禁用UI操作和命令行工具的“组合拳”——是一个可行的替代路径,尤其适用于不想修改文件系统权限的环境(如担心软件兼容性问题)。这个方法的核心是利用Windows的组策略(Group Policy)、注册表(Registry)修改和可选的第三方工具来限制用户交互,而不直接触及文件权限。这可以从多个层面“封堵”删除路径:UI层面(菜单和拖拽)、键盘输入层面,以及命令行层面。

优点与局限性(从多个角度分析)
#

  • 优点:保持文件夹的默认NTFS权限(普通用户通常有修改权限),确保软件运行时无缝创建/编辑文件。设置相对简单、可逆,且在企业版中可通过域组策略集中部署。相比NTFS,它不会干扰软件的临时文件处理(如Office-style的保存机制)。
  • 局限性:这些限制不是“铁板一块”。Windows设计上允许用户通过其他程序(如第三方文件管理器、脚本或甚至浏览器下载工具)绕过;例如,如果用户安装了Total Commander,它可能忽略某些组策略。禁用命令行会影响用户其他合法操作(如运行批处理脚本)。此外,系统更新(如Windows 11的累积更新)可能重置某些注册表设置,需要监控。
  • 安全含义:这增加了用户挫败感(e.g., 无法重命名文件),但提升了数据保护。企业环境中,结合Windows Defender或Endpoint Manager可审计绕过尝试。
  • 兼容性考虑:软件必须以普通用户权限运行;如果它依赖CMD/PowerShell(如某些安装脚本),需测试。边缘案例:如果文件夹在网络共享上,这些本地设置无效,需要服务器端配置。
  • 法律/合规角度:在公司环境中,确保符合数据保留政策(如GDPR要求不可删数据);但如果用户是儿童或受限群体,需注意访问性法规。
  • 性能影响:最小,组策略和注册表修改不消耗资源。
  • 可逆性:所有变更可轻松回滚(e.g., 禁用组策略或删除注册表键)。

此方法在Microsoft文档、社区论坛(如Reddit、SuperUser)和专家交流(如Experts Exchange)中被验证有效,尤其在 kiosk 或受限用户场景中。以下是详细步骤,按类别结构化,覆盖原生工具优先,辅以第三方备选。

步骤1: 使用组策略(GPO)禁用命令行工具和部分UI操作
#

组策略是Windows Pro/Enterprise的核心工具,可针对标准用户应用限制,而不影响管理员。企业版支持域级GPO,便于多机部署。

核心设置(针对CMD和PowerShell)
#

  1. 以管理员身份打开组策略编辑器:

    • 按Win + R,输入gpedit.msc,回车。
    • 导航到用户配置 > 管理模板 > 系统。
  2. 禁用命令提示符(CMD):

    • 双击阻止访问命令提示符(Prevent access to the command prompt)。
    • 选择已启用,并在选项中勾选禁用命令提示符脚本处理(Yes, disable command prompt script processing also)。这阻止批处理文件运行。
    • 应用后,标准用户尝试打开CMD会提示“操作已被取消由于此计算机上的限制”。
  3. 禁用PowerShell(类似CMD的替代):

    • 导航到用户配置 > 管理模板 > Windows 组件 > Windows PowerShell。
    • 双击关闭WinRM客户端访问和关闭WinRM服务(如果适用),或直接禁用运行PowerShell脚本。
    • 备选:使用AppLocker(企业版)限制PowerShell.exe执行:计算机配置 > Windows 设置 > 安全设置 > 应用程序控制策略 > AppLocker > 可执行规则 → 创建规则拒绝标准用户运行%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe。
  4. 禁用运行对话框(Run)和任务管理器(防止间接命令行访问):

    • 在用户配置 > 管理模板 > 开始菜单和任务栏,启用删除“运行”菜单(Remove Run menu from Start Menu)。
    • 在用户配置 > 管理模板 > 系统 > Ctrl+Alt+Del选项,启用删除任务管理器(Remove Task Manager)。
  5. 应用并测试:

    • 运行gpupdate /force刷新策略。
    • 切换到标准用户:尝试Win + R打开Run,或CMD,应失败。这防止用户用del命令删除文件。

企业版扩展
#

  • 通过域控制器创建GPO,链接到OU(组织单位),仅针对标准用户组(Users)。这确保管理员不受影响。

细微差别
#

  • 如果软件依赖CMD/PowerShell(罕见,但如自动化脚本),需白名单特定命令(通过自定义GPO脚本)。
  • 边缘:用户可通过WSL(Windows Subsystem for Linux)绕过,如果启用;禁用WSL via 控制面板 > 程序和功能 > 启用或关闭Windows功能。

步骤2: 通过注册表修改禁用资源管理器中的删除菜单、重命名和键盘操作
#

注册表修改可精确针对File Explorer的上下文菜单和键盘行为。备份注册表(Regedit > 文件 > 导出)以防万一。

  1. 禁用右键上下文菜单中的“删除”和“重命名”:

    • 打开Regedit(Win + R > regedit)。
    • 导航到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer(如果无,创建)。
    • 创建DWORD值:NoDelete = 1(禁用删除菜单);NoRename = 1(禁用重命名)。
    • 对于所有用户:用HKEY_LOCAL_MACHINE路径,并用GPO推送。
    • 重启Explorer(任务管理器 > 结束explorer.exe > 文件 > 新任务 > explorer.exe)。
    • 测试:右键文件,删除/重命名选项消失。
  2. 禁用键盘Delete键和Shift+Delete在File Explorer中:

    • 直接禁用特定键需第三方,但原生近似:导航到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer。
    • 创建DWORD:NoWinKeys = 1(禁用部分Windows热键,但不直接针对Delete)。
    • 更精确:用PowerToys(Microsoft免费工具,下载自Microsoft Store)中的Keyboard Manager重映射Delete键为无操作(在File Explorer上下文中)。
    • 备选注册表:创建HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System,添加DisableKey字符串值,包含Delete的扫描码(但复杂,参考SharpKeys工具生成)。
  3. 禁用拖拽和掉落到回收站/移动:

    • 导航到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer。
    • 创建DWORD:NoDrag = 1(禁用拖拽)。
    • 增加拖拽阈值(使拖拽不敏感):在HKEY_CURRENT_USER\Desktop,设置DragHeight和DragWidth为4096(像素),用户需拖很远才触发。
    • 对于回收站具体:导航到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\NonEnum,添加{645FF040-5081-101B-9F08-00AA002F954E} = 1(隐藏回收站,但不完全禁用拖拽)。
    • 测试:尝试拖文件到回收站或另一文件夹,应无响应或需极远距离。

示例注册表文件(.reg)批量应用
#

  • 创建文本文件,粘贴:
    Windows Registry Editor Version 5.00
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
    "NoDelete"=dword:00000001
    "NoRename"=dword:00000001
    "NoDrag"=dword:00000001
    [HKEY_CURRENT_USER\Desktop]
    "DragHeight"="4096"
    "DragWidth"="4096"
  • 保存为.reg,双击导入。适用于当前用户;用管理员运行影响所有。

细微差别与边缘
#

  • 这些不影响软件内部删除(e.g., 软件用API删除临时文件)。
  • 边缘:用户可通过“剪切”(Ctrl+X)+“粘贴”绕过;禁用Ctrl键组合 via 注册表Scancode Map(复杂,需重启)。
  • 如果Windows更新重置:用任务调度器脚本定期应用.reg。

步骤3: 禁用其他潜在绕过路径(键盘剪切、移动等)
#

  1. 禁用键盘剪切(Ctrl+X)和移动:

    • 用PowerToys Keyboard Manager:重映射Ctrl+X为无(全局或Explorer-specific)。
    • 原生:注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,添加NoCut = 1(但非标准,测试中有效率低)。
  2. 阻止通过其他工具删除:

    • 启用AppLocker(企业版):拒绝标准用户运行常见文件管理器如cmd.exe、powershell.exe、del命令。
    • 禁用回收站确认:但反之,启用删除确认(Regedit: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,ConfirmFileDelete = 1),增加障碍。

步骤4: 可选第三方工具增强(如果原生不足)
#

  • AutoHotkey:脚本禁用特定键/动作 in Explorer(e.g., #IfWinActive ahk_class CabinetWClass, Del::return)。
  • Directory Defender(Blue Shoe Software):专门防止文件删除,而不改权限。
  • SharpKeys:重映射Delete键。
  • 含义:第三方增加灵活性,但引入依赖;企业中评估安全。

综合测试与维护
#

  1. 验证流程:创建测试文件夹,运行软件生成文件;关闭后,尝试所有禁止操作,应失败。
  2. 监控:启用文件审核(文件夹属性 > 安全 > 高级 > 审核),日志事件查看器中失败删除。
  3. 回滚:删除注册表键,禁用GPO,运行gpupdate。
  4. 相关考虑:如果软件生成的文件需额外保护,结合BitLocker加密文件夹。未来Windows版本(如24H2)可能引入新限制,定期检查更新。

这个组合拳在实际案例中(如学校/公司受限账户)证明有效,但若用户高度技术化,可能需NTFS作为后备。提供更多软件细节可进一步优化。