能读不能写排查是什么
共享目录能打开、能看文件,就是保存不了——说明读权限在某几层都通过了,写权限被其中某一层拦住。Windows 的共享访问要同时满足共享权限与 NTFS 权限,两者取交集,任何一层缺写就写不进去。除此之外还有文件只读属性、磁盘配额、文件被其他进程锁定这些非权限因素,排查要按固定顺序走,避免在错误的方向上反复改 ACL。
基本信息
| 判定原理 | 共享权限与 NTFS 权限取交集,任一为只读即不可写 |
|---|---|
| 检查顺序 | 共享权限 → NTFS 权限 → 只读属性 → 磁盘配额 → 文件占用 |
| 常用工具 | Get-SmbShareAccess、icacls、attrib、quota |
| 关键点 | 能新建但改不了,多为缺修改或删除权限 |
| 验证方式 | 用同一账户在命令行实际写一个测试文件 |
排查步骤
- 先复现:用出问题的同一账户登录,确认是保存失败还是新建失败
- 看共享权限:Get-SmbShareAccess 确认该账户拿到的是更改还是只读
- 看 NTFS 权限:icacls 检查写入与修改是否被显式拒绝或缺失
- 查文件属性:attrib 看目标文件是否带只读位
- 查配额:磁盘或目录配额用满也会直接报写入失败
- 排除占用:Office 临时文件需要删除权限,被锁定的文件同样写不进
常用示例
常用示例
Get-SmbShareAccess -Name Share01 # 先看共享层权限是读还是更改
icacls D:\Share01 # 再看 NTFS 层实际 ACL
icacls D:\Share01 /grant "CORP\ops01:(OI)(CI)M" # 缺写权限时补修改权限并向下继承
attrib D:\Share01\*.* | findstr /i "R " # 找只读属性挡住的文件
fsutil quota query D: # 查卷配额是否用满
'ok' | Out-File \\server\Share01\wtest.txt # 用自己的账户实测写入现象与最可能原因
| 现象 | 最可能的位置 | 验证方法 |
|---|---|---|
| 能打开目录但新建失败 | 共享权限为只读 | Get-SmbShareAccess 看等级 |
| 能新建但保存旧文件失败 | NTFS 缺修改或删除权限 | icacls 看目标文件 ACL |
| 只有某几个文件不能改 | 文件带只读属性或被占用 | attrib 与句柄检查 |
| 多人同时写才失败 | 配额或临时文件冲突 | fsutil quota 与错误码 |
| PowerShell 写可以、Office 不行 | 缺删除权限导致临时文件无法落盘 | 给修改权限而非只给写入 |
Office 保存文档时会先在同目录写一个 ~$ 开头的临时文件再改名覆盖,所以“修改”权限要包含删除子项的能力;只给写入权限在很多场景下依然保存失败。
排查时优先用与用户完全相同的账户做测试写入,用管理员账户测试会把权限问题掩盖掉,得到“我这边没问题”的错误结论。