锁定hosts文件为只读并移除写入权限是最直接有效的防御手段,通过系统级属性与ACL双重限制,防止第三方程序擅自修改;命令行执行attrib +r +s +h可永久加固;进阶防护可通过icacls拒绝特定程序对etc目录的读写权限。

Windows 11 中 hosts 文件被第三方程序(如广告拦截工具、安全软件、流氓优化器)擅自修改,会导致本地域名解析异常、开发环境失效甚至隐私泄露。这类修改往往静默发生,用户无感知,且重启后恢复原状,根本原因在于 hosts 文件默认权限过于宽松,任何拥有写入权限的进程都能覆盖它。
锁定 hosts 文件为只读并移除写入权限
这是最直接有效的防御手段,通过系统级属性与 ACL 双重限制,让非管理员进程无法写入或替换文件。
打开文件资源管理器,在地址栏粘贴:C:\Windows\System32\drivers\etc → 回车进入目录。
右键 hosts 文件 → 选择“属性” → 在“常规”选项卡中,勾选“只读”,点击“应用” → 点击“确定”。
再次右键 hosts → “属性” → 切换到“安全”选项卡 → 点击“编辑” → 在弹出窗口中选中当前用户(如 DESKTOP-XXX\YourName)→ 取消勾选“允许”列下的“写入”和“修改”两项 → 点击“确定”。【必须取消这两项,否则只读属性可被拥有写入权限的程序绕过】
若提示“您没有权限更改此文件的安全设置”,请先点击下方“继续”按钮获取临时提权。
用命令行永久加固 hosts 文件属性
图形界面操作可能被某些后台进程复位,而命令行方式能绕过 UI 层干扰,一次性固化保护状态。
以管理员身份运行 Windows 终端(PowerShell 或 CMD)→ 执行以下命令:
attrib +r +s +h C:\Windows\System32\drivers\etc\hosts
该命令同时设置只读(+r)、系统文件(+s)、隐藏(+h)三重属性。其中 +s 和 +h 能阻止大多数 GUI 工具在未启用“显示隐藏文件”时识别该文件,+r 则从文件系统层拒绝写入。
执行后无需重启,立即生效。若需验证是否成功,可在终端中运行:attrib C:\Windows\System32\drivers\etc\hosts,输出应包含 RSH 字符。
阻止特定程序访问 etc 目录(进阶防护)
当已知某个软件(如某款“网络加速器”)反复篡改 hosts,可直接切断其对整个 etc 目录的读写能力,比单锁文件更彻底。
第一步:确认目标程序完整路径(例如 C:\Program Files\XXSpeeder\XXSpeeder.exe)
第二步:以管理员身份运行 PowerShell → 逐行执行:
icacls "C:\Windows\System32\drivers\etc" /deny "NT AUTHORITY\SYSTEM:(OI)(CI)(WD,AD,WA,DC)" /t
icacls "C:\Windows\System32\drivers\etc" /deny "Users:(OI)(CI)(WD,AD,WA,DC)" /t
第三步:针对该程序所在用户组或具体账户单独添加拒绝规则:
icacls "C:\Windows\System32\drivers\etc" /deny "DESKTOP-XXX\XXUser:(OI)(CI)(WD,AD,WA,DC)" /t
注意:/deny 后的权限缩写中,WD=Write Data、AD=Append Data、WA=Write Attributes、DC=Delete Child,(OI)(CI) 表示继承至子对象和子容器。【执行前务必确认目标用户或组名准确,误配可能导致系统服务异常】


















