Rocky Linux 9でNFSマウントを設定する方法
イントロダクション
NFS(ネットワーク・ファイル・システム)は、サーバー上にリモートディレクトリをマウントすることができる分散ファイルシステムのプロトコルです。これにより、異なる場所のストレージスペースを管理し、複数のクライアントからそのスペースに書き込むことができます。NFSは、ネットワーク越しにリモートシステムにアクセスするための比較的標準的で高速な方法を提供し、共有リソースに定期的にアクセスする必要がある状況でうまく機能します。
このガイドでは、Rocky Linux 9に必要なソフトウェアをインストールする方法、サーバーとクライアントで2つのNFSマウントを設定する方法、リモート共有をマウント・アンマウントする方法について解説します。
前提条件
このチュートリアルでは2つのサーバーを使用し、一方のサーバーがもう一方とファイルシステムを共有します。同じ作業を行うためには、以下が必要です。
- Two Rocky Linux 9 servers. Each of these should have a non-root user with sudo privileges, a firewall set up with UFW, and private networking, if it’s available to you.For assistance setting up a non-root user with sudo privileges and a firewall, follow our Initial Server Setup with Rocky Linux 9 guide.
If you’re using Silicon Cloud vServers for your server and client, you can read more about setting up a private network in our documentation on How to Create a VPC.
このチュートリアルでは、ディレクトリを共有するサーバーを「ホスト」と呼び、これらのディレクトリをマウントするサーバーを「クライアント」と呼びます。両方のIPアドレスを知る必要があります。可能な場合は、プライベートネットワークアドレスを使用してください。
このチュートリアルでは、これらのIPアドレスはホストIPとクライアントIPのプレースホルダーとして参照されます。必要に応じて入れ替えてください。
ステップ1 — コンポーネントのダウンロードとインストール
各サーバーに必要なコンポーネントをインストールすることから始めます。
ホストにおいて
ホストサーバー上で、dnfパッケージマネージャーを使用してnfs-utilsパッケージをインストールし、ディレクトリを共有することができます。
- sudo dnf install nfs-utils
これらのパッケージがインストールされたら、クライアントサーバーに切り替えてください。
クライアントについて
クライアントサーバー上で、同じnfs-utilsパッケージをインストールする必要があります。
- sudo dnf install nfs-utils
両方のサーバーに必要なパッケージが揃ったので、設定を開始できます。 (Ryōhō no sābā ni hitsuyōna pakkeji ga sorotta node, settei o kaishi dekimasu.)
ステップ2:ホスト上で共有ディレクトリを作成します。
2つの別々のディレクトリを共有する予定ですが、それぞれ異なる設定で行い、NFSマウントのスーパーユーザーアクセスの構成方法の2つのキーポイントを示します。
スーパーユーザーは自分たちのシステム上で何でも行うことができます。ただし、NFSマウントされたディレクトリは、マウントされたシステムの一部ではないため、デフォルトではNFSサーバーはスーパーユーザー特権が必要な操作を拒否します。このデフォルトの制限により、クライアント上のスーパーユーザーはルートとしてファイルを書き込んだり、所有権を再割り当てしたり、NFSマウント上で他のスーパーユーザータスクを実行することができません。
時には、ただし、クライアントシステム上の信頼できるユーザーが、マウントされたファイルシステムでこれらの操作を実行する必要がありますが、ホストでのスーパーユーザーアクセスは必要ありません。NFSサーバーをこのように設定することができますが、これには悪意のあるユーザーがホストシステム全体へのルートアクセスを取得するリスクを伴います。
例1:汎用マウントの輸出
最初の例では、デフォルトのNFSの振る舞いを使用して汎用的なNFSマウントを作成し、クライアントマシンのルート権限を持つユーザーがそのクライアントスーパーユーザー権限を使用してホストとのやり取りを困難にすることができます。たとえば、コンテンツ管理システムでアップロードされたファイルを保存したり、ユーザーがプロジェクトファイルを簡単に共有するためのスペースを作成するために、このような方法を使用するかもしれません。
最初に、共有ディレクトリを作成します(必要に応じて、完全なファイルパスを作成する-mkdirの-pオプションを使用して)。
- sudo mkdir /var/nfs/general -p
sudoで作成するので、ディレクトリはホストのrootユーザーに所有されます。
- ls -dl /var/nfs/general
drwxr-xr-x 2 root root 4096 Apr 17 23:51 /var/nfs/general
NFSはセキュリティ対策として、クライアント上のすべてのルート操作を「nobody」ユーザーに変換します。そのため、ディレクトリの所有権を「nobody」に変更する必要があります。
- sudo chown nobody /var/nfs/general
今、このディレクトリをエクスポートする準備ができています。
例2:ホームディレクトリのエクスポート
第2の例では、ユーザーのホームディレクトリをホストに保存し、同時にクライアントサーバー上で信頼できる管理者が必要なアクセスを便利に行うことが目的です。
これを行うために、/homeディレクトリをエクスポートします。既に存在しているため、作成する必要はありません。また、アクセス権も変更しません。変更すると、ホストマシン上のホームディレクトリを持つユーザーにさまざまな問題が発生する可能性があります。
ステップ3 – ホストサーバー上でNFSエクスポートを設定する
次に、これらのリソースの共有を設定するために、NFSの設定ファイルに入ります。
Rocky Linux 9にはデフォルトでviというテキストエディタが付属しています。viは非常に強力なテキストエディタですが、使い慣れていないユーザーにとってはやや分かりにくいかもしれません。Rocky Linux 9サーバーで設定ファイルの編集を容易にするため、nanoのようなより使いやすいエディタをインストールすることをおすすめします。
- sudo dnf install nano
ホストマシンで、ルート権限を持つnanoまたはお気に入りのテキストエディタを使用して、/etc/exportsファイルを開いてください。
- sudo nano /etc/exports
Rocky Linux 9では、このファイルはデフォルトで空になります。作成するために必要な構文は以下の通りです。
/exportファイル
directory_to_share client(share_option1,...,share_optionN)
各ディレクトリごとに行を追加してください。こちらに表示されている「client_ip」のプレースホルダーを実際のIPアドレスに変更してください。
「エトセット・エクスポーツ」
/var/nfs/general client_ip(rw,sync,no_subtree_check)
/home client_ip(rw,sync,no_root_squash,no_subtree_check)
ここでは、no_root_squashを除いて、両ディレクトリに同じ構成オプションを使用しています。それぞれのオプションの意味を見てみましょう。
- rw: This option gives the client computer both read and write access to the volume.
- sync: This option forces NFS to write changes to disk before replying. This results in a more stable and consistent environment since the reply reflects the actual state of the remote volume. However, it also reduces the speed of file operations.
- no_subtree_check: This option prevents subtree checking, which is a process where the host must check whether the file is actually still available in the exported tree for every request. This can cause many problems when a file is renamed while the client has it opened. In almost all cases, it is better to disable subtree checking.
- no_root_squash: By default, NFS translates requests from a root user remotely into a non-privileged user on the server. This was intended as security feature to prevent a root account on the client from using the file system of the host as root. no_root_squash disables this behavior for certain shares.
変更を終えたら、ファイルを保存して閉じてください。もしnanoを使用している場合、Ctrl+Xを押してからプロンプトが表示されたら、Yを押し、次にEnterを押します。そして、設定したクライアントに共有を利用可能にするために、NFSサーバーを起動し、systemctlで自動実行を有効にしてください。
- sudo systemctl enable nfs-server
- sudo systemctl start nfs-server
systemctl statusコマンドを使用して、サービスが起動していることを確認してください。
- sudo systemctl status nfs-server
● nfs-server.service – NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: > Drop-In: /run/systemd/generator/nfs-server.service.d └─order-with-mounts.conf Active: active (exited) since Mon 2022-08-08 17:41:18 UTC; 4s ago Process: 14348 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemct> Process: 14336 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS) Process: 14335 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 14348 (code=exited, status=0/SUCCESS) Aug 08 17:41:18 rocky9-nfs-host systemd[1]: Starting NFS server and services… Aug 08 17:41:18 rocky9-nfs-host systemd[1]: Started NFS server and services.
新しいシェアを実際に使用する前に、ファイアウォールのルールでシェアへのトラフィックが許可されていることを確認する必要があります。
ステップ4- ホスト上のファイアウォールの調整
もし私たちのRocky Linux 9ガイドで推奨されたように、firewalldファイアウォールを実行している場合、firewall-cmdの出力のservices行で現在許可されているサービスを確認してください。
- firewall-cmd –permanent –list-all | grep services
services: cockpit dhcpv6-client ssh
システムでは、コアシステムサービスのみが許可されているため、NFSトラフィックのためにルールを追加する必要があります。Rocky Linux上のNFSは、3つの異なるサービスを使用しており、それらすべてをファイアウォールを通過するように許可する必要があります。これらのルールは、firewall-cmdを使用して追加することができます。
- firewall-cmd –permanent –add-service=nfs
- firewall-cmd –permanent –add-service=mountd
- firewall-cmd –permanent –add-service=rpc-bind
- firewall-cmd –reload
追加されたことを確認することができます。
- firewall-cmd –permanent –list-all | grep services
services: cockpit dhcpv6-client mountd nfs rpc-bind ssh
これにより、これらのサービスのためにファイアウォールがグローバルに開放されることに注意してください。これは単一のクライアントに限定せずに行われます。ただし、既にNFSマウントを単一のIPアドレスにのみアクセス可能に設定しているため、これは問題ありません。もし直接ファイアウォールの設定にさらにセキュリティを追加する必要がある場合は、firewalldゾーンを実装することができます。
ステップ5 — クライアント上のマウントポイントとディレクトリの作成とマウント
ホストサーバーの設定が完了し、共有が行われているので、クライアントを準備します。
クライアントでリモート共有を利用するためには、クライアント上の空のディレクトリに、共有したいホスト上のディレクトリをマウントする必要があります。
Note
あなたはマウントのために2つのディレクトリを作成します。
- sudo mkdir -p /nfs/general
- sudo mkdir -p /nfs/home
ホストサーバーのIPアドレスを使用して、リモート共有をマウントする場所とファイアウォールの設定が完了したので、共有を配置できます。
- sudo mount host_ip:/var/nfs/general /nfs/general
- sudo mount host_ip:/home /nfs/home
これらのコマンドは、ホストコンピュータから共有をクライアントマシンにマウントします。マウントが成功したかどうかを確認する方法はいくつかあります。mountコマンドやfindmntコマンドで確認することができますが、df -hコマンドはより読みやすい出力を提供します。
- df -h
Filesystem Size Used Avail Use% Mounted on Filesystem Size Used Avail Use% Mounted on devtmpfs 370M 0 370M 0% /dev tmpfs 405M 0 405M 0% /dev/shm tmpfs 405M 11M 394M 3% /run tmpfs 405M 0 405M 0% /sys/fs/cgroup /dev/vda1 25G 1.5G 24G 6% / tmpfs 81M 0 81M 0% /run/user/0 host_ip:/var/nfs/general 25G 1.6G 24G 7% /nfs/general host_ip:/home 25G 1.6G 24G 7% /nfs/home
マウントした両方の共有は、下部に表示されます。同じファイルシステムからマウントされているため、ディスク使用量も同じです。
ステップ6 – NFSアクセスのテスト
次に、それぞれに何かを書き込むことで株式へのアクセスをテストしてください。
例1: 一般目的の株式
最初に、/var/nfs/general共有にテストファイルを作成してください。
- sudo touch /nfs/general/general.test
それから、所有権を確認してください。 (Sore kara, shoyūken o kakunin shite kudasai.)
- ls -l /nfs/general/general.test
-rw-r–r–. 1 nobody nobody 0 Aug 8 18:24 /nfs/general/general.test
このボリュームをNFSのデフォルトの動作を変更せずにマウントし、sudoコマンドを使用してクライアントマシンのrootユーザーとしてファイルを作成したため、ファイルの所有権はデフォルトでnobodyになります。クライアントのスーパーユーザーは、このNFSマウント共有でファイルの所有者を変更したり、ユーザーグループのための新しいディレクトリを作成するなどの通常の管理作業を行うことができません。
例2:ホームディレクトリの共有
一般目的の共有とホームディレクトリの共有の権限を比較するために、/nfs/home内に同じ方法でファイルを作成してください。
- sudo touch /nfs/home/home.test
その後、ファイルの所有権を確認してください。
- ls -l /nfs/home/home.test
-rw-r–r–. 1 root root 0 Aug 8 18:26 /nfs/home/home.test
sudoコマンドを使用して、一般的な.testファイルと同じ方法でhome.testをルートユーザーとして作成しました。ただし、この場合、デフォルトの動作を上書きしてno_root_squashオプションを指定したため、rootが所有しています。これにより、クライアントマシン上のrootユーザーがrootとして動作し、ユーザーアカウントの管理がより便利になります。同時に、これらのユーザーにホスト上でのルートアクセスを与える必要はありません。
ステップ7 – リモートNFSディレクトリの起動時のマウント
クライアントの/etc/fstabファイルにNFS共有を追加することで、リモートNFS共有を起動時に自動的にマウントすることができます。
ルート権限でテキストエディタで/etc/fstabファイルを開いてください。
- sudo nano /etc/fstab
ファイルの最後に、各株式ごとに1行追加してください。以下のような形式になります。
. . .
host_ip:/var/nfs/general /nfs/general 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
Note
クライアントは起動時にリモートパーティションを自動的にマウントしますが、接続の確立や共有の利用可能になるまで数秒かかる場合があります。
ステップ8 – NFSリモート共有のアンマウント
もしご自身のシステムからリモートディレクトリをマウント解除したい場合は、共有ディレクトリの構造から移動し、次のようにアンマウントしてください。
- cd ~
- sudo umount /nfs/home
- sudo umount /nfs/general
予想とは異なり、コマンドは「umount」という名前であることに注意してください。
これにより、リモート共有は削除され、ローカルストレージにのみアクセス可能となります。
- df -h
Filesystem Size Used Avail Use% Mounted on devtmpfs 370M 0 370M 0% /dev tmpfs 405M 0 405M 0% /dev/shm tmpfs 405M 11M 394M 3% /run tmpfs 405M 0 405M 0% /sys/fs/cgroup /dev/vda1 25G 1.5G 24G 6% / tmpfs 81M 0 81M 0% /run/user/0
もし次回の再起動時にそれらが再度マウントされるのを防ぎたい場合は、/etc/fstabを編集し、その行を削除するか、行の先頭に#文字を入れてコメントアウトしてください。また、autoオプションを削除することで自動マウントも防ぐことができます。これにより手動でマウントすることは可能です。
結論
このチュートリアルでは、NFSホストを作成し、2つの異なるNFSマウントを作成して、それらをNFSクライアントと共有することで、いくつかのNFSの重要な動作を説明しました。
もし生産環境でNFSを導入するつもりであれば、プロトコル自体が暗号化されていないことを注意することが重要です。プライベートネットワーク上で共有する場合には、問題にならないかもしれません。他の場合では、データを保護するためにVPNやその他の暗号化されたトンネルが必要になるでしょう。