ネットワークファイルシステムまたは短いNFSは、サーバーにリモートディレクトリをマウントできる分散ファイルシステムプロトコルです。 NFSを使用すると、別のサーバーまたはクライアントからファイルやフォルダーにアクセスできます。ネットワークを介して複数のクライアントまたはリモートシステムからそのサーバーに書き込むことができます。このテクノロジーにより、複数のシステム間でリソースを共有できる柔軟性が得られます。
このチュートリアルでは、NFSサーバーをセットアップする方法と、Ubuntu20.04を使用してクライアントにNFS共有をマウントする方法を学習します。
- 2つのUbuntu20.04システム。各サーバーには、sudo権限とUFWファイアウォールが設定されたroot以外のユーザーが必要です。
- プライベートネットワークを介してサーバーとクライアントの両方をセットアップできます。このチュートリアルでは、host_ipを使用して host_ipを示します。 アドレスとclient_ip クライアントのIPアドレスを参照します。
nfs-kernel-server
をインストールする必要があります ディレクトリを共有するためのホスト上のパッケージ。
$ sudo apt update
$ sudo apt install nfs-kernel-server
クライアントの場合、nfs-common
をインストールします クライアントがホストディレクトリをマウントできるようにするが、ディレクトリ自体をホストできないパッケージ。
$ sudo apt update
$ sudo apt install nfs-common
ホスト上のディレクトリへのアクセスをクライアントに許可する方法は2つあります。デフォルトでは、NFSサーバーはsudo特権を必要とする操作を許可しません。つまり、クライアントのスーパーユーザーは、rootとしてファイルを書き込んだり、所有権を再割り当てしたり、昇格された特権を必要とするタスクを実行したりすることはできません。
ただし、場合によっては、クライアントはホスト上で特定の操作を実行する必要があります。この操作には昇格された特権が必要ですが、スーパーユーザーアクセスは必要ありません。
これは、ディレクトリを共有するデフォルトの方法です。クライアントのrootユーザーが昇格された特権を使用してホストと対話することを困難にします。
まず、共有ディレクトリを作成します。
$ sudo mkdir /var/nfs/general -p
クライアントでルート操作を実行すると、NFSはそれらをnobody:nogroup
に変換します。 ホストマシンのクレデンシャル。したがって、共有ディレクトリに適切な所有権を与える必要があります。
$ sudo chown nobody:nogroup /var/nfs/general
ここでは、ホストのホームディレクトリをクライアントと共有します。これにより、クライアントのルートユーザーがホストに適切にアクセスできるようになります。
ホームディレクトリはホストサーバー上にすでに存在するため、作成する必要はありません。ホストマシン上のユーザーに複数の問題が発生するため、アクセス許可を変更する必要もありません。
共有を設定するためにNFSを構成する時が来ました。
ファイル/etc/exports
を開きます ホストサーバー上。
$ sudo nano /etc/exports
共有するディレクトリごとに、下部に次の行を1つずつ追加します。
/var/nfs/general client_ip(rw,sync,no_subtree_check)
/home client_ip(rw,sync,no_root_squash,no_subtree_check)
これらすべてのオプションとその意味を見ていきましょう。
- rw :これにより、クライアントはホストディレクトリへの読み取りおよび書き込みアクセスを許可されます。
- 同期 :このオプションは、NFSに応答する前に変更を書き込むように強制します。これは、NFSが最初にホストディレクトリへの書き込みを終了してから、クライアントに応答することを意味します。これにより、ホストサーバーの実際の状態が確実に反映されますが、ファイル操作の速度が低下する可能性があります。
- no_subtree_check :このオプションは、サブツリーチェックを無効にします。サブツリーチェックは、NFS要求ごとに、アクセスされたファイルが存在し、エクスポートされたツリーにあることをサーバーがチェックする必要がある操作です。この操作は、クライアントがアクセスしているファイルの名前が変更されるときに問題を引き起こします。したがって、ほとんどの場合、無効のままにしておくことをお勧めします。軽度のセキュリティへの影響がありますが、信頼性を向上させることができます。
- no_root_squash :デフォルトでは、NFSは、クライアントによってrootとして実行されるすべての操作を、サーバー上の非特権ユーザーに変換します。これは、セキュリティを向上させることを目的として行われます。このオプションは、特定の共有に対してその動作を無効にします。
終了したら、 Ctrl + Xを押してファイルを閉じます Yと入力します プロンプトが表示されたら。
NFSサーバーを再起動して、変更を適用します。
$ sudo systemctl restart nfs-kernel-server
NFSのベストプラクティスは、どこからでもアクセスできるようにするのではなく、クライアントのIPアドレスごとに個別に有効にすることです。
NFSはポート2049を使用します。次のコマンドでNFSへのアクセスを有効にします。
$ sudo ufw allow from client_ip to any port nfs
ステータスを確認して確認してください。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2049 ALLOW 167.100.34.78
OpenSSH (v6) ALLOW Anywhere (v6)
ホストが構成されたので、次はクライアントをセットアップします。
クライアントにマウントするための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
次のコマンドを使用して、正しくマウントされているかどうかを確認できます。
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 448M 0 448M 0% /dev
tmpfs 99M 664K 98M 1% /run
/dev/vda1 25G 3.2G 21G 14% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
tmpfs 99M 0 99M 0% /run/user/1000
123.175.112.87:/var/nfs/general 25G 18G 6.3G 74% /nfs/general
123.175.112.87:/home 25G 18G 6.3G 74% /nfs/home
リストの下部に、マウントされた両方の共有が表示されます。どちらも同じファイルシステムからマウントされているため、マウントされたディレクトリの実際の使用量ではなく、ディスク全体の使用量が表示されます。
各マウントで実際に使用されているスペースを確認するには、次のコマンドを使用します。
$ du -sh /nfs/general
36K /nfs/general
/var/nfs/general
にテストファイルを作成します 共有します。
$ sudo touch /nfs/general/general.test
所有権を確認してください。
$ ls -l /nfs/general/general.test
-rw-r--r-- 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.test
これはデフォルトのNFSオプションを使用してマウントされ、クライアントマシンからrootを使用してファイルを作成したため、ホストの所有権はnobody:nogroup
に譲渡されました。 。ここでは、クライアントユーザーはホストのマシンで管理ジョブを実行できません。
/ nfs/home`共有にテストファイルを作成します。
$ sudo touch /nfs/home/home.test
所有権を確認してください。
$ ls -l /nfs/home/home.test
-rw-r--r-- 1 root root 0 Aug 1 13:32 /nfs/home/home.test
ここでは、クライアントマシンからrootを使用してテストファイルを作成したため、所有権はホストマシンで保持されました。これは、no_root_squash
を使用したためです。 クライアントマシンのrootユーザーをホストマシンのrootユーザーとしても許可するフラグ。
クライアントマシンを起動すると、これらのマウントは保持されません。それらを永続的にするには、/etc/fstab
を編集する必要があります ファイル。
/etc/fstab
を開きます 編集用のファイル。
$ sudo nano /etc/fstab
ファイルの下部に次の行を貼り付けます。各行は、起動時にマウントする各ディレクトリに対応しています。
. . .
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
これらのオプションについては、nfs
のマニュアルページを確認してください。 。
$ man nfs
Ctrl + Xを押してファイルを保存します Yと入力します プロンプトが表示されたら。
サーバーを再起動してマウントを確認します。
$ sudo reboot
クライアントサーバーにログインし、マウントが存在することを確認します。
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 448M 0 448M 0% /dev
tmpfs 99M 664K 98M 1% /run
/dev/vda1 25G 3.2G 21G 14% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
tmpfs 99M 0 99M 0% /run/user/1000
123.175.112.87:/var/nfs/general 25G 18G 6.3G 74% /nfs/general
123.175.112.87:/home 25G 18G 6.3G 74% /nfs/home
NFSマウントが不要になったら、次のコマンドを使用してマウントを解除できます。
$ sudo umount /nfs/home
$ sudo umount /nfs/general
よくある間違いは、unmount
を使用することです umount
の代わりに これが実際のコマンドです。
それらが正しくマウント解除されていることを確認してください。
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 448M 0 448M 0% /dev
tmpfs 99M 664K 98M 1% /run
/dev/vda1 25G 3.2G 21G 14% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
tmpfs 99M 0 99M 0% /run/user/1000
また、/etc/fstab
からエントリを削除する必要があります 起動時に再マウントされないようにファイルします。 #
を配置して、エントリのコメントを解除することもできます。 マウントを再利用する必要がある場合に備えて、前の文字。
これで、ホストマシンでNFSマウントを作成する方法と、さまざまなクライアントマシンからそれらにアクセスする方法を学習したチュートリアルは終了です。ご不明な点がございましたら、下のコメント欄にご記入ください。