两层权限取交集
通过网上邻居访问共享文件夹时,要同时通过两道权限检查:共享权限与文件系统权限。共享权限只在网络访问时生效且粒度较粗,文件系统权限在本地与网络访问时都生效且可以细化到单个文件。最终能否访问取两者中最严格的结果,所以「共享里给了完全控制却还是打不开」这类问题,答案通常在文件系统那一层。反过来,本地登录不经过共享权限,这解释了为什么同一个人在本机可以打开、从别的机器访问却被拒。
基本信息
| 适用平台 | Windows 服务器与客户端,基于 SMB 的文件共享 |
|---|---|
| 共享权限 | 仅作用于网络访问,粒度较粗,通常分读取、更改与完全控制三档 |
| 文件系统权限 | 本地与网络访问都生效,可细化到具体权限项与继承规则 |
| 生效规则 | 网络访问取两者交集,最严格的一方决定最终结果 |
| 本地访问 | 只受文件系统权限约束,共享权限不参与 |
| 排查工具 | 共享访问列表查询与访问控制列表查询 |
典型使用场景
- 排查「权限已给但仍无法访问」:确认两层是否都放行
- 新共享上线:先按最小权限原则配置,再按需放开
- 权限回收:用户转岗或离职后同时清理两处权限设置
- 访问审计:导出两层权限清单做定期核对
- 变更后验证:从客户端实测读写,而不是只看配置界面
- 排查本地可用而远程不可用:定位问题在共享层还是文件系统层
常用示例
常用示例
# 查看共享层的权限分配
Get-SmbShareAccess -Name Share01
# 查看文件系统层的访问控制列表
(Get-Acl D:\Share01).Access | Select-Object IdentityReference, FileSystemRights, AccessControlType
# 查看当前共享清单与路径
Get-SmbShare | Select-Object Name, Path
# 从客户端验证读写(在客户端执行)
New-Item \\server\Share01\test.txt -ItemType File
Remove-Item \\server\Share01\test.txt
# 查看有效权限(含继承来源)
Get-Acl D:\Share01 | Select-Object -ExpandProperty Access | Format-Table IdentityReference, FileSystemRights, IsInherited -AutoSize两层权限对照
| 对比项 | 共享权限 | 文件系统权限 |
|---|---|---|
| 生效范围 | 仅网络访问 | 本地与网络访问都生效 |
| 粒度 | 粗,按读取、更改、完全控制划分 | 细,可到单个权限项 |
| 继承 | 不继承 | 支持继承与显式设置 |
| 最终作用 | 与文件系统权限取交集 | 与共享权限取交集 |
| 常见误判 | 以为给了完全控制就够 | 忽略本地与网络都会受限 |
排查顺序建议:先看共享层给了谁什么权限,再看文件系统层是否放行同一账号,最后从客户端实测读写。三层都确认过,权限问题基本就闭环了。
修改权限后,已经建立的连接可能缓存了文件句柄,用户仍沿用旧权限。遇到「改了没生效」时,让用户断开重连或注销后重新访问再测。