Rocky Linux 8でNFSマウントを設定する方法
Rocky Linux 8でNFSマウントを設定する方法
このページで
- 前提条件
- ステップ 1 - ホストとクライアントに NFS をインストールする
ステップ2 - ホストに共有ディレクトリを作成する
- 汎用マウントを使用して作業する
- ホームディレクトリの操作
ステップ 6 - NFS アクセスのテスト
ネットワークファイルシステム(NFS)は、リモートホストがネットワーク上でファイルシステムをマウントし、ローカルにマウントされているかのようにファイル操作を行うことを可能にする分散ファイルシステムプロトコルです。これは、1つのサーバーから複数のクライアントにリソースを共有したり、複数のクライアントが単一のストレージスペースに書き込むことを許可する場合に特に便利です。
このチュートリアルでは、Rocky Linux 8に基づいてNFSサーバーとNFSクライアントをインストールおよび構成する方法を学びます。そのために、ファイルを共有するホストまたはサーバーを設定し、NFSマウントを使用してホストファイルにアクセスするクライアントを設定します。
前提条件
- 2台のRocky Linux 8サーバー。それぞれにsudo権限を持つ非rootユーザーが必要です。
- ホストとクライアントの両方には静的IPアドレスが必要です。プライベートネットワーク上で両方を設定することもできます。当チュートリアルでは、host_ipをホストのIPアドレスを示すために、client_ipをクライアントのIPアドレスを指すために使用します。
ステップ 1 - ホストとクライアントに NFS をインストールする
ホスト
NFSパッケージをインストールするには、nfs-utilsパッケージをインストールする必要があります。これは、NFSサーバー用のデーモンと関連ツールを提供します。
パッケージをインストールしてください。
sudo dnf install nfs-utils
nfs-serverサービスを有効にして開始します。NFSのマウントおよび共有に必要な残りのサービス(nfsd、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はNFSマウントの設定を行い、/etc/nfs.confはNFSデーモン及び関連ツールの設定を行います。デフォルト設定は私たちのチュートリアルには十分で、変更は必要ありません。
クライアント
クライアントに nfs-utils と nfs4-acl-tools パッケージをインストールします。
sudo dnf install nfs-utils nfs4-acl-tools
ステップ2 - ホストに共有ディレクトリを作成する
異なる構成設定の2つの例を使用します - 1つは汎用マウントで、もう1つはホストのホームディレクトリを共有する方法です。
NFSマウントされたディレクトリはクライアントの一部ではありません。したがって、NFSはそれらに対してスーパーユーザー権限を必要とするタスクを実行することができません。これは、クライアントが所有権を変更したり、ルートユーザーとして書き込みを行ったり、高レベルのタスクを実行したりできないことを意味します。しかし、クライアント上の信頼できるユーザーがスーパーユーザーアクセスなしでそのようなタスクを実行する必要がある場合もあります。NFSサーバーはこれを許可するように設定できますが、クライアントがホストにアクセスできるリスクが伴います。
汎用マウントを使用して作業する
最初のケースでは、クライアントがスーパーユーザー権限を必要とするタスクを実行できないことを意味する、デフォルトのNFS動作を使用したシンプルなマウントを作成します。
共有ディレクトリを作成してください。
host:$ sudo mkdir /var/nfs/share -p
ホストのルートユーザーがこのディレクトリを所有します。なぜなら、作成するために sudo を使用したからです。
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
ホームディレクトリの操作
第二のケースでは、ホスト上のホームディレクトリをクライアントに利用できるようにします。すでに存在しているため、新しく作成する必要はありません。また、ホストマシンのユーザーに影響を与えることになるため、権限を変更する必要もありません。
ステップ3 - ホストでのNFSエクスポートの構成
ホストマシンで/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はクライアントのルートユーザーからのリクエストをホストの非特権ユーザーに変換します。このオプションはその動作を無効にし、クライアントがホストにアクセスできるように慎重に使用する必要があります。
完了したら、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)
ステップ4 - ホストのファイアウォールの設定
Rocky LinuxはFirewalldファイアウォールを使用しています。ファイアウォールのステータスを確認してください。
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)
ステップ 6 - NFS アクセスのテスト
一般的な共有のテスト
/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として動作できるようになりました。
ステップ7 - マウントポイントを永続化する
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 をGoogle検索して、これらのオプションについてもっと学ぶことができます。
ステップ8 - NFS共有のアンマウント
システム上のリモートマウントをもう望まない場合は、umountコマンドを使用してそれらをアンマウントできます。このコマンドはumountと呼ばれ、一般的な間違いであるunmountではありませんので注意してください。
共有マウントから移動して、それらをアンマウントしてください。
client:$ cd ~
client:$ sudo umount /nfs/share
client:$ sudo umount /nfs/home
再起動時に再度マウントされる必要がない場合は、/etc/fstab ファイル内の該当するエントリの前に # 記号を付けてコメントアウトしてください。
結論
このチュートリアルでは、NFSホストサーバーを作成し、それを使用してディレクトリをマウントする方法を学びました。これをNFSクライアントと共有しました。プライベートネットワークで実装している場合には問題ありませんが、プロダクション環境で使用する場合は、プロトコルが暗号化されていないことを覚えておき、データを保護するために何らかの認証を実装する必要があります。
質問がある場合は、下のコメントに投稿してください。