事情本身不复杂,线索都在日志里。CentOS 7 客户端挂载 NAS 的共享目录,ls -l 看到所有文件属主是 1001 1001,chown 报 Operation not permitted,应用以 www 用户读不了自己的上传目录。

第一反应是「挂载时没带 nfsvers 参数,协商到了对 idmap 支持更弱的版本」,验证下来不成立。

排查方向其实有限,先把可能性排一排。服务端和客户端的用户 ID 不一致,NFSv3 只认数字 UID 不认用户名。还有一种是NFSv4 依赖 idmapd 做域名映射,两边的 Domain 配置不同导致映射失败。

另外,服务端开启了 root_squash,客户端用 root 操作被映射成 nobody。

上来先确认 uid 与服务端是否一致

id www && getent passwd 1001

随后核对两端的 idmap 域名

cat /etc/idmapd.conf | grep -i domain

接着按明确的版本重新挂载

mount -t nfs -o vers=4.2,proto=tcp nas:/export/www /www

剩下的就是统一关键账号的 UID 后重新校验

chown -R www:www /www && ls -ln /www | head

改完先别撤,确认这几项。ls -l 里属主显示为 www 而不是数字,chown 不再报权限错误,应用能正常读写共享目录并且新建文件的属主正确。

补一句。UID 对齐是大规模文件共享里最容易返工的一步,建机器时就该用统一的账号体系;改 UID 前要先把旧文件的所有权一起转过去。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189