先确认身份,再看权限
权限判定的输入是身份,而身份在跨平台环境里恰恰最容易出错:客户端以为自己是 svc,服务端解析出来的却是另一个数字,或者落在了域与本地同名账号之间。因此第一步永远是确认「服务端实际用哪个身份判定这次访问」,之后才是共享层与文件系统层的放行情况。顺序正确时,多数问题在两三条命令内就能定位。
基本信息
| 适用平台 | Windows 共享、Samba、NFS 与 NAS |
|---|---|
| 身份确认 | id、whoami、磁盘上实际属主数字 |
| 共享层 | 共享权限视图与授权列表 |
| 文件系统层 | 权限条目、继承标记与拒绝项 |
| 辅助检查 | 挂载是否为只读、上级目录是否可进入 |
现象与最可能原因
| 现象 | 最可能原因 | 验证方式 |
|---|---|---|
| 连不上共享 | 网络、认证或共享未授权该账号 | 共享访问列表与连接视图 |
| 能进目录但看不到内容 | 目录缺少遍历权限 | 逐级检查路径上每一层的权限 |
| 能读不能写 | 共享层或文件系统层只读 | 两层分别核对写权限 |
| 自己新建的文件也改不了 | 属主或继承设置异常 | 查看新建文件的属主与继承来源 |
| 权限刚改完无效 | 会话或缓存未刷新 | 用新会话或断开重连后复测 |
| 只有部分用户异常 | 组归属或身份映射不一致 | 对照该用户的实际身份解析结果 |
排查命令集
排查命令集
# Linux:逐级查看路径上每一层的权限位
getent passwd svc; id svc
namei -l /srv/data/team/project/report.xlsx
getfacl /srv/data/team/project 2>/dev/null | head -n 20
# Windows:确认当前会话身份与共享授权
whoami /user
Get-SmbShareAccess -Name data
icacls D:\data\team\project | Select-Object -First 20
# 检查挂载点是否为只读
mount | grep '/mnt/data'Linux 上读不到文件内容除了文件本身的读权限,还需要路径上每一级目录的遍历权限。逐级查看时如果中间某一层缺少遍历权限,最后一级权限再宽松也无效——这类问题用逐层工具一眼可见,用猜测很难找到。
为了快速恢复业务而直接给目录加上过宽的权限(例如对所有人开放读写),实际上是用一个更大的隐患换取了短期的可用。定位根因后再做最小范围的授权调整,才是可持续的处理方式。