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はバージョン4を受け入れるnfsをまだ示しています)。
/etc/default/nfs-kernel-server
で説明されているRPCMOUNTDOPTS
変数の変更は機能せず、そのためのバグレポートがあります。 #73806
この変数は、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に渡される唯一の変数のようです。これはその目的を意図したものではありませんが、機能し、initスクリプトの編集以外の唯一のオプションのようです。
ソリューション:
/etc/default/nfs-kernel-server
で、RPCNFSDCOUNT
の代わりにRPCMOUNTDOPTS
に--no-nfs-version 4
オプションを追加します。
# 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
あなたが望むように見えます
RPCMOUNTDOPTS="--manage-gids -V 3"
-V 3
と--manage-gids
には互換性の問題はないようですが、テストしていません。
@ basic6の回答に関連して、CentOS 7システムで環境ファイルがどこに保持されているのかを把握する必要がありました。
TL; DR
/etc/sysconfig/nfs
のRPCNFSDARGS変数を変更しました。
設定ファイルはどこですか?
以下はsystemdサービスです:
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」を含めることができます。 EnvironmentFileはre nfs-configサービスによって作成されます。 /usr/lib/systemd/system/nfs-config.service
を見てみましょう:
[Service]
...
ExecStart=/usr/lib/systemd/scripts/nfs-utils_env.sh
このスクリプトは、EnvironmentFileを作成し、スクリプトの上部にある/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
オプションの追加
次に、RPCNFSDCOUNTではなく/etc/sysconfig/nfs
の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