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

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

如何将 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"

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

答案1

事实证明,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

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

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

解决方案:

在 中/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"

重新启动 NFS 服务:

# systemctl restart nfs-kernel-server

测试一下:

# mount -t nfs -o vers=4 SERVER:/data/public /mnt
mount.nfs: Protocol not supported

版本 3 仍然有效:

# mount -t nfs -o vers=3 SERVER:/data/public /mnt

答案2

与 @basic6 的答案相关,我必须弄清楚环境文件在我们的 CentOS 7 系统上保存在哪里。

长话短说

我们更改了 中的 RPCNFSDARGS 变量/etc/sysconfig/nfs

配置文件在哪里?

这是系统服务:

sudo systemctl status nfs-server.service        
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since Tue 2019-06-25 13:12:19 CEST; 7min ago
 Main PID: 44563 (code=exited, status=0/SUCCESS)
    Tasks: 0
   Memory: 0B
   CGroup: /system.slice/nfs-server.service

我们/usr/lib/systemd/system/nfs-server.service注意到 ExecStart、EnvironmentFile 和 Wants/After 服务:

[Unit]
...
Wants=nfs-config.service
After=nfs-config.service

[Service]
EnvironmentFile=-/run/sysconfig/nfs-utils
...
ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS

因此,我们可能想要更改 RPCNFSDARGS 变量以包含“--no-nfs-version 4”。环境文件是关于由 nfs-config 服务创建。让我们看看/usr/lib/systemd/system/nfs-config.service

[Service]
...
ExecStart=/usr/lib/systemd/scripts/nfs-utils_env.sh

/etc/sysconfig/nfs该脚本创建环境文件并从其脚本顶部获取初始变量:

#!/bin/sh

#
# Extract configuration from /etc/sysconfig/nfs and write
# environment variables to /run/sysconfig/nfs-utils to be 
# used by the systemd nfs-config service
#

nfs_config=/etc/sysconfig/nfs
if test -r $nfs_config; then
    . $nfs_config
fi

@basic6 提到/etc/default/nfs-kernel-server,在我们的例子中是/etc/sysconfig/nfs

添加--no-nfs-version选项

接下来,我们选择更改 RPCNFSDARGS 变量/etc/sysconfig/nfs而不是 RPCNFSDCOUNT,因为它看起来更简洁:

diff --git a/etc/sysconfig/nfs b/var/tmp/nfs.XXS8L74E
index 74104d3..82bc1b4 100644
--- a/etc/sysconfig/nfs
+++ b/var/tmp/nfs.XXS8L74E
@@ -11,7 +11,7 @@
 #LOCKD_UDPPORT=32769
 #
 # Optional arguments passed to rpc.nfsd. See rpc.nfsd(8)
-RPCNFSDARGS=
+RPCNFSDARGS="--no-nfs-version 4"
 # Number of nfs server processes to be started.
 # The default is 8. 
 RPCNFSDCOUNT=32

答案3

看起来像你想要的

RPCMOUNTDOPTS="--manage-gids -V 3"

-V 3和似乎没有兼容性问题,--manage-gids但我没有测试。

答案4

编辑后重新启动 nfs-kernel-server 在其他 Linux 发行版上,我使用另一种方法,编辑 /etc/nfsmount.conf

# Protocol Version [2,3,4]
# This defines the default protocol version which will
# be used to start the negotiation with the server.
Defaultvers=3

然后重新启动nfs,这仅启用nfs3

相关内容