Debian(サーバー)で NFSv4 を無効にし、NFSv3 を許可します。

Debian(サーバー)で NFSv4 を無効にし、NFSv3 を許可します。

Debian 8システムのNFSサーバーをNFSv3に制限する方法は?

デフォルトでは、vers = 3とvers = 4を使用して共有をマウントできます。

/etc/default/nfs-カーネル-サーバー:

# 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.マウント呼ぶ:

# 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この変数はRPCNFSDCOUNTrpc.nfsdに渡された唯一の変数のようです。これは意図されていませんが、うまくいきます。initスクリプトを編集する以外には唯一のオプションです。

解決策:

代わりにオプションを/etc/default/nfs-kernel-server追加してください。--no-nfs-version 4RPCNFSDCOUNTRPCMOUNTDOPTS

# 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システムで環境ファイルが保存されている場所を見つける必要がありました。

長い話を短く

.NETで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.serviceExecStart、EnvironmentFile、およびWants / Afterサービスがあります。

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

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

したがって、「--no-nfs-version 4」を含むように RPCNFSDARGS 変数を変更できます。環境ファイルは~について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オプションを追加

/etc/sysconfig/nfs次に、よりきれいに見えるので、RPCNFSDCOUNTの代わりにRPCNFSDARGS変数を変更することを選択します。

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のみがアクティブになります。

関連情報