
ネットワークファイルシステム(NFS)は、ネットワークを介してリモートフォルダーを共有できるようにする分散ファイルシステムプロトコルです。 NFSを使用すると、システムにリモートフォルダーをマウントし、ローカルファイルと同じくらい便利なリモートマシン上のファイルを操作できます。
NFSプロトコルはデフォルトでは暗号化されておらず、Sambaとは異なり、ユーザー認証を提供しません。サーバーは、クライアントのIPアドレスとポートを制限することによってアクセスを制限します。
このガイドでは、CentOS8でNFSV4サーバーを構築するために必要な手順に従います。 NFSファイルシステムをクライアントにマウントする方法を示します。
CentOS 8を実行しているサーバーがあることを前提としています。このサーバーでは、NFSサーバーをセットアップし、他のマシンはNFSクライアントとして機能します。サーバーとクライアントは、プライベートLANを介して相互に接続できる必要があります。プライベートIPアドレスを指定できない場合は、パブリックアドレスを使用し、サーバーのファイアウォールを構成して、信頼できるソースからのトラフィックがポート 2049を通過できるようにすることができます。
この例のマシンには、次のIPがあります。
NFS Server IP:192.168.33.148
NFS Clients IPs: From the 192.168.33.0/24 range
このセクションでは、必要なソフトウェアパッケージのインストール、NFSディレクトリの作成とエクスポート、およびファイアウォールの構成方法について説明します。
「nfs-utils」パッケージは、NFSサーバーの構築に必要なNFSツールとデーモンを提供します。これをインストールするには、次のコマンドを実行します。
sudo dnf install nfs-utils
インストールが完了したら、NFSサービスを有効にして開始し、次のように入力します。
sudo systemctl enable --now nfs-server
デフォルトでは、CentOS 8では、NFS3とNFS4の両方が使用可能であり、NFS2は無効になっています。 NFSV2は非常に古く、有効にする理由はありません。確認するには、次の catコマンドを実行します。
sudo cat /proc/fs/nfsd/versions
-2+3+4+4.1+4.2
NFSサーバーの構成オプションは、 / etc / nfsmount.confファイルと / etc / nfs.confファイルにあります。要件を満たすには、デフォルト設定で十分です。
NFSv4サーバーを構成する場合のベストプラクティスは、グローバルNFSルートディレクトリを使用して、実際のディレクトリをここにマウントすることです。この例では、NFSルートディレクトリとして / srv / nfs4を使用します。
NFSマウントの構成をわかりやすく説明するために、異なる構成ファイル設定で2つのディレクトリ( / var / wwwと / opt / backups)を共有します。
/ var / www /はユーザーおよびユーザーグループ apacheに属し、 / opt / backupsは rootユーザーに属します。
mkdirコマンドを使用して、このエクスポートされたファイルシステムを作成します。
sudo mkdir -p /srv/nfs4/{backups,www}
実際のディレクトリをマウントします。
sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www
このマウントを永続的にするには、次のエントリを / etc / fstabファイルに追加します。
sudo nano /etc/fstab
/opt/backups /srv/nfs4/backups none bind 00/var/www /srv/nfs4/www none bind 00
次のステップは、NFSサーバーによってエクスポートされるファイルシステム、共有オプション、およびファイルシステムへのアクセスが許可されているクライアントを見つけることです。これを行うには、 / etc / exportsファイルを開きます。
sudo nano /etc/exports
wwwおよび backupsディレクトリをエクスポートし、 192.168.33.0 / 24ネットワークからのすべてのクライアントを許可します。
/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.110(rw,sync,no_subtree_check)
最初の行には、NFSルートディレクトリ / srv / nfsを定義する fsid = 0が含まれています。192.168.33.0/ 24ネットワークのすべてのクライアントがNFSボリュームにアクセスできます。エクスポートされたディレクトリのサブディレクトリを共有するには、 crossmntオプションが必要です。
2行目は、ファイルシステムに複数のエクスポートルールを指定する方法を示しています。 / srv / nfs4 / backupsディレクトリをエクスポートし、 192.168.33.0 / 24からのクライアントによる読み取り専用アクセスを許可し、 192.168.33.3からのクライアントは同時に読み取りと書き込みを行うことができます。この syncオプションは、応答する前に変更をディスクに書き込むようにNFSに指示します。
最後の行は自明である必要があります。使用可能なオプションの詳細については、ターミナルで「manexports」と入力してください。
ファイルを保存し、エクスポートして共有します。
sudo exportfs -ra
/ etc / exportsファイルを変更するたびに、上記のコマンドを実行する必要があります。エラーや警告がある場合は、端末に表示されます。
現在アクティブなエクスポートとそのステータスを表示するには、次を使用します。
sudo exportfs -v
出力には、すべての共有とそのオプションが含まれます。ご覧のとおり、 / etc / exportsファイルで定義しなかったオプションもあります。これらはデフォルトのオプションです。変更する場合は、これらのオプションを明示的に設定する必要があります。
/srv/nfs4/backups
192.168.33.3(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)/srv/nfs4/www 192.168.33.110(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)/srv/nfs4 192.168.33.0/24(sync,wdelay,hide,crossmnt,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)/srv/nfs4/backups
192.168.33.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
root_squashは、NFSセキュリティに関連する最も重要なオプションの1つです。これにより、クライアントのrootユーザーが、マウントされた共有ディレクトリに対するroot権限を持つことができなくなります。ルート UIDと GIDを nobody / nogroupの UIDと GIDにマップします。
クライアントマシンを介してアクセスするユーザーの場合、NFSは、クライアントのユーザーおよびユーザーグループIDをサーバー上のユーザーおよびユーザーグループと一致させる必要があります。もう1つのオプションは、NFSv4 idmapping機能を使用することです。この機能は、ユーザーとユーザーグループIDを名前または他のメソッドに変換できます。
それでおしまい。この時点で、CentOSサーバーにNFSサーバーをセットアップしました。次の手順を確認し、NFSサーバーに接続するようにクライアントを構成できます。
FirewallDは、CentOS8のデフォルトのファイアウォールソリューションです。
NFSサービスには、NFSサーバーへのアクセスを許可する事前設定されたルールが含まれています。
次のコマンドは、 192.168.33.0 / 24サブネットからのアクセスを永続的に許可します。
sudo firewall-cmd --new-zone=nfs --permanent
sudo firewall-cmd --zone=nfs --add-service=nfs --permanent
sudo firewall-cmd --zone=nfs --add-source=192.168.33.0/24--permanent
sudo firewall-cmd --reload
NFSサーバーがセットアップされ、共有がエクスポートされたので、次のステップは、クライアントを構成し、リモートファイルシステムをマウントすることです。
macOSおよびWindowsマシンにNFS共有ディレクトリをマウントすることもできますが、ここではLinuxシステムへの共有ディレクトリのマウントに焦点を当てます。
他のクライアントマシンに、リモートNFSファイルシステムをマウントするために必要なツールをインストールします
nfs-commonです。インストールして実行します。nfs-utilsパッケージをインストールします。IPが 192.168.33.110のクライアントマシンで動作します。このマシンには、 / srv / nfs4 / wwwへの読み取りおよび書き込み権限と、ファイル / srv / nfs4 / backupsへの読み取り専用アクセス権限があります。
マウントポイントとして2つの新しいディレクトリを作成します。これらのディレクトリはどこにでも作成できます。
sudo mkdir -p /backups
sudo mkdir -p /srv/www
mountコマンドを使用して、エクスポートされたファイルシステムをマウントします。
sudo mount -t nfs -o vers=4192.168.33.148:/backups /backups
sudo mount -t nfs -o vers=4192.168.33.148:/www /srv/www
192.168.33.148 NFSサーバーのIPアドレスです。 IPアドレスの代わりにホスト名を使用することもできますが、クライアントマシンでipに変換する必要があります。これは通常、 / etc / hostsローカルファイルのホスト名とIPをマッピングすることによって行われます。
NFSv4ファイルシステムをマウントするときは、NFSルートディレクトリを無視する必要があるため、 / srv / nfs4 / backupsを使用する代わりに、 / backupsを使用してください。
リモートファイルシステムが正常にマウントされていることを確認するには、 dfコマンドを使用します。
df -h
このコマンドは、マウントされているすべてのファイルシステムを出力します。最後の2行は、マウントされた共有です。
...192.168.33.148: /backups 9.7G 1.2G 8.5G 13%/backups
192.168.33.148: /www 9.7G 1.2G 8.5G 13%/srv/www
これらのマウントを永続化するには、 / etc / fstabファイルを開きます。
sudo nano /etc/fstab
次の行を追加します。
192.168.33.148: /backups /backups nfs defaults,timeo=900,retrans=5,_netdev 00192.168.33.148:/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev 00
NFSファイルシステムをマウントするために使用できるオプションの詳細については、ターミナルに「mannfs」と入力してください。
リモートファイルシステムをマウントするための別のオプションは、 autofsツールを使用するか、systemdユニットを作成することです。
共有ディレクトリに新しいファイルを作成して、共有フォルダへのアクセスをテストしてみましょう。
まず、 touchコマンドを使用して / backupsディレクトリにテストファイルを作成します。
sudo touch /backups/test.txt
backupファイルシステムは読み取り専用としてエクスポートされ、 Permissiondeniedのようなエラーメッセージが表示されます。
touch: cannot touch ‘/backups/test’: Permission denied
次に、sudoコマンドを使用して、rootユーザーとして / srv / wwwディレクトリにテストファイルを作成します。
sudo touch /srv/www/test.txt
もう一度、「Permissiondenied」というメッセージが表示されます。
touch: cannot touch ‘/srv/www’: Permission denied
/ var / wwwディレクトリは apacheユーザーに属しており、この共有には root_squashオプションがあり、rootユーザーを nobodyユーザーと nogroupユーザーグループにマップします。これにより、rootユーザーはリモート共有ファイルへの書き込み権限を持ちません。 。
apacheユーザーがクライアントマシンに存在し、 GIDと UIDもリモートサーバーと同じであると仮定すると(たとえば、サーバーとクライアントの両方にapacheをインストールした場合)、 apacheユーザーとして作成できます。ファイル:
sudo -u apache touch /srv/www/test.txt
このコマンドは出力を表示しません。これは、ファイルが正常に作成されたことを意味します。
作成が成功したことを確認するには、 / srv / wwwフォルダー内のすべてのファイルを一覧表示します。
ls -la /srv/www
出力には、新しく作成されたファイルが表示されます。
drwxr-xr-x 3 apache apache 4096 Jun 2322:18.
drwxr-xr-x 3 root root 4096 Jun 2322:29..-rw-r--r--1 apache apache 0 Jun 2321:58 index.html
- rw-r--r--1 apache apache 0 Jun 2322:18 test.txt
リモートNFS共有が不要になった場合は、umountコマンドを使用してアンマウントできます。たとえば、 / backupをアンインストールするには、次のコマンドを実行できます。
sudo umount /backups
マウントポイントが / etc / fstabファイルで定義されている場合は、対応する行を削除するか、# を使用して行の先頭にコメントを付けてください。
このガイドでは、リモートNFSサーバーをセットアップする方法と、クライアントにリモートファイルシステムをマウントする方法を示します。実稼働環境でNFSを使用し、機密データを共有する場合は、kerberos認証と認証を有効にすることをお勧めします。
NFSの代わりに、SSHFSを使用してSSH接続を介してリモートディレクトリをマウントできます。 SSHはデフォルトで暗号化されており、設定と使用が簡単です。
Recommended Posts