NFSまたはネットワークファイルシステムは、ネットワークを介してディレクトリを共有できるようにする分散ファイルシステムプロトコルです。 NFSを使用すると、システムにリモートディレクトリをマウントし、ローカルファイルであるかのようにリモートマシン上のファイルを操作できます。
デフォルトでは、NFSプロトコルは暗号化されておらず、ユーザー認証を提供しません。サーバーへのアクセスは、クライアントのIPアドレスまたはホスト名によって制限されます。
この記事では、Ubuntu20.04でNFSv4サーバーをセットアップする方法について説明します。また、NFSファイルシステムをクライアントマシンにマウントする方法も示します。
前提条件#
2台のマシンを使用します。1台はNFSサーバーとして機能するUbuntu20.04を実行し、もう1台は共有をマウントする他のLinuxディストリビューションを実行します。サーバーとクライアントは、プライベートネットワークを介して相互に通信できる必要があります。パブリックIPアドレスを使用して、ポート2049
でのトラフィックを許可するようにサーバーファイアウォールを構成できます。 信頼できるソースからのみ。
この例のマシンには、次のIPがあります。
NFS Server IP: 192.168.33.10
NFS Clients IPs: From the 192.168.33.0/24 range
NFSサーバーのセットアップ#
最初のステップは、NFSサーバーをセットアップすることです。必要なパッケージをインストールし、NFSディレクトリを作成してエクスポートし、ファイアウォールを構成します。
NFSサーバーのインストール#
NFSサーバーパッケージは、NFSカーネルサーバーの実行に必要なユーザースペースサポートを提供します。パッケージをインストールするには、次のコマンドを実行します:
sudo apt update
sudo apt install nfs-kernel-server
インストールが完了すると、NFSサービスが自動的に開始されます。
Ubuntu 20.04では、NFSバージョン2が無効になっています。バージョン3および4が有効になります。次のcat
を実行することで、それを確認できます。 コマンド:
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
NFSv2は現在かなり古く、有効にする理由はありません。
NFSサーバーの構成は、/etc/default/nfs-kernel-server
で定義されています。 および/etc/default/nfs-common
ファイル。ほとんどの状況では、デフォルト設定で十分です。
ファイルシステムの作成#
NFSv4サーバーはグローバルルートディレクトリを使用し、エクスポートされたディレクトリはこのディレクトリを基準にしています。バインドマウントを使用して、エクスポートするディレクトリに共有マウントポイントをリンクできます。
この例では、/srv/nfs4
を設定します NFSルートとしてのディレクトリ。 NFSマウントの構成方法をわかりやすく説明するために、2つのディレクトリ(/var/www
)を共有します。 および/opt/backups
)異なる構成設定で。 /var/www/
ユーザーwww-data
が所有しています 、および/opt/backups
root
が所有しています 。
まず、ルートディレクトリと共有マウントポイントを作成します。
sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www
ディレクトリを共有マウントポイントにバインドマウントします:
sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www
再起動後もバインドマウントを永続的にするには、/etc/fstab
を開きます。 ファイル:
sudo nano /etc/fstab
次の行を追加します:
/ etc / fstab/opt/backups /srv/nfs4/backups none bind 0 0
/var/www /srv/nfs4/www none bind 0 0
ファイルシステムのエクスポート#
次のステップは、エクスポートされるファイルシステムと、それらの共有へのアクセスを許可されたクライアントを/etc/exports
に追加することです。 ファイル。
エクスポートされたファイルシステムの各行の形式は次のとおりです。
export host(options)
export
の場所 エクスポートされたディレクトリ、host
エクスポートにアクセスできるホスト名またはIPアドレス/範囲、およびoptions
ホストオプションです。
/etc/exports
を開きます ファイルを作成し、次の行を追加します:
sudo nano /etc/exports
/ etc / exports /srv/nfs4 192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www 192.168.33.20(rw,sync,no_subtree_check)
最初の行にはfsid=0
が含まれています オプション。NFSルートディレクトリ(/srv/nfs4
)を定義します。 )。このNFSボリュームへのアクセスは、192.168.33.0/24
からのクライアントにのみ許可されます サブネット。 crossmnt
エクスポートされたディレクトリのサブディレクトリであるディレクトリを共有するには、オプションが必要です。
2行目は、1つのファイルシステムに複数のエクスポートルールを指定する方法を示しています。 192.168.33.0/24
全体への読み取りアクセスが許可されます 範囲、および192.168.33.3
への読み取りアクセスと書き込みアクセスの両方 IPアドレス。 sync
オプションは、応答する前にディスクに変更を書き込むようにNFSに指示します。
最後の行は自明です。使用可能なすべてのオプションの詳細については、man exports
と入力してください。 ターミナルで。
ファイルを保存して共有をエクスポートします:
sudo exportfs -ar
/etc/exports
を変更するたびに、上記のコマンドを実行する必要があります ファイル。エラーや警告がある場合は、端末に表示されます。
現在アクティブなエクスポートとその状態を表示するには、次を使用します:
sudo exportfs -v
出力には、オプション付きのすべての共有が含まれます。ご覧のとおり、/etc/exports
で定義されていないオプションもあります。 ファイル。これらはデフォルトのオプションであり、変更する場合は、これらのオプションを明示的に設定する必要があります。
/srv/nfs4/backups
192.168.33.3(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/www 192.168.33.20(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4 192.168.33.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/backups
192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
Ubuntuでは、root_squash
デフォルトで有効になっています。これは、NFSセキュリティに関する最も重要なオプションの1つです。ルートUID
をマッピングすることにより、クライアントから接続されたrootユーザーがマウントされた共有に対するroot権限を持つことを防ぎます。 およびGID
nobody
に / nogroup
UID
/ GID
。
クライアントマシン上のユーザーがアクセスできるようにするために、NFSは、クライアントのユーザーとグループIDがサーバー上のユーザーと一致することを想定しています。もう1つのオプションは、ユーザーIDとグループIDを名前に変換するNFSv4idmapping機能を使用することです。
それでおしまい。この時点で、UbuntuサーバーにNFSサーバーをセットアップしました。これで、次の手順に進み、クライアントを構成してNFSサーバーに接続できます。
ファイアウォール構成#
ファイアウォールで保護されているリモートUbuntuサーバーにJenkinsをインストールする場合は、NFSポートでトラフィックを有効にする必要があります。
sudo ufw allow from 192.168.33.0/24 to any port nfs
変更を確認します:
sudo ufw status
出力には、ポート2049
のトラフィックが表示されます。 許可されています:
To Action From
-- ------ ----
2049 ALLOW 192.168.33.0/24
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
NFSクライアントのセットアップ#
NFSサーバーがセットアップされ、共有がエクスポートされたので、次のステップは、クライアントを構成し、リモートファイルシステムをマウントすることです。
Linuxシステムに焦点を当てますが、macOSおよびWindowsマシンにNFS共有をマウントすることもできます。
NFSクライアントのインストール#
クライアントマシンには、リモートNFSファイルシステムをマウントするために必要なツールのみをインストールする必要があります。
-
DebianとUbuntuにNFSクライアントをインストールする
DebianベースのディストリビューションにNFSファイルシステムをマウントするためのプログラムを含むパッケージの名前は
nfs-common
です。 。インストールするには、次のコマンドを実行します:sudo apt update
sudo apt install nfs-common
-
CentOSとFedoraにNFSクライアントをインストールする
Red Hatとその派生物に、
nfs-utils
をインストールします パッケージ:sudo yum install nfs-utils
ファイルシステムのマウント#
IP 192.168.33.20
を使用してクライアントマシンで作業します 、/srv/nfs4/www
への読み取りおよび書き込みアクセス権があります ファイルシステムと/srv/nfs4/backups
への読み取り専用アクセス ファイルシステム。
マウントポイント用に2つの新しいディレクトリを作成します。
sudo mkdir -p /backups
sudo mkdir -p /srv/www
ディレクトリは任意の場所に作成できます。
エクスポートされたファイルシステムをmount
でマウントします コマンド:
sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backups
sudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www
192.168.33.10
の場所 NFSサーバーのIPです。 IPアドレスの代わりにホスト名を使用することもできますが、クライアントマシンで解決できる必要があります。これは通常、ホスト名を/etc/hosts
のIPにマッピングすることによって行われます。 ファイル。
NFSv4ファイルシステムをマウントするときは、NFSルートディレクトリを省略してください。 /backups
を使用する 、/srv/nfs4/backups
の代わりに 。
マウントまたはdf
を使用して、リモートファイルシステムが正常にマウントされていることを確認します コマンド:
df -h
このコマンドは、マウントされているすべてのファイルシステムを出力します。最後の2行は、マウントされた共有です:
Filesystem Size Used Avail Use% Mounted on
udev 951M 0 951M 0% /dev
tmpfs 199M 676K 199M 1% /run
/dev/sda3 124G 2.8G 115G 3% /
tmpfs 994M 0 994M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sda1 456M 197M 226M 47% /boot
tmpfs 199M 0 199M 0% /run/user/1000
192.168.33.10:/backups 124G 2.8G 115G 3% /backups
192.168.33.10:/www 124G 2.8G 115G 3% /srv/www
再起動時にマウントを永続的にするには、/etc/fstab
を開きます ファイルを作成し、次の行を追加します::
sudo nano /etc/fstab
/ etc / fstab 192.168.33.10:/backups /backups nfs defaults,timeo=900,retrans=5,_netdev 0 0
192.168.33.10:/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev 0 0
NFSファイルシステムをマウントするときに使用できるオプションについては、man nfs
と入力してください。 ターミナルで。
リモートファイルシステムをマウントする別のオプションは、autofs
のいずれかを使用することです。 ツールまたはsystemdユニットを作成します。
それぞれに新しいファイルを作成して、共有へのアクセスをテストしてみましょう。
まず、/backups
へのテストファイルを作成してみてください touch
を使用したディレクトリ コマンド:
sudo touch /backups/test.txt
/backup
ファイルシステムは読み取り専用としてエクスポートされ、予想どおり、Permission denied
が表示されます。 エラーメッセージ:
touch: cannot touch ‘/backups/test’: Permission denied
次に、/srv/www
にテストファイルを作成してみます sudo
を使用したルートとしてのディレクトリ コマンド:
sudo touch /srv/www/test.txt
ここでも、Permission denied
が表示されます メッセージ。
touch: cannot touch ‘/srv/www’: Permission denied
思い出してください、/var/www
ディレクトリはwww-data
が所有しています ユーザーであり、この共有にはroot_squash
があります rootユーザーをnobody
にマップするオプションセット ユーザーとnogroup
リモート共有への書き込み権限がないグループ。
www-data
があると仮定します 同じUID
を使用してクライアントマシンで使用する およびGID
リモートサーバーの場合と同様に(たとえば、両方のマシンにnginxonをインストールした場合)、ユーザーwww-data
としてファイルを作成してみてください。 :
sudo -u www-data touch /srv/www/test.txt
コマンドは出力を表示しません。これは、ファイルが正常に作成されたことを意味します。
確認するには、/srv/www
内のファイルを一覧表示します ディレクトリ:
ls -la /srv/www
出力には、新しく作成されたファイルが表示されます。
drwxr-xr-x 3 www-data www-data 4096 Apr 10 22:18 .
drwxr-xr-x 3 root root 4096 Apr 10 22:29 ..
-rw-r--r-- 1 www-data www-data 0 Apr 10 21:58 index.html
-rw-r--r-- 1 www-data www-data 0 Apr 10 22:18 test.txt
NFSファイルシステムのアンマウント#
リモートNFS共有が不要になった場合は、umount
を使用して、他のマウントされたファイルシステムと同じようにマウントを解除できます。 コマンド。
たとえば、/backup
をアンマウントするには 共有、実行します:
sudo umount /backups
マウントポイントが/etc/fstab
で定義されている場合 ファイルの場合は、必ずその行を削除するか、#
を追加してコメントアウトしてください。 行の先頭にあります。