紹介
NFS、またはネットワークファイルシステムは、リモートディレクトリをサーバーにマウントできるようにする分散ファイルシステムプロトコルです。これにより、異なる場所のストレージスペースを管理し、複数のクライアントからそのスペースに書き込むことができます。NFSはネットワーク経由でリモートシステムにアクセスする比較的標準的でパフォーマンスの良い方法を提供し、共有リソースに定期的にアクセスする必要がある状況でうまく機能します。
このガイドでは、Ubuntu 18.04でNFS機能に必要なソフトウェアをインストールし、サーバーとクライアントでNFSマウントを構成し、リモート共有をマウントおよびアンマウントする方法について学びます。
前提条件
このチュートリアルでは、1つのサーバーが別のサーバーとその一部のファイルシステムを共有する形で2つのサーバーを使用します。このチュートリアルを完了するには、以下が必要です:
-
2つのUbuntu 18.04サーバー。それぞれに、
sudo
権限が設定されたroot以外のユーザー、UFWで設定されたファイアウォール、そして可能であればプライベートネットワークを持つ必要があります。-
非rootユーザーの
sudo
権限とファイアウォールの設定についての支援は、当社のUbuntu 18.04での初期サーバーセットアップガイドに従ってください。 -
サーバーとクライアントにDigitalOcean Dropletsを使用している場合は、VPCの作成方法を読んでプライベートネットワークを設定してください。
-
このチュートリアルでは、ディレクトリを共有するサーバーをホストと呼び、これらのディレクトリをマウントするサーバーをクライアントと呼びます。次のIPアドレスをホストおよびクライアントの値の代用として使用します:
- ホスト:
203.0.113.0
- クライアント:
203.0.113.24
これらのIPアドレスがコマンドや構成ファイルに表示される場合は、それぞれのホストおよびクライアントIPアドレスに置き換えてください。
ステップ1 — コンポーネントのダウンロードとインストール
まず、各サーバーに必要なコンポーネントをインストールしてください。
ホストで
ホストサーバーに、ディレクトリを共有するためのnfs-kernel-server
パッケージをインストールします。このセッションで最初に行う操作なので、インストールの前にローカルパッケージインデックスを更新してください:
次に、パッケージをインストールします:
これらのパッケージがインストールされたら、クライアントサーバーに切り替えます。
クライアントで
クライアントサーバーで、NFSの機能を提供するnfs-common
パッケージをインストールします。再度、インストールの前にローカルパッケージインデックスを更新して、最新の情報を確認してください:
その後、パッケージをインストールします:
両方のサーバーに必要なパッケージがインストールされたので、それらの設定を開始できます。
ステップ2 — ホストで共有ディレクトリを作成する
異なる設定で2つの別々のディレクトリを共有し、NFSマウントをスーパーユーザーアクセスに関して構成できる2つの主要な方法を説明します。
スーパーユーザーはシステム内のどこでも何でも行うことができます。ただし、NFS マウントされたディレクトリは、マウントされたシステムの一部ではないため、デフォルトでは NFS サーバーはスーパーユーザー特権が必要な操作を拒否します。このデフォルトの制限により、クライアント上のスーパーユーザーはrootとしてファイルを書き込むことや所有権を再割り当てること、NFS マウントで他のスーパーユーザータスクを実行することができません。
しかし、クライアントシステムには信頼されたユーザーがいる場合があり、これらのアクションをマウントされたファイルシステムで実行する必要があるが、ホスト上でスーパーユーザーアクセスは不要な場合があります。これを許可するように NFS サーバーを設定できますが、このようなユーザーがrootアクセスを取得し、全体のホストシステムにアクセスする可能性があるため、リスクが伴います。
例 1: 一般目的のマウントのエクスポート
最初の例では、デフォルトの NFS 動作を使用して、クライアントマシン上のスーパーユーザーがそのクライアントのスーパーユーザー特権を使用してホストとやり取りすることが難しくなる一般的な NFS マウントを作成します。これは、コンテンツ管理システムを使用してアップロードされたファイルを保存したり、ユーザーがプロジェクトファイルを共有するためのスペースを作成するために使用するかもしれません。
まず、共有ディレクトリを作成します:
sudo
を使用して作成しているため、ディレクトリはホストのrootユーザーによって所有されています:
Outputtotal 8
drwxr-xr-x 2 root root 4096 Feb 7 23:21 .
drwxr-xr-x 3 root root 4096 Feb 7 23:21 ..
NFSは、セキュリティ上の措置として、クライアントでのroot操作をnobody:nogroup
の資格情報に変換します。したがって、ディレクトリの所有権をこれらの資格情報に合わせる必要があります:
これで、このディレクトリをエクスポートする準備が整いました。
例2:ホームディレクトリのエクスポート
2番目の例では、ユーザーホームディレクトリをホストに保存し、それらのクライアントサーバーの信頼できる管理者がユーザーを便利に管理できるようにします。
これを行うには、/home
ディレクトリをエクスポートします。既に存在しているため、作成する必要はありません。また、アクセス許可を変更しません。そうすると、ホストマシンのホームディレクトリを持つユーザーにさまざまな問題が発生する可能性があります。
ステップ3 — ホストサーバーでNFSエクスポートを設定する
次に、これらのリソースの共有を設定するために、NFS構成ファイルに入り込んでみましょう。
ホストマシンで、お好みのテキストエディタ(ここではnano
)をroot権限で使用して、/etc/exports
ファイルを開きます。
ファイルには、各構成行の一般的な構造を示すコメントがあります。構文は次のようになります:
directory_to_share client(share_option1,...,share_optionN)
共有する各ディレクトリに対して1行を作成する必要があります。例えば、私たちの例のクライアントのIPが203.0.113.24
である場合、次のような行になります。IPアドレスをあなたのクライアントのものに変更してください:
/var/nfs/general 203.0.113.24(rw,sync,no_subtree_check)
/home 203.0.113.24(rw,sync,no_root_squash,no_subtree_check)
ここでは、no_root_squash
を除いて、両方のディレクトリに同じ構成オプションを使用しています。それぞれのオプションの意味を確認しましょう:
rw
: このオプションは、クライアントコンピュータにボリュームへの読み書きアクセスを提供します。sync
: このオプションは、変更をディスクに書き込んでから応答するようにNFSに強制します。これにより、応答がリモートボリュームの実際の状態を反映するため、より安定した一貫した環境が得られます。ただし、ファイル操作の速度が低下します。no_subtree_check
: このオプションは、サブツリーチェックを無効にします。これは、ホストがリクエストごとにエクスポートされたツリー内のファイルが実際に利用可能かどうかを確認するプロセスです。ファイルがクライアントが開いている間に名前が変更されると、多くの問題が発生する可能性があります。ほとんどの場合、サブツリーチェックを無効にする方が良いです。no_root_squash
:デフォルトでは、NFSはリモートからのrootユーザーのリクエストをサーバー上の特権のないユーザーに変換します。これは、rootアカウントがクライアント上でホストのファイルシステムをrootとして使用することを防ぐためのセキュリティ機能として意図されています。no_root_squash
は、特定の共有に対してこの動作を無効にします。
変更を終えたら、ファイルを保存して閉じます。 nano
を使用している場合は、CTRL + X
を押してY
とENTER
を押します。次に、構成したクライアントに共有を利用可能にするには、以下のコマンドでNFSサーバーを再起動します:
ただし、新しい共有を実際に使用するには、共有へのトラフィックがファイアウォールルールで許可されていることを確認する必要があります。
ステップ4 — ホストのファイアウォールの調整
まず、ファイアウォールの状態を確認して、有効になっているかどうか、現在何が許可されているかを確認します:
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アドレスに置き換えてください。
変更を確認するには、次のコマンドを実行します。
出力でポート2049
から許可されたトラフィックのリストが表示されます。
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2049 ALLOW 203.0.113.24
OpenSSH (v6) ALLOW Anywhere (v6)
これにより、UFWがポート2049
からのNFSトラフィックをクライアントマシンからのみ許可することが確認されます。クライアント。
ステップ5 — クライアント上のマウントポイントの作成とディレクトリのマウント
ホストサーバーが構成されて共有されているので、クライアントを準備します。
リモート共有をクライアントで利用できるようにするには、ホスト上のディレクトリをクライアントの空のディレクトリにマウントする必要があります。
注意: マウントポイントにファイルやディレクトリがある場合、NFS共有をマウントするとすぐに隠されます。重要なファイルが失われないようにするには、既存のディレクトリにマウントする場合は、そのディレクトリが空であることを確認してください。
マウント用の2つのディレクトリを作成します。最初のディレクトリを作成するには、次のコマンドを実行します::
次に、2番目のディレクトリを作成するために、次のコマンドを実行します::
これで、リモート共有を配置する場所ができたので、ファイアウォールを開いたら、ホストサーバーのIPアドレスを使用して共有をマウントできます。このガイドでは、ホストサーバーのIPアドレスは203.0.113.0
です::
これらのコマンドは、ホストコンピューターから共有をクライアントマシンにマウントします。マウントが成功したかどうかは、いくつかの方法で確認できます。これは、mount
またはfindmnt
コマンドで確認できますが、df -h
は、NFS共有のディスク使用状況が異なる方法で表示される、より読みやすい出力を提供します::
OutputFilesystem Size Used Avail Use% Mounted on
udev 480M 0 480M 0% /dev
tmpfs 99M 5.6M 94M 6% /run
/dev/vda1 25G 1.3G 23G 6% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 4.4M 100M 5% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
203.0.113.0:/var/nfs/general 25G 1.3G 23G 6% /nfs/general
203.0.113.0:/home 25G 1.3G 23G 6% /nfs/home
マウントした両方の共有が一番下に表示されます。これらは同じファイルシステムからマウントされたため、同じディスク使用状況が表示されます。各マウントポイントの下で実際に使用されているスペースの量を確認するには、ディスク使用量コマンドdu
とマウントのパスを使用します。-s
フラグは、すべてのファイルの使用状況を表示する代わりに使用状況の概要を提供します。-h
は人間に読みやすい出力を表示します::
Output44K /nfs/home
これにより、ホームディレクトリ全体の内容が利用可能なスペースの44Kしか使用していないことがわかります。
ステップ6 — NFS アクセスのテスト
次に、それぞれの共有へのアクセスをテストします。何かを書き込んでみてください。
例1: 汎用共有
まず、テストファイルを /var/nfs/general
共有に書き込んでください。
次に、その所有権を確認します。
Output-rw-r--r-- 1 nobody nogroup 0 Feb 7 23:53 /nfs/general/general.test
このボリュームを NFS のデフォルト動作を変更せずにマウントし、sudo
コマンドを使用して クライアント マシンの root ユーザーとしてファイルを作成したため、ファイルの所有権はデフォルトで nobody:nogroup
になります。この NFS マウントされた共有には、クライアント のスーパーユーザーは、ファイルの所有者を変更したり、ユーザーグループのために新しいディレクトリを作成したりするなど、通常の管理作業を行うことができません。
例2: ホームディレクトリ共有
汎用共有とホームディレクトリ共有のパーミッションを比較するために、同じ方法で /nfs/home
にファイルを作成します。
その後、ファイルの所有権を確認します:
Output-rw-r--r-- 1 root root 0 Feb 7 23:56 /nfs/home/home.test
home.test
を root として sudo
コマンドを使用して作成しました。これは general.test
ファイルを作成した方法とまったく同じです。ただし、この場合、no_root_squash
オプションをこのマウントに指定したため、root の所有です。これにより、クライアント マシン上の root ユーザーが root として操作できるようになり、ユーザーアカウントの管理がはるかに便利になります。同時に、これらのユーザーに ホスト 上での root アクセスを与える必要はありません。
ステップ 7 — ブート時にリモート NFS ディレクトリをマウントする
リモート NFS 共有をブート時に自動的にマウントするには、クライアント の /etc/fstab
ファイルにそれらを追加します。
お好みのテキストエディタで、次のファイルをルート権限で開きます:
ファイルの末尾に、次のように各共有に対する行を追加します:
. . .
203.0.113.0:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
203.0.113.0:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
注意: ここで指定されたオプションに関する詳細情報は、NFS の man
ページで確認できます。次のコマンドを実行してアクセスできます:
クライアントサーバーは、起動時にリモートパーティションを自動的にマウントしますが、接続を確立し、共有が利用可能になるまでに数分かかる場合があります。
ステップ8 — NFSリモート共有のアンマウント
もはやリモートディレクトリをシステムにマウントしたくない場合は、共有のディレクトリ構造から抜け出してアンマウントすることができます。
まず、ホームディレクトリに移動します:
次に、/nfs/home
をアンマウントします。コマンドはumount
という名前であり、unmount
と予想されるかもしれませんが、注意してください:
次に、/nfs/general
をアンマウントします:
これにより、リモート共有が削除され、ローカルストレージのみがアクセス可能になります:
Output
Filesystem Size Used Avail Use% Mounted on
udev 480M 0 480M 0% /dev
tmpfs 99M 5.5M 94M 6% /run
/dev/vda1 25G 1.3G 23G 6% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 4.4M 100M 5% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
次に、次回の再起動時にこれらが再度マウントされるのを防ぎたい場合は、/etc/fstab
を編集し、行を削除するか、行の先頭に#
文字を置いてコメントアウトします。また、auto
オプションを削除することで、手動でマウントできるようになります。
結論
このチュートリアルでは、NFSホストを作成し、2つの異なるNFSマウントを作成して、それらをNFS クライアントと共有しました。NFSを本番環境で実装する場合は、プロトコル自体が暗号化されていないことに注意することが重要です。プライベートネットワークを介してファイルを共有する場合、これは問題にならないかもしれません。他の場合では、VPNやその他の種類の暗号化トンネルがデータを保護するために必要になります。パフォーマンスに問題がある場合は、SSHFSの使用を検討してください。
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-18-04