两台 Linux 用 NFS 挂同一台 NAS,权限表现不一样,umask 还不生效,怎么统一?

直接给结论:同一台 NAS 在两台 Linux 上权限表现不一样,根子多数在「客户端的用户号对不上」——NFS 靠数字 uid/gid 判身份,同名用户在两台机器 uid 不同,看到的权限自然两样。umask 不生效则要分清:umask 只管本机新建文件的初始权限位,管不了共享已有的权限规则,想统一要靠服务端映射和默认 ACL。

第一步:对账号的数字身份

id 用户名           # 两台机器各跑一次,对比 uid/gid
mount | grep nfs    # 看挂载参数与 NFS 版本

同名不同号,权限观感必然错乱——A 机器上属于张三的文件,到 B 机器上可能就显示成别人的。这个问题在多台机器共用一套存储的环境里很常见:Linux 各自装出来的用户编号互不相干,谁先建号谁占号,同名不同号就此埋下。治本是把两台机器的账号统一到同一来源(域账号或统一台账),治标是手动对齐 uid/gid 后让用户重新登录生效。

第二步:统一服务端映射

NAS 共享设置里把客户端账号按规则映射:要么统一映射成固定账号(落盘权限一套),要么按机器白名单映射到指定 uid。映射规则定了,不管客户端本地账号怎么建,共享里的属主口径就一套。映射的粒度分两档:整机映射(整台机器来的都算一个账号)适合内部信任环境;按账号映射(各自保留身份)适合要分责的场合,但前提是账号体系真的一致。走 NFSv4 的还要核对两端的 idmap 域名一致,否则数字身份照样各说各话。

第三步:用默认 ACL 兜底

umask 管不住的场合,用文件系统默认 ACL 把新建文件的权限焊死:

setfacl -d -m u::rwx,g::rx,o::--- /挂载点/共享目录
getfacl /挂载点/共享目录    # 核对默认规则

默认 ACL 优先于 umask,之后新建的文件和目录都按这套继承,两台机器看到的口径就齐了。目录继承是关键——默认 ACL 只作用在设置之后新建的条目,挂在共享根目录上,新子目录会自动带上同款规则,层层传下去。已有文件要统一口径的,再跑一遍不带 -d 的 ACL 批量设置补上。

验证统一是否到位

改完别急着交付:在 A 机新建一个测试文件,到 B 机上看属主与权限位是否一致;再用第三台机器挂上来读一次,三方口径一致才算数。测试文件用完即删,别把试验品留在生产共享里。日常把 id 和 getfacl 的输出贴进运维文档,下次再对不上号时直接翻档。

顺手排掉的两个坑

一是 root 压制:NFS 默认把 root 映射成匿名用户,有人为了省事关掉压制,结果 root 建的文件属主又变成另一套——映射规则定了就别随手改。二是版本混用:一台走 v3 一台走 v4,映射逻辑不同,表现必然不同,先把版本统一再谈别的。

权限这类事,规则越少越好维护。贵州诚鑫致达科技在给贵阳企业做 NAS 统一存储落地时,都先把账号与映射的规矩定死再开共享,后续加机器只是照抄,不用再逐台救火。

企业存储选型参考|贵州诚鑫致达

做机架式部署与数据中心扩容,群晖机型参考:RS2423RP+ · RS1221+ · RS822+。需要选型建议或上门评估,搜「诚鑫致达」即可找到我们。

服务区域|贵州诚鑫致达

贵州群晖NAS、贵阳存储、数据备份、信创云盘或 IT 集成服务,可联系贵州诚鑫致达科技,服务范围覆盖贵州全省各市州。重庆企业 NAS 存储、服务器运维与容灾备份方案。