Windows 10 默认给共享目录的享目限权限太宽了。右键一个文件夹,录去属性 → 共享 → 高级共享,除写勾上“共享此文件夹”之后,入权下面那个“权限”按钮里,享目限Everyone 默认就有“读取”权限。录去很多人到这一步就停了,除写觉得能访问就行。入权但问题在于——如果你之前为了图省事,享目限把 Everyone 的录去权限改成了“完全控制”,现在想收回来只让读不让写,除写光改共享权限是入权不够的。
我遇到过好几次这种情况。享目限同事说“我把共享权限改成只读了,录去怎么他们还能往里拖文件?除写”原因就在 NTFS 权限那一层。Windows 共享访问实际受两套权限叠加控制:共享权限和 NTFS 权限。最终生效的是两者中更严格的那个。但如果你只动了共享权限,NTFS 那边还留着“修改”或“写入”的勾,那写入操作照样能过。
所以正确的做法是两边都查一遍。先看共享权限:右键文件夹 → 属性 → 共享 → 高级共享 → 权限。选中 Everyone(或者你指定的用户/组),下面勾选框里把“更改”和“完全控制”取消掉,只留“读取”。确定保存。
然后切到“安全”选项卡。这里才是 NTFS 权限。点“编辑”,选中同一个用户或组,在“允许”列里检查“写入”有没有被勾上。有的话取消掉。如果这个文件夹是从别处复制过来的,可能还带着继承来的权限,那就得点“高级” → 禁用继承 → 把继承的权限转换或删除,然后再手动分配。
有个细节容易翻车:如果你共享的是某个用户的主目录,而那个用户本身对文件夹有“完全控制”的 NTFS 权限,那你在共享权限里限制写入是有效的——因为共享权限更严格。但反过来,如果你在 NTFS 里给了“修改”,共享权限只给“读取”,最终也是只读。怕就怕两套权限里有一套漏了。
还有一种情况:对方通过映射网络驱动器访问,缓存了旧凭据。你改完权限,他那边可能还在用之前的会话。让他断开重连,或者你在服务器端用 net session /delete 清掉会话。这个命令在普通家庭版上可能没有,专业版和企业版才有。
另外,别忽略“Everyone”这个组。很多人共享时图快,直接给 Everyone 完全控制。后来想收紧,只删了某个具体用户的写入权限,但 Everyone 还在里面,等于没改。检查权限列表时,把 Everyone 也一并处理掉,或者干脆移除 Everyone,只保留需要的用户或组。
如果共享目录里还有子文件夹,子文件夹的 NTFS 权限可能跟父目录不一样。你改了父目录的写入权限,子目录如果之前被单独赋过权,写入照样能进行。用 icacls 命令可以递归查看和修改:icacls D:\Shared /remove:g Everyone:(W) 这种。不过命令行操作前最好先导出当前权限备份一下:icacls D:\Shared /save acl.txt。
实际效果验证很简单。找另一台机器,用只读账号访问共享,试着新建一个文本文件。能建成就说明写入权限没清干净。别只看属性面板里的勾,那个界面有时候刷新不及时。真正靠谱的是命令行 net share 看共享权限,icacls 看 NTFS 权限,两边都确认了才算完。
最后提一句:如果你共享的是整个盘符,比如 D 盘根目录,Windows 默认会有一个“Users”组的特殊权限,允许在本机创建文件。这个权限不影响网络共享的写入判断,但如果你把共享权限设成只读,网络用户就写不进来。本机用户不受影响。别把这两件事搞混了。