ネットワークファイルシステムまたはNFSは、リモートホストがネットワーク経由でファイルシステムをマウントし、ローカルにマウントされているかのようにファイル操作を実行できるようにする分散ファイルシステムプロトコルです。これは、1つのサーバーのリソースを複数のクライアントで共有したり、複数のクライアントが単一のストレージスペースに書き込めるようにしたりする場合に特に便利です。
このチュートリアルでは、Rocky Linux 8に基づいてNFSサーバーとNFSクライアントをインストールおよび構成する方法を学習します。このために、ファイルを共有するホストまたはサーバーと、NFSマウントを使用してホストファイルにアクセスするクライアントをセットアップします。 。
- 2台のRockyLinux8サーバー。これらのそれぞれには、sudo権限を持つroot以外のユーザーが必要です。
- ホストとクライアントの両方に静的IPアドレスが必要です。プライベートネットワーク経由で両方を設定することもできます。チュートリアルでは、 host_ipを使用します ホストのIPアドレスとclient_ipを示します クライアントのIPアドレスを参照します。
ホスト
NFSパッケージをインストールするには、nfs-utils
をインストールする必要があります パッケージ。 NFSサーバーおよび関連ツール用のデーモンを提供します。
パッケージをインストールします。
$ sudo dnf install nfs-utils
nfs-server
を有効にして起動します サービス。 nfsd
など、NFSのマウントと共有に必要な残りのサービス 、nfs-idmapd
、rpcbind
、rpc.mountd
、lockd
、rpc.statd
、rpc.quotad
およびrpc.idmapd
一緒に自動的に開始します。
$ sudo systemctl enable nfs-server --now
NFSインストールのバージョンを確認します。
$ sudo cat /proc/fs/nfsd/versions -2 +3 +4 +4.1 +4.2
NFSバージョン3および4はデフォルトで有効になっており、バージョン2は無効になっています。 NFSv2はかなり古くて時代遅れであるため、 -veを確認できます。 その前にサインインします。
NFSは、その構成を/etc/nfsmount.conf
に保存します および/etc/nfs.conf
ファイル。 /etc/nfsmount.conf
/etc/nfs.conf
中にNFSマウントを構成することです NFSデーモンと関連ツールを構成することです。チュートリアルにはデフォルト設定で十分であり、変更は必要ありません。
クライアント
クライアントに、nfs-utils
をインストールします およびnfs4-acl-tools
パッケージ。
$ sudo dnf install nfs-utils nfs4-acl-tools
構成設定が異なる2つの例を使用します。1つは汎用マウントを使用し、もう1つはホストのホームディレクトリを共有します。
NFSマウントされたディレクトリは、クライアントの一部ではありません。したがって、NFSはスーパーユーザー権限を必要とするタスクを実行できません。これは、クライアントが所有権を変更したり、rootユーザーとして書き込みたり、高レベルのタスクを実行したりできないことを意味します。ただし、クライアント上の信頼できるユーザーが、ホスト上のスーパーユーザーアクセスを必要とせずにそのようなタスクを実行する必要がある場合があります。 NFSサーバーはこれを可能にするように構成できますが、クライアントがホストにアクセスできるリスクがあります。
最初のケースでは、デフォルトのNFS動作を使用する単純なマウントを作成します。これは、クライアントがスーパーユーザー権限を必要とするタスクを実行できないことを意味します。
共有ディレクトリを作成します。
host:$ sudo mkdir /var/nfs/share -p
sudo
を使用したため、ホストのrootユーザーがこのディレクトリを所有します 作成します。
host:$ ls -l /var/nfs total 0 drwxr-xr-x. 2 root root 6 Dec 13 07:30 share
NFSは、クライアント側のすべてのルート操作をnobody:nobody
に変換します セキュリティ上の理由からの資格。したがって、ホスト側でそれらを一致させる必要があります。
host:$ sudo chown nobody:nobody /var/nfs/general
2番目のケースでは、ホスト上のホームディレクトリをクライアントが利用できるようにします。すでに存在しているので作成する必要はありません。ホストマシンのユーザーに影響するため、権限を変更する必要はありません。
ファイル/etc/exports
を開きます 編集用のホストマシン上。
host:$ sudo nano /etc/exports
次のコードをファイルに貼り付けます。
/var/nfs/share client_ip(rw,sync,no_subtree_check) /home client_ip(rw,sync,no_root_squash,no_subtree_check)
各ディレクトリとその構成は、別々の行にある必要があります。 client_ip
を置き換えます クライアントマシンの実際のIPアドレスを使用した値。
NFSエクスポートのすべてのオプションを見てみましょう。
- rw -クライアントマシンにNFSボリュームへの読み取りおよび書き込みアクセスを許可します。
- 同期 -このオプションは、NFSが応答する前にディスクに変更を書き込むように強制します。このオプションは、より信頼性が高いと見なされます。ただし、ファイル操作の速度も低下します。
- no_subtree_check -このオプションは、サブツリーチェックを防ぎます。これは、ホストがすべてのリクエストのアクセス許可とともにファイルが利用可能かどうかをチェックする必要があるプロセスです。また、クライアントで開いているときにファイルの名前がホストで変更された場合にも、問題が発生する可能性があります。無効にすると、NFSの信頼性が向上します。
- no_root_squash -デフォルトでは、NFSはクライアント上のrootユーザーからの要求をホスト上の非特権ユーザーに変換します。このオプションはその動作を無効にするため、クライアントがホストにアクセスできるように注意深く使用する必要があります。
終了したら、 Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
共有をエクスポートするには、次のコマンドを実行します。
host:$ sudo exportfs -arv exporting client_ip:/home exporting client_ip:/var/nfs/share
- -a -このオプションを使用すると、すべてのディレクトリがエクスポートされます。
- -r -このオプションを使用すると、
/var/lib/nfs/etab
に新しいリストを作成して、すべてのディレクトリをエクスポートできます。 ディレクトリ。このオプションは、/etc/exports
に加えられた変更でエクスポートリストを更新するために使用されます 。 - -v -詳細な出力を有効にします。
エクスポートされたすべてのディレクトリを一覧表示するには、次のコマンドを実行します。 /etc/exports
で指定されなかったデフォルトのオプションを含む、すべてのオプションが表示されます。 ファイル。
host:$ sudo exportfs -s /var/nfs/share client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /home client_ip(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
RockyLinuxはFirewalledFirewallを使用しています。ファイアウォールのステータスを確認してください。
host:$ sudo firewall-cmd --state running
これは、正常に稼働していることを示しています。
ファイアウォールはさまざまなゾーンで機能し、パブリックゾーンがデフォルトで使用されます。ファイアウォールでアクティブなすべてのサービスとポートを一覧表示します。
host:$ sudo firewall-cmd --permanent --list-services
次の出力が表示されます。
cockpit dhcpv6-client ssh
次に、必要なNFSサービスへのトラフィックを許可する必要があります-mountd
、nfs
およびrpc-bind
。また、クライアントIPからのアクセスを許可する必要があります。クライアントとホストサーバーが同じサブネット内にある場合は、クライアントのIPアドレスを追加する必要はありません。
host:$ sudo firewall-cmd --permanent --add-service=nfs host:$ sudo firewall-cmd --permanent --add-service=rpc-bind host:$ sudo firewall-cmd --permanent --add-service=mountd host:$ sudo firewall-cmd --permanent --add-source=client_IP
ファイアウォールをリロードして変更を適用します。
host:$ sudo firewall-cmd --reload
ステップ5-クライアントにマウントポイントとディレクトリを作成する
NFSサーバー/ホストが構成されたので、次のステップはクライアントにマウントポイントとディレクトリを設定することです。 showmount
を実行できます クライアントでコマンドを実行して、ホストにエクスポートされたファイルシステムのリストを確認します。
client:$ showmount -e host_ip Export list for host_ip: /home host_ip /var/nfs/share host_ip
常にクライアントのマウントポイントとして新しいディレクトリを作成するか、既存の空のディレクトリを使用してください。マウントするディレクトリにファイルがある場合、そのファイルは非表示になります。
マウントディレクトリを作成します。
client:$ sudo mkdir -p /nfs/share client:$ sudo mkdir -p /nfs/home
ホストのIPアドレスを使用して共有をマウントします。
client:$ sudo mount host_ip:/var/nfs/share /nfs/share client:$ sudo mount host_ip:/home /nfs/home
マウントが成功したことを確認します。
client:$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 370M 0 370M 0% /dev tmpfs 405M 0 405M 0% /dev/shm tmpfs 405M 16M 389M 4% /run tmpfs 405M 0 405M 0% /sys/fs/cgroup /dev/vda1 25G 2.4G 23G 10% / tmpfs 81M 0 81M 0% /run/user/1000 host_ip:/var/nfs/share 25G 2.4G 23G 10% /nfs/share host_ip:/home 25G 2.4G 23G 10% /nfs/home
両方の共有は同じファイルシステムからマウントされます。したがって、それらは同じディスク使用量を示します。
mount
を使用することもできます 確認するコマンド。
client:$ mount | grep nfs rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) host_ip:/var/nfs/share on /nfs/share type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip) host_ip:/home on /nfs/home type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=client_ip,local_lock=none,addr=host_ip)
テストファイルを/var/nfs/share
に書き込みます 共有します。
client:$ sudo touch /nfs/share/test.txt
所有権を確認してください。
client:$ ls -l /nfs/share/test.txt -rw-r--r--. 1 nobody nobody 0 Dec 13 08:08 /nfs/share/test.txt
デフォルトのNFS設定を使用してこのボリュームをマウントし、sudo
を使用してクライアントにファイルを作成したため 、ファイルの所有権はデフォルトでnobody:nobody
。クライアントのスーパーユーザーは、共有に対して管理タスクを実行できません。
テストファイルを/nfs/home
に書き込みます 共有します。
client:$ sudo touch /nfs/home/home.txt
所有権を確認してください。
client:$ ls -l /nfs/home/home.txt -rw-r--r--. 1 root root 0 Dec 13 08:09 /nfs/home/home.txt
no_root_squash
を使用したので オプションを選択すると、クライアントのrootユーザーが共有自体のrootとして機能できるようになります。
デフォルトのNFS共有は一時的なものであり、起動時にマウントする必要があります。 /etc/fstab
を編集することで、それらを永続的にすることができます クライアント上のファイル。
ファイル/etc/fstab
を開きます 編集用。
client:$ sudo nano /etc/fstab
次の行をファイルの下部に貼り付けます。
. . . host_ip:/var/nfs/share /nfs/share nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 host_ip:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
次のコマンドを実行すると、上記のオプションの詳細を確認できます。
client:$ man nfs client:$ man mount
それらをオンラインで読みたい場合は、man nfs
というフレーズをグーグルで検索できます。 およびman mount
これらのオプションの詳細については、こちらをご覧ください。
システムにリモートマウントが不要になった場合は、umount
を使用してリモートマウントを解除できます。 指図。このコマンドはumountと呼ばれることに注意してください アンマウントではありません これはよくある間違いです。
共有マウントから移動し、マウントを解除します。
client:$ cd ~ client:$ sudo umount /nfs/share client:$ sudo umount /nfs/home
再起動時に共有を再度マウントする必要がなくなった場合は、/etc/fstab
の対応するエントリをコメントアウトしてください。 #
を入れてファイルする それらの前にサインインします。
このチュートリアルでは、NFSホストサーバーを作成し、それを使用してディレクトリをマウントする方法を学習しました。これは、NFSクライアントと共有しました。プライベートネットワークに実装している場合は問題ありませんが、本番環境で使用している場合は、プロトコルが暗号化されていないことを覚えておいてください。データを保護するために何らかの認証を実装する必要があります。
ご不明な点がございましたら、下のコメント欄に投稿してください。