Ubuntu20.04でNFSマウントを設定する方法
序章
NFS(Network File System)は、サーバーにリモートディレクトリをマウントできる分散ファイルシステムプロトコルです。 これにより、別の場所にあるストレージスペースを管理し、複数のクライアントからそのスペースに書き込むことができます。 NFSは、ネットワークを介してリモートシステムにアクセスするための比較的標準的でパフォーマンスの高い方法を提供し、共有リソースに定期的にアクセスする必要がある状況でうまく機能します。
このガイドでは、Ubuntu 20.04にNFS機能に必要なソフトウェアをインストールし、サーバーとクライアントに2つのNFSマウントを構成し、リモート共有をマウントおよびアンマウントする方法について説明します。
前提条件
このチュートリアルでは2つのサーバーを使用し、一方がファイルシステムの一部を他方と共有します。 フォローするには、次のものが必要です。
-
2台のUbuntu20.04サーバー。 これらのそれぞれには、
sudo
特権を持つ非rootユーザー、UFWでセットアップされたファイアウォール、およびプライベートネットワーク(利用可能な場合)が必要です。-
sudo
権限とファイアウォールを備えたroot以外のユーザーのセットアップについては、 Ubuntu20.04の初期サーバーセットアップガイドに従ってください。 -
サーバーとクライアントにDigitalOceanDropletsを使用している場合は、VPCの作成方法のドキュメントでプライベートネットワークの設定について詳しく読むことができます。
-
このチュートリアルでは、ディレクトリを共有するサーバーを host と呼び、これらのディレクトリをマウントするサーバーをclientと呼びます。 両方のIPアドレスを知っている必要があります。 可能な場合は、必ずprivateネットワークアドレスを使用してください。
このチュートリアル全体を通して、プレースホルダーhost_ip
およびclient_ip
によってこれらのIPアドレスを参照します。 必要に応じて代用してください。
ステップ1—コンポーネントのダウンロードとインストール
まず、各サーバーに必要なコンポーネントをインストールします。
ホスト上
host サーバーに、nfs-kernel-server
パッケージをインストールします。これにより、ディレクトリを共有できるようになります。 これは、このセッションでapt
を使用して実行する最初の操作であるため、インストールする前にローカルパッケージインデックスを更新してください。
- sudo apt update
- sudo apt install nfs-kernel-server
これらのパッケージがインストールされたら、クライアントサーバーに切り替えます。
クライアント上
client サーバーに、nfs-common
というパッケージをインストールする必要があります。このパッケージは、サーバーコンポーネントを含まずにNFS機能を提供します。 繰り返しになりますが、インストールする前にローカルパッケージインデックスを更新して、最新の情報があることを確認してください。
- sudo apt update
- sudo apt install nfs-common
両方のサーバーに必要なパッケージが用意されたので、それらの構成を開始できます。
ステップ2—ホスト上に共有ディレクトリを作成する
スーパーユーザーアクセスに関してNFSマウントを構成できる2つの主要な方法を説明するために、構成設定が異なる2つの別々のディレクトリを共有します。
スーパーユーザーは、システム上のどこでも何でもできます。 ただし、NFSにマウントされたディレクトリは、それらがマウントされているシステムの一部ではないため、デフォルトでは、NFSサーバーはスーパーユーザー権限を必要とする操作の実行を拒否します。 このデフォルトの制限は、 clientのスーパーユーザーがrootとしてファイルを書き込んだり、所有権を再割り当てしたり、NFSマウントで他のスーパーユーザータスクを実行したりできないことを意味します。
ただし、 client システムには、マウントされたファイルシステムでこれらのアクションを実行する必要があるが、hostではスーパーユーザーアクセスを必要としない信頼できるユーザーがいる場合があります。 これを許可するようにNFSサーバーを構成できますが、ユーザー
例1:汎用マウントのエクスポート
最初の例では、デフォルトのNFS動作を使用して、clientマシンのroot権限を持つユーザーがhostと対話するのを困難にする汎用NFSマウントを作成します。 ]それらのクライアントスーパーユーザー特権を使用します。 このようなものを使用して、コンテンツ管理システムを使用してアップロードされたファイルを保存したり、ユーザーがプロジェクトファイルを簡単に共有できるスペースを作成したりできます。
まず、共有ディレクトリを作成します。
- sudo mkdir /var/nfs/general -p
sudo
で作成しているため、ディレクトリはhostのrootユーザーが所有しています。
- ls -la /var/nfs/general
Outputdrwxr-xr-x 2 root root 4096 May 14 18:36 .
NFSは、セキュリティ対策として、clientでのroot操作をnobody:nogroup
クレデンシャルに変換します。 したがって、これらの資格情報に一致するようにディレクトリの所有権を変更する必要があります。
- sudo chown nobody:nogroup /var/nfs/general
これで、このディレクトリをエクスポートする準備が整いました。
例2:ホームディレクトリのエクスポート
2番目の例では、 hostに格納されているユーザーのホームディレクトリをclient サーバーで使用できるようにすると同時に、それらのclientサーバーの信頼できる管理者がアクセスできるようにすることを目的としています。ユーザーを便利に管理する必要があります。
これを行うには、/home
ディレクトリをエクスポートします。 すでに存在しているので、作成する必要はありません。 権限も変更しません。 did の場合、hostマシンにホームディレクトリがある人にはさまざまな問題が発生する可能性があります。
ステップ3—ホストサーバーでのNFSエクスポートの構成
次に、NFS構成ファイルを詳しく調べて、これらのリソースの共有を設定します。
host マシンで、root権限を使用してテキストエディタで/etc/exports
ファイルを開きます。
- sudo nano /etc/exports
このファイルには、各構成行の一般的な構造を示すコメントが含まれています。 構文は次のとおりです。
directory_to_share client(share_option1,...,share_optionN)
共有する予定のディレクトリごとに1行を作成する必要があります。 ここに表示されている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
:このオプションは、clientコンピューターにボリュームへの読み取りアクセスと書き込みアクセスの両方を提供します。sync
:このオプションは、応答する前にNFSに変更をディスクに書き込むように強制します。 これにより、応答がリモートボリュームの実際の状態を反映するため、より安定した一貫性のある環境が実現します。 ただし、ファイル操作の速度も低下します。no_subtree_check
:このオプションは、サブツリーチェックを防ぎます。これは、 host が、リクエストごとにエクスポートされたツリーでファイルが実際にまだ利用可能かどうかをチェックする必要があるプロセスです。 これにより、clientが開いているときにファイルの名前が変更されると多くの問題が発生する可能性があります。 ほとんどの場合、サブツリーチェックを無効にすることをお勧めします。no_root_squash
:デフォルトでは、NFSはrootユーザーからの要求をサーバー上の非特権ユーザーにリモートで変換します。 これは、クライアントのルートアカウントがホストのファイルシステムをルートとして使用しないようにするためのセキュリティ機能として意図されていました。no_root_squash
は、特定の共有に対してこの動作を無効にします。
変更が完了したら、ファイルを保存して閉じます。 次に、構成したクライアントが共有を使用できるようにするには、次のコマンドを使用してNFSサーバーを再起動します。
- sudo systemctl restart nfs-kernel-server
ただし、実際に新しい共有を使用する前に、共有へのトラフィックがファイアウォールルールによって許可されていることを確認する必要があります。
ステップ4—ホストのファイアウォールを調整する
まず、ファイアウォールのステータスをチェックして、ファイアウォールが有効になっているかどうかを確認し、有効になっている場合は、現在許可されているものを確認します。
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
私たちのシステムでは、SSHトラフィックのみが通過を許可されているため、NFSトラフィックのルールを追加する必要があります。
多くのアプリケーションでは、sudo ufw app list
を使用して名前で有効にすることができますが、nfs
はその1つではありません。 ただし、ufw
は/etc/services
でもサービスのポートとプロトコルをチェックするため、名前でNFSを追加できます。 ベストプラクティスでは、許可するトラフィックを引き続き許可する最も制限の厳しいルールを有効にすることをお勧めします。そのため、どこからでもトラフィックを有効にするのではなく、具体的に説明します。
次のコマンドを使用して、ホストのポート2049
を開きます。必ず、クライアントのIPアドレスに置き換えてください。
- sudo ufw allow from client_ip to any port nfs
次のように入力して、変更を確認できます。
- sudo ufw status
出力にポート2049
から許可されたトラフィックが表示されます。
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2049 ALLOW 203.0.113.24
OpenSSH (v6) ALLOW Anywhere (v6)
これは、UFWがクライアントマシンからのポート2049
でのみNFSトラフィックを許可することを確認します。
ステップ5—クライアントでのマウントポイントとマウントディレクトリの作成
host サーバーが構成され、その共有を提供するようになったので、clientを準備します。
クライアントでリモート共有を利用できるようにするには、共有するホストのディレクトリをクライアントの空のディレクトリにマウントする必要があります。 。
注:マウントポイントにファイルとディレクトリがある場合、NFS共有をマウントするとすぐにそれらは非表示になります。 重要なファイルの損失を回避するために、すでに存在するディレクトリにマウントする場合は、そのディレクトリが空であることを確認してください。
マウント用に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
OutputFilesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 936K 98M 1% /run
/dev/vda1 25G 1.8G 23G 8% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
10.132.212.247:/var/nfs/general 25G 1.8G 23G 8% /nfs/general
10.132.212.247:/home 25G 1.8G 23G 8% /nfs/home
マウントした両方の共有が下部に表示されます。 それらは同じファイルシステムからマウントされたため、同じディスク使用量を示します。 各マウントポイントで実際に使用されているスペースを確認するには、ディスク使用量コマンドdu
とマウントのパスを使用します。 -s
フラグは、すべてのファイルの使用状況を表示するのではなく、使用状況の概要を提供します。 -h
は、人間が読める形式の出力を出力します。
例えば:
- du -sh /nfs/home
Output36K /nfs/home
これは、ホームディレクトリ全体のコンテンツが使用可能なスペースの36Kのみを使用していることを示しています。
ステップ6—NFSアクセスのテスト
次に、それぞれに何かを書き込んで、共有へのアクセスをテストしてみましょう。
例1:汎用シェア
まず、テストファイルを/var/nfs/general
共有に書き込みます。
- sudo touch /nfs/general/general.test
次に、その所有権を確認します。
- ls -l /nfs/general/general.test
Output-rw-r--r-- 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.test
NFSのデフォルトの動作を変更せずにこのボリュームをマウントし、sudo
コマンドを使用してclientマシンのroot ユーザーとしてファイルを作成したため、ファイルの所有権はデフォルトで[X205X ]