ネットワークファイルシステム(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