Linux上でNFSサーバーを設定および構成する方法
NFSサーバーは、複数のシステムがネットワーク上に展開されたファイルシステムを共有できるようにします。ここでは、LinuxにNFSサーバーをインストールして設定する方法を説明します。
サン・マイクロシステムズのNFS(ネットワークファイルシステム)は、RPCベースの分散ファイルシステム構造であり、ネットワークに接続されたデバイスがネットワーク上のNFSを実行しているサーバーをローカルドライブとして使用できるようにします。
LinuxマシンにNFSサーバーを設定および構成するためのステップバイステップガイドです。
ネットワークファイルシステムとは何ですか?
NFSファイルシステムには4つのプロトコルがあります。サーバーが準備完了になると、ポートマップ(プロトコルをポート番号に変換するサーバー)に使用するポートを通知し、制御されたRPCプログラム番号を提供します。
組み込みLinuxシステムを使用する際に、ストレージデバイス(NANDフラッシュ、eMMC、MMCなど)から直接起動するのではなく、ネットワーク経由のNFSファイル共有を介してデバイスを起動することは非常に便利です。
珍しいですが、システムが起動した後にNFS共有をマウントし、それを使用してファイル共有を行うことも希望するかもしれません。たとえシステムを直接NFS共有から起動しなくてもです。この両方のシナリオが機能するためには、まず開発中のコンピュータにNFSサーバーをインストールする必要があります。
LinuxにNFSをインストールする方法
UbuntuやLinux MintなどのDebianベースのシステムを使用している場合、以下のようにnfs-kernel-serverパッケージをインストールすべきです。
sudo apt install nfs-kernel-server
Arch Linuxで:
sudo pacman -S nfs-utilsFedora、CentOS、及びRHELでは:
sudo dnf -y install nfs-utilsプロセスの終わりに、あなたのNFSサーバーは自動的に起動します。しかし、この時点では、ネットワーク上で共有したいコンピューターのディレクトリをまだ認識していません。したがって、デフォルトでは共有は提供されていません。
同じサーバー上で複数のディレクトリを開くことで、異なる権限と制限を持つネットワーク共有を可能にします。
LinuxでのNFSサーバーの設定
NFSサーバー上で任意のディレクトリを共有するには、/etc/exportsファイル内でディレクトリ関連の設定を構成する必要があります。好みのテキストエディタでファイルを開いてください。コマンドにはsudoプレフィックスを追加することを忘れないでください。
sudo vim /etc/exports
ここで見るマッピングオプションが何を意味するのか、あなたは不思議に思っているかもしれません。
- root_squash: NFSでsudo権限を持ったクライアントユーザーをnobodyユーザーとグループとしてマークします
- no_root_squash: ルートスカッシュを無効にします
- all_squash: root_squashとは異なり、すべてのユーザーがnobodyユーザーおよびグループとしてマッピングされることを許可します。一般的に公共のアクセスのために使用されます。
- no_all_squash: all_squashの反対; このオプションはデフォルトです
NFSサーバーの/etc/exportsファイルで許可されているIP範囲外のシステムが関連するリソースにアクセスしようとした場合、NFSサーバーはそのリクエストを拒否します。
組み込みシステムにマウント中に「サーバーによってアクセスが拒否されました」というメッセージが表示されることがあります。その場合、NFSサーバーが実行されているコンピュータの/var/log/syslogファイルの最後に以下のようなエラーメッセージが表示されます:
rpc.mountd[1041]: refused mount request from 192.168.2.2 for /home/example/casper/target (/home/example/casper/target): unmatched host上記のような一致しないホストログメッセージを見た場合は、/etc/exportsファイルの関連するルールのIP/ネットマスクセクションを展開するか、すべてのIPアドレスへのアクセスを許可したい場合はアスタリスク(*)特別文字を使用してください。
変更を加えた後は、NFSサービスを再起動する必要があります/etc/exportsファイル。
sudo service nfs-kernel-server restart
または、あなたのディストリビューションが systemctl を含んでいる場合は、以下のコマンドを実行してください:
sudo systemctl restart nfs-server.serviceあなたはまた、exportfs コマンドに -r パラメータを与えることができ、共有に関する設定が変更されたディレクトリを再共有します:
sudo exportfs -r
マウント遅延問題の修正
NFSプロトコルバージョン4以上をサーバーで使用する場合、NFSサーバーのデフォルト設定の従来の操作シナリオにおいて、クライアント側のマウントプロセス中に最大15秒の遅延が発生することがあります。この問題は、Debian、Fedora、Ubuntuのいくつかのバージョンに現れる可能性があります。
同様のマウント遅延が発生している場合は、サーバー側のログファイル(/var/log/syslog、/var/log/messages)を確認して、次のようなログメッセージがあるかどうかをチェックできます:
... RPC: AUTH_GSS upcall timed out
このメッセージは、Kerberos認証が失敗し、タイムアウトしたことを示しています。おそらく、あなたの環境のネットワークではセキュリティ認証のためにKerberosプロトコルは必要ないでしょう。このように構成されたネットワークにいる場合でも、少なくとも埋め込みLinuxシステムでは、Kerberos認証を有効にする必要はありません。
GSSDサービスをNFSで実行する代替手段が提供されているものの、これらのアプローチはすべてのディストリビューションやパッケージバージョンで同じ影響を持つわけではないため、この問題に根本から取り組むことが最も合理的です。
NFSサーバーが実行されているLinuxシステムでrpcsec_gss_krb5カーネルモジュールがロードされないようにブロック(またはブラックリスト)する必要があります。
このオプションをコンピュータを再起動するたびに有効にするには、/etc/modprobe.d/nfs-gss-blacklist.conf という新しいファイルを作成し、以下の行を追加します:
blacklist rpcsec_gss_krb5
ファイルを保存してシステムを再起動すると、マウント遅延の問題は解消されます。
NFSサーバーを使用する理由は何ですか?
NFSは設定が簡単で手頃な価格です。これにより、中央集権的な管理が可能になり、個々のユーザーのPCに追加のソフトウェアやストレージスペースを必要としなくなります。1台のマシン上で複数のユーザーが同じディスクスペースを共有できます。彼らはこれらのディスクをファイルシステムの上に置いて、ストレージスペースを拡張することができます。
NFS共有は、大量のストレージスペースを必要とするプログラムを単一のサーバーにまとめることを可能にします。これにより、巨大なディスクスペースの節約が実現できます。以前のNFSバージョンは脆弱でしたが、新しいバージョンではKerberos認証を含む追加の保護レベルが導入されています。
しかし、いくつかの欠点もあります。NFSは、ネットワークのトラフィックが多い場合に遅くなることがあることがわかっています。Windowsとの共有は可能ですが、いくつかのサードパーティアプリケーションが必要になる場合があります。しかし、これはセキュリティの観点からあまり理にかなった方法ではありません。構成が正しくない場合、無許可のアクセスが発生する可能性があります。
LinuxでNFSを使用したファイルシステムの共有を簡単にする
セキュリティ上の問題を把握し、解決策を見つけることは、システム管理者の最も重要な任務の1つです。すべてのファイル共有システムや管理ツールのセキュリティ手順を知ることが必要であり、NFSだけではありません。

