跳转到内容
搜索 Rocky Linux 文档

    浏览当前文档目录

    Rocky 9 挂载 NFS:客户端视角与 root squash

    服务端是一台 AlmaLinux 9.8 宿主机(nfs-server + /etc/exports.d/lab.exports 导出 /srv/nfslab);客户端是 Rocky Linux 9.8 特权容器(宿主内核 5.14.0-687.54.1.el9_8,--network host)。实际执行:mount -t nfs 127.0.0.1:/srv/nfslab、findmnt、读服务端文件、写入新文件、ls -l、umount,并在服务端确认文件落地。日志:plans/content-expansion/evidence/logs/rocky-nfs-mount.log。

    客户端与服务端在同一台机器(走回环),跨机防火墙与延迟未验证。

    Terminal window
    sudo mkdir -p /mnt/nfslab
    sudo mount -t nfs 127.0.0.1:/srv/nfslab /mnt/nfslab
    findmnt -no SOURCE,FSTYPE,TARGET /mnt/nfslab
    127.0.0.1:/srv/nfslab nfs4 /mnt/nfslab

    -t nfs 不给版本时,客户端会协商到 nfs4。要固定版本得显式写 -o vers=4.2 / vers=3,v3 还需要服务端放行 rpcbind/mountd 端口。

    Terminal window
    cat /mnt/nfslab/from-server.txt
    hello from server
    Terminal window
    echo client-write > /mnt/nfslab/from-client.txt
    ls -l /mnt/nfslab/
    -rw-r--r-- 1 nobody nobody 13 Oct 19 16:01 from-client.txt
    -rw-r--r-- 1 root root 18 Oct 19 15:53 from-server.txt

    客户端进程是 root(容器里就是 root),但导出行没写 no_root_squash,服务端默认把客户端 root 映射成 nobody。所以文件属主是 nobody,不是 root——这是 NFS 的默认安全行为,不是权限 bug。

    如果业务确实需要客户端 root 保留权限,才在服务端加 no_root_squash;代价是客户端 root 等于服务端 root。

    Terminal window
    cat /srv/nfslab/from-client.txt
    client-write

    客户端写的内容在服务端能看到,说明挂载与写权限都正常;验收时两边都看一遍,比只看 mount 成功更可靠。

    • 跨机挂载超时:服务端没放行 nfs(2049/tcp);v3 还要 mountd/rpc-bind。回环测试发现不了;
    • 写入报 Permission denied:目录权限或导出选项(ro、root_squash 映射)限制;
    • 不看协商版本:-t nfs 默认 nfs4,老服务端只支持 v3 时要显式 -o vers=3。
    Terminal window
    sudo dnf install -y nfs-utils
    sudo mkdir -p /mnt/nfslab
    sudo mount -t nfs <server>:/srv/nfslab /mnt/nfslab
    findmnt -no FSTYPE /mnt/nfslab # 预期 nfs4
    ls /mnt/nfslab
    echo test > /mnt/nfslab/from-client.txt
    sudo umount /mnt/nfslab

    检查:

    1. findmnt 显示 nfs4
    2. 能读到服务端预置文件
    3. 新建文件在服务端可见(属主可能是 nobody)
    4. 卸载后 findmnt /mnt/nfslab 无输出

    常见问题

    为什么挂载后创建的文件属主是 nobody?

    服务端导出行默认 root_squash,把客户端的 root 映射成 nobody。需要保留 root 权限时在导出选项加 no_root_squash,但要清楚这等于把服务端 root 权限交给客户端。

    同机挂载成功,另一台机器挂载超时?

    回环不过防火墙。跨机要放行 nfs(2049/tcp),v3 还要 mountd/rpc-bind 的动态端口;先在服务端 firewall-cmd --add-service=nfs。

    怎么固定 NFS 版本?

    用 -o vers=4.2 或 vers=3 显式指定。默认是协商(通常是 4.x);固定版本便于排查,但服务端必须支持该版本。