ネットワークファイルシステム 、また短縮された NFS 、はネットワーク経由でアクセスできるファイルシステムです。
マシンにローカルである可能性のあるファイルシステムと比較して、ネットワークファイルシステムは、特定のネットワークプロトコル(NFSプロトコル)を介してアクセスされる離れたマシンに保存されます。 。
NFSは、SMB、FTP、HTTP、その他多くのファイル共有プロトコルなど、ファイル共有プロトコルの大きなファミリーに属しています。
NFSには、離れたファイルシステムにアクセスして保護する独自の方法と、リモートファイルシステムへのアクセスを保護するさまざまな方法があります。
このチュートリアルでは、NFSサーバーをセットアップします リモートマシンにインストールし、NFSクライアントをインストールする アクセスするために。
共有するリソースに応じてNFSサーバーを構成し、NFSについて知っておくべき小さな落とし穴を確認します。
何を学ぶか
このチュートリアルを最後まで実行すると、次の概念について学習できます:
- NFSv4サーバーをセットアップする方法 、共有フォルダを作成してリモートクライアントにエクスポートします。
- NFSクライアントをインストールする方法 そしてそれをNFSサーバーにバインドする方法;
- ユーザー認証がNFSでどのように機能するか、およびNFS認証が弱いと見なされる理由。
- 押しつぶしとは なぜ常にroot_squashingを有効にする必要があるのか;
- 他のファイル共有プロトコルと比較して、NFSが同時編集を処理する方法。
これは非常に長いプログラムなので、これ以上面倒なことはせずに、独自のNFSv4サーバーをセットアップできることから始めましょう。
NFSv4サーバーのセットアップ
このチュートリアルでは、標準のKubuntuディストリビューションを使用しますが、別のディストリビューションを使用している場合でも、このチュートリアルの残りの部分は同じように機能するはずです。
$ uname -a
Linux kubuntu 5.3.0-18-generic #19-Ubuntu GNU/Linux
パッケージをインストールする前に、システムがaptコマンドで適切に構成されていることを確認してください。
sudo apt-get update
システムが更新されたので、NFSサーバー用にいくつかのパッケージをインストールする必要があります。
NFSv4サーバーのインストール
LinuxにNFSサーバーをインストールするには、「 nfs-kernel-server」をインストールする必要があります 」とapt。
$ sudo apt-get install nfs-kernel-server

上のスクリーンショットからわかるように、nfs-kernel-serverには、微調整が必要ないくつかの構成ファイルが付属しています:
- エクスポート :NFSを介してエクスポートするディレクトリを設定するための構成ファイルとして使用されます。
- nfs-kernel-server :認証を設定したり、NFSサーバーのRPC関連のパラメーターを変更したりする場合に使用できます。
このチュートリアルでは、ディレクトリをエクスポートするためにエクスポートファイルを変更するように構成するだけです。
エクスポートを使用したディレクトリのエクスポート
上記のように、ディレクトリを共有するために、etcディレクトリにあるエクスポートファイルを変更します。

エクスポートファイルの構文は非常に単純です。
エクスポートファイルは、次のフィールドで構成される列で区切られたファイルです:
- ローカルディレクトリ :ローカルファイルシステムにエクスポートされるディレクトリ;
- IP またはホスト名 アクセスを許可するマシンの;
- NFSオプション rw(読み取り/書き込み用)、sync(行われた変更がディスクに直接フラッシュされることを意味します)など
まず、システムにエクスポートされるディレクトリを作成する必要があります。ディレクトリがすでにマシンに存在する場合は、明らかに作成する必要はありません。
$ sudo mkdir -p /var/share
今のところ、rootを所有者およびファイルの所有者グループにすることができますが、この共有フォルダに必要な権限に応じて、後で変更します。

共有フォルダが作成されたので、エクスポートするには、それをエクスポートファイルに追加する必要があります。
/ etc / exportsに戻ります ファイルを作成し、上記の箇条書きで指定した情報を追加します。

最初の列で、作成した共有フォルダであるエクスポートするフォルダを指定する必要があります。
次に、このディレクトリをローカルにマウントできるIPまたはホスト名を指定する必要があります。
この場合、ネットワークIPを選択しました エクスポートファイルで設定しますが、異なる場合があります。
「exports」ファイルで指定されたすべてのディレクトリをエクスポートするには、「 exportfs」を使用する必要があります 」コマンドと「すべて」の「-a」オプション。
$ sudo exportfs -a
次に、「verbose」の「-v」オプションを指定して「exportfs」コマンドを実行することにより、フォルダが正しくエクスポートされたことを確認できます。
$ sudo exportfs -v

お気づきかもしれませんが、エクスポートファイルで指定されていないいくつかのオプションは、デフォルトでNFSサーバーによって設定されていました:
- rw :読み取りおよび書き込み操作はボリュームで許可されています(このオプションは元々ファイルで指定されていました)。
- wdelay :NFSサーバーは、複数の書き込み操作が現在同時に実行されていると思われる場合、わずかな書き込み遅延を引き起こします。
- root_squash :「root」アカウントは、デフォルトで匿名ユーザーに「押しつぶされ」ます。押しつぶしが何であるかわからない場合は、次のセクションでそれについて読むことができます;
- no_subtree_check :デフォルトでは、NFSサーバーは、要求された操作がサーバーにエクスポートされたファイルシステムの一部であることを確認します。
- sec =sys :デフォルトでは、NFSはサーバーに設定された資格情報を使用します。システムがローカル認証を使用している場合は、それらの資格情報が使用されますが、NISが使用されている場合は、認証システムとして使用されます。
- 安全 :このオプションは、リクエストが1024未満のポートから発信されていることを確認します(念のため、NFSクライアントリクエストはポート111から発信されています)。
- no_all_squash :「root」アカウントを除いて、NFSサーバーと対話するときに他のユーザーが押しつぶされることはありません。
NFSのファイアウォールルールをカスタマイズする
クライアントがNFSサーバーに接続するには、ファイアウォールがNFS接続を受け入れるように構成されていることを確認する必要があります。
簡単に言うと、NFSはサーバーのポート2049で実行されます。
DebianとUbuntuの場合、おそらくUFWファイアウォールを実行しています(「ufwstatus」コマンドで確認できます)
サーバーへのNFS接続を許可するには、「 ufw」を実行します 」コマンドをrootとして使用し、ポート2049での接続を許可します。
$ sudo ufw allow 2049

一方、Red HatまたはCentOSディストリビューションを実行している場合は、「ファイアウォール」の組み込みファイアウォールを微調整する必要があります。
$ sudo firewall-cmd --add-port=2049/tcp

最後に、「netstat」コマンドを使用して、ネットワークアダプタが2049ポートを外部に正しく公開していることを確認します。
$ netstat -tulpn | grep 2049

これで、NFSサーバーが正しく稼働し、共有がエクスポートされたことを確認できたので、NFSクライアントを構成する方法を見てみましょう。
NFSv4クライアントの構成
クライアントでの構成は非常に簡単ですが、NFSパーティションをマウントするには特定のパッケージが必要になります。
クライアントへのNFSパーティションのマウント
まず、「 nfs-utils」をインストールする必要があります NFSパッケージをマウントできるようにするための」パッケージ。
明らかにsudo特権を持つ必要があります 新しいパッケージをインストールするため。これがDebian/UbuntuとCentOS/RHELのチュートリアルです。
$ sudo apt-get install nfs-utils
$ sudo yum install nfs-utils
パッケージがインストールされたので、次の構文を使用してパーティションを簡単にマウントできます
$ mount -t nfs <dest_ip_or_hostname>:<remote_path> <mount_point>
たとえば、NFSサーバーが192.168.178.31/24 IPアドレスにあり、サーバー上の/ var/shareフォルダーを共有するとします。
このフォルダをエクスポートするには、次のコマンドを記述します
$ sudo mount -t nfs 192.168.178.31:/var/share /var/share
NFSクライアントのトラブルシューティングはあまり実用的ではありませんが、端末が手にした場合は、宛先ホストに到達できない可能性があります。
コマンドが正常に実行されると、dfコマンドを使用して新しいマウントポイントを一覧表示できるはずです。
$ df -H

NFSボリュームでの新しいファイルの作成
前のセクションで覚えていると思いますが、NFSボリュームは、デフォルトでrootアカウントを押しつぶすように構成されていますが、他のユーザーは押しつぶさないように構成されています。
さらに、共有フォルダはルートとルートグループによって所有されています。

このボリュームで新しいファイルを作成しようとすると、sudoを使用してファイルを作成しようとしても、アクセス許可拒否エラーが発生します。

なぜですか?
クライアントアカウントはサーバーの「root」グループに属していません。クライアントでrootとしてファイルを作成しようとすると、匿名アカウントに押しつぶされます。
NFSユーザー管理に関する一言
フォルダを適切に共有するためにサーバーとクライアントを構成する前に、NFSボリュームでのユーザー管理の仕組みについて簡単に確認しましょう。
以前のチュートリアルでおそらく学んだように、ユーザーはユーザーID( UID とも呼ばれます)によって識別されます。 )およびこのUIDはマシン上で一意ですが、同じサイトの複数のマシン上では一意ではありません。

ただし、システムが中央のユーザー管理システム(NIS、OpenLDAP、Sambaなど)で動作するように構成されていない場合、操作しているシステムでユーザーIDが競合する可能性があります。
この場合、中央管理システムを使用していないと判断した場合は、システム間で一貫したユーザーリストを保持していることを示します。

ユーザーとグループのホスト間での一貫性が保たれたので、フォルダーにファイルを追加および削除できるグループを作成しましょう。
NFS共有用のグループの作成
このチュートリアルでは、「管理者 」は、このフォルダのファイルを追加および削除できます。
まず、サーバーで「 groupadd」を使用します この新しいグループを作成するための「」コマンド
$ sudo groupadd administrators
次に、NFS共有を所有するグループを「管理者」に変更できます。 「
$ sudo chown :administrators /var/share
サーバーで、作成したグループに許可されたユーザーを追加します。
$ sudo usermod -aG administrators <user>
共有ドライブを再エクスポートする必要はありません。権限が適切に構成されているので、ファイルの作成を開始できます。
クライアントで、touchコマンドを使用して共有ドライブに新しいファイルを作成しましょう。
$ cd /var/share && touch file-example
サーバー上で、ファイルが正しく作成されたことを確認できます。

素晴らしい!
NFSボリュームの作成に成功しました そしてそれをクライアントマシンと共有しました。
fstabを使用した永続的なNFSマウント
以前のチュートリアルですでにご存知のように、mountコマンドを使用してLinuxにドライブをマウントしても、再起動してもドライブが永続化することはありません。
マウントを永続化するには、それらをfstabファイルに追加する必要があります。
特権ユーザーとして、fstabファイルを編集し、NFSドライブの行を追加します
#
# /etc/fstab
# Accessible filesystems, by reference, are maintained under '/dev/disk'.
<ip_address>:<remote_path> <mountpoint> nfs <options> 0 0
たとえば、「/ var / share」パスの「192.168.178.31」で以前に作成されたNFSボリュームを考えると、これは
になります。#
# /etc/fstab
# Accessible filesystems, by reference, are maintained under '/dev/disk'.
192.168.178.31:/var/share /var/share nfs defaults 0 0
systemdベースのシステムを使用している場合は、daemon-reloadコマンドを実行して依存デーモンをリロードできます
$ systemctl daemon-reload
素晴らしい!
これで、クライアントマシンを再起動して、ドライブが起動時に正しくマウントされたことを確認できます。

NFSをさらに進める
このセクションでは、NFSに関する高度なトピック、特に同時編集の処理方法と、NFS構成を特定のクライアントホストに合わせて調整する方法について説明します。
同時編集
NFSを使用する場合、おそらく他の複数のユーザーと一緒にいくつかのファイルを編集することになります。
本来、NFSサーバーは同じファイルの編集を妨げることはありません。
viをテキストエディタとして使用している場合は、一部の変更が別のユーザーによって(swpファイルを介して)すでに実行されていることが通知されます。

ただし、NFSファイルの交換によってファイルの編集が妨げられることはありません。現在編集中のファイルに警告メッセージが表示されるだけです。
さらに、他のテキストエディタを使用している場合、「swp」ファイルは作成されず、ファイルには最後に実行された変更の内容が含まれます。
“ を使用してファイルをローカルでロックする方法があることに注意してください local_lock クライアント側の」パラメータ 、このオプションに興味がある場合は、Linuxのドキュメントを確認できます。

特定のクライアントIPアドレスへのフォルダのエクスポート
場合によっては、サブネット上の特定のクライアントにフォルダをエクスポートする必要があります。
クライアントのIPアドレスを確認するには、クライアントマシンにアクセスし、アドレスの「a」オプションを指定して「ip」コマンドを使用します。
$ ip a
ご覧のとおり、私のクライアントホストには、ループバックインターフェイス(またはlocalhost)と「enp0s3」という名前の1つのネットワークアダプタの2つのインターフェイスがあります。
後者には、「inet」行に表示されるインターフェイスにすでに割り当てられているIPアドレスがあります: 192.168.178.27/24。
フォルダをサブネット全体にエクスポートする場合は、サブネットIPを指定できます。その結果、サブネット上のすべてのIPがフォルダをエクスポートできるようになります。

同様に、後でサーバーにエクスポートするために、クライアントマシンのホスト名を確認することもできます。
$ hostname

エクスポートファイルに戻ると、1つまたは複数のIPアドレスをエクスポートするか、ホスト名でマシンをエクスポートするかを選択できます。

NFSモニタリング
nfs-commonパッケージをインストールすると、「 nfsstat」もインストールされます。 」NFS統計を公開するプログラムであるユーティリティ。
nfsstatを使用すると、NFSサーバーで実行された操作の総数と現在のアクティビティを確認できます。

結論
このチュートリアルでは、NFSv4サーバーをセットアップする方法を学びました。 nfs-kernel-serverユーティリティを簡単に使用できます。
また、クライアントにドライブをマウントする方法と、NFSマウントを微調整するために必要なさまざまなオプションについても学びました。
最後に、NFSドライブについて詳しく説明しました。 また、複数のホストマシン間でユーザー管理がどのように行われるか、および独自のユーザー管理システムをセットアップする方法を学びました。
Linuxシステム管理に興味がある場合は、Webサイトに専用のセクションがありますので、ぜひチェックしてください!