在 Debian 上禁用 NFSv4(服务器),允许 NFSv3

bas*_*ic6 6 debian nfs mount

如何将 Debian 8 系统上的 NFS 服务器限制为 NFSv3?

默认情况下,可以使用 vers=3 和 vers=4 挂载共享。

/etc/default/nfs-kernel-server:

# To disable NFSv4 on the server, specify '--no-nfs-version 4' here
#RPCMOUNTDOPTS="--manage-gids"
RPCMOUNTDOPTS="--manage-gids --no-nfs-version 4"
Run Code Online (Sandbox Code Playgroud)

这个选项似乎没有任何效果(rpcinfo 仍然显示 nfs 接受版本 4)。

bas*_*ic6 7

结果证明,RPCMOUNTDOPTS按照 中所述修改变量/etc/default/nfs-kernel-server不起作用,并且有一个错误报告:#738063

此变量用于rpc.mountd调用:

# systemctl status nfs-kernel-server
? nfs-kernel-server.service - LSB: Kernel NFS server support
   Loaded: loaded (/etc/init.d/nfs-kernel-server)
   Active: active (running) since Sun 2016-06-12 19:46:01 CEST; 6s ago
  Process: 15110 ExecStop=/etc/init.d/nfs-kernel-server stop (code=exited, status=0/SUCCESS)
  Process: 15119 ExecStart=/etc/init.d/nfs-kernel-server start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-kernel-server.service
           ??15167 /usr/sbin/rpc.mountd --manage-gids --port 2048 --no-nfs-version 4
Run Code Online (Sandbox Code Playgroud)

但是,客户端仍然可以使用-o vers=4.

相反,必须将此选项传递给rpc.nfsd。查看 init 脚本/etc/init.d/nfs-kernel-server,似乎该RPCNFSDCOUNT变量是传递给 rpc.nfsd 的唯一变量。它不是为了这个目的,但它可以工作,而且它似乎是编辑 init 脚本的唯一选择。

解决方案

在 中/etc/default/nfs-kernel-server,将--no-nfs-version 4选项添加到RPCNFSDCOUNT而不是RPCMOUNTDOPTS

# Number of servers to start up
#RPCNFSDCOUNT=8
RPCNFSDCOUNT="8 --no-nfs-version 4"
Run Code Online (Sandbox Code Playgroud)

重启 NFS 服务:

# systemctl restart nfs-kernel-server
Run Code Online (Sandbox Code Playgroud)

测试一下:

# mount -t nfs -o vers=4 SERVER:/data/public /mnt
mount.nfs: Protocol not supported
Run Code Online (Sandbox Code Playgroud)

版本 3 仍然有效:

# mount -t nfs -o vers=3 SERVER:/data/public /mnt
Run Code Online (Sandbox Code Playgroud)