ネットワーク経由でファイルやディレクトリを共有できるアプリケーションをお探しですか?複数のクライアントの場合は?おそらく NFS (ネットワーク ファイル システム) が必要です! Ubuntu NFS サーバーを使用すると、追加のアクセス制御を使用して、さまざまなクライアント用の共有ディレクトリを作成できます。
読者ではありませんか?この関連するビデオ チュートリアルをご覧ください。 ビデオが表示されない場合広告ブロッカーが無効になっていることを確認してください。このチュートリアルでは、NFS サーバーをセットアップし、複数のマシン間でファイルを安全に共有する方法を学びます。
準備?読み進めて、安全なファイル共有を開始してください!
前提条件
このチュートリアルは実践的なデモンストレーションです。先に進むには、次の要件を満たしていることを確認してください:
- 同じネットワーク上の Linux サーバーとクライアント – このデモでは、ホスト名が
nfs-server
の Ubuntu 20.04 サーバーを使用しています。 およびホスト名がclient
の Ubuntu 20.04 クライアント .ただし、Debian、CentOS、Fedora などの別の Linux ディストリビューションを使用することもできます。
- sudo 権限を持つ root 以外のユーザー
Ubuntu NFS サーバーのインストール
NFS を使用すると、ローカルに保存された単なるファイルであるかのように、リモート システム上のファイルに安全にアクセスできます。ただし、ファイルとディレクトリを共有する前に、まず Ubuntu NFS サーバーをインストールします。 Ubuntu では、nfs-kernel-server
をインストールします。 nfs-server
のパッケージ
チュートリアルの一部のコマンドには出力がありません。ただし、これまでに積み重ねたステップの結果は、各セクションの最後のステップに表示されます。
1. Linux サーバーにログインし、sudo su
を実行します。 以下のコマンドで root 権限を取得します。
sudo su
2. 以下のコマンドを update
に対して実行します リポジトリのパッケージ インデックスを取得し、Ubuntu NFS サーバー パッケージをインストールします (nfs-kernel-server
)。
sudo apt update
sudo apt install nfs-kernel-server -y
3. 最後に、systemctl
を実行します NFS サービス nfs-kernel-server
を開始して有効にする以下のコマンド 、次に nfs-kernel-server
を確認します サービス ステータスはアクティブです。
# start and enable NFS service
sudo systemctl enable --now nfs-kernel-server.service
# verify status NFS service
sudo systemctl status nfs-kernel-server.service
以下に示すように、アクティブ (終了) status は、NFS サービスが実行中であることを示します。 退出 メッセージは、systemd マネージャーが監視するデーモンを見つけることができないことを示しています。
NFS 共有ディレクトリの設定
NFS サーバー パッケージをインストールしたら、新しいディレクトリを作成して NFS 共有ディレクトリを設定します。これらのディレクトリをクライアントと共有し、新しい構成を /etc/exports に追加します ファイル。
1. 以下のコマンドを実行して、新しい NFS 共有ディレクトリを作成します。この例では、/srv/data
を共有します ディレクトリと/srv/test
sudo mkdir -p /srv/{data,test}
2. 次に、chown
を実行します 以下のコマンドを実行して、NFS 共有ディレクトリ /srv/data
の所有権を変更します および /srv/test
ユーザーへ nobody
およびグループ nogroup
.このコマンドは、NFS 共有ディレクトリがクライアントから書き込み可能であることを確認します。 sudo chown -R nobody:nogroup /srv/{data,test}
このコマンドは、NFS 共有ディレクトリがクライアントから書き込み可能であることを保証します。
sudo chown -R nobody:nogroup /srv/{data,test}
3. NFS構成を編集します /etc/exports
お好みのエディターを使用して、次の構成でファイルを入力してください。
以下の構成では、クライアント マシンが NFS 共有ディレクトリにアクセスし、読み取りと書き込み (rw
) のいずれかを指定したユーザー アクセスが許可されます。 ) または読み取り専用 (ro
)。必ず IP アドレスを変更してください (172.16.1.25
と 172.16.1.0/24
) をクライアント マシンの IP アドレスに置き換えます。
# sync - forces NFS to write change from the shared directory to disk immediately.
# no_subtree_check - disabling the subtree checking to get more performance.
# rw - set read/write access to NFS shared directory for clients.
# share /srv/data to client 172.16.1.25 with read and write access.
/srv/data 172.16.1.25(rw,sync,no_subtree_check,root_squash)
# r0 - set read-only access to NFS shared directory for clients.
# share /srv/test to network 172.16.1.0/24 with read only access.
/srv/test 172.16.1.0/24(ro,sync,no_subtree_check)
4. 以下のコマンドを実行して共有ディレクトリを適用し、/etc/exports
を確認します。 構成ファイル。出力メッセージが表示されない場合、NFS 構成は正しいです。
sudo exportfs -a
5. systemctl
を実行します 以下のコマンドでnfs-kernel-server
を再起動します サービス。
sudo systemctl restart nfs-kernel-server
6. 最後に、showmount
を実行します 以下のコマンドを実行して、Ubuntu NFS サーバー上の共有ディレクトリを一覧表示します。 IP アドレス (172.16.1.20
) を必ず変更してください ) を NFS サーバーの IP アドレスに置き換えます。
showmount --exports 172.16.1.20
これで、Ubuntu NFS サーバーへのアクセスを許可した IP アドレスを持つ NFS サーバー上の共有ディレクトリ リストが表示されます。
UFW ファイアウォールによる NFS 共有ディレクトリの保護
NFS 共有ディレクトリを構成しましたが、通常、ランダムなユーザーが共有ディレクトリにアクセスできないようにする必要があります。
許可された IP アドレスのみが共有ディレクトリにアクセスできることを確認してください。どのように? UFW ファイアウォールを設定し、NFS ポートに IP アドレスを指定します。
1. 次のコマンドを実行して、NFS ポート(2049
)を開きます )、IP アドレス 172.16.1.25
のクライアントを許可します および 172.16.1.0/24
Ubuntu NFS サーバーへのアクセス。 IP アドレスをクライアントの IP アドレスに置き換えてください。
# allow client IP 172.16.1.25 to access NFS server
sudo ufw allow from 172.16.1.25 to any port nfs
# allow network 172.16.1.0/24 to access NFS server
sudo ufw allow from 172.16.1.0/24 to any port nfs
2. 次に、ufw
を実行します 以下のコマンドを実行して、UFW ファイアウォールをリロードし、新しい構成を適用します。
sudo ufw reload
3. 最後に、ufw
を実行します 以下のコマンドを実行して、UFW ファイアウォールのステータスを確認してください。
sudo ufw status
以下では、NFS サーバー ポート 2049 がファイアウォールに追加され、クライアント IP アドレス 172.16.1.25 およびネットワーク 172.16.1.0/24 からのみアクセスできることがわかります。
クライアント マシンに NFS 共有ディレクトリをマウントする
この時点で、Ubuntu NFS サーバーを完全に構成しました。しかし、クライアント マシンはどのようにして NFS 共有ディレクトリにアクセスできるのでしょうか? mount
の実行 NFS共有ディレクトリにアクセスするコマンドはうまくいきます。ただし、最初に nfs-common
をインストールします (Debian Linux ディストリビューションの場合)または nfs-utils
(RHEL、CentOS ディストリビューションの場合) クライアント マシンへ。
1. クライアント マシンにログインし、ターミナルを開き、sudo su
を実行します。 コマンドでルート権限を取得します。
sudo su
2. 次に、以下のいずれかのコマンドを実行して、OS に応じて NFS パッケージをクライアント マシンにインストールします。
# for Ubuntu/Debian based distribution
sudo apt install nfs-common -y
# for RHEL/CentOS/Fedora Linux distribution
sudo dnf install nfs-utils -y
3. 以下のコマンドを実行して、ターゲット マウント ディレクトリを作成します。 NFS 共有ディレクトリがクライアント マシン /data
にマウントされます および /test
この例ではディレクトリです。
mkdir -p /{data,test}
4. 各 mount
を実行します 以下のコマンドを実行して、NFS 共有ディレクトリにアクセスします。
-t nfs
オプション は、ファイル システムのタイプが NFS サーバーであることを指定します。このコマンドは /srv/data
をマウントします Ubuntu NFS サーバー上の共有ディレクトリ をローカル クライアント ディレクトリ (/data
)。そして /srv/test
共有ディレクトリをクリックしてローカル ディレクトリへ /test
.
# mount shared directory `/srv/data on the nfs server 172.16.1.20
# to the local client directory /data
sudo mount -t nfs 172.16.1.20:/srv/data /data
# mount shared directory `/srv/test on the nfs server 172.16.1.20
# to the local client directory /test
sudo mount -t nfs 172.16.1.20:/srv/test /test
5. df
を実行します 以下のコマンドを実行して、クライアント マシンにマウントされているファイル システムのリストを確認します。
sudo df -h
以下の出力では、NFS 共有ディレクトリ /srv/data がクライアント マシンの /data ディレクトリにマウントされていることがわかります。同時に、共有ディレクトリ(/srv/test)がクライアント マシンのローカル ディレクトリ(/test)にマウントされます。
6. 次に、以下のコマンドを実行して、ターゲット マウント ディレクトリ(/data
)に移動します。 ) file.txt
という名前のファイルを作成します .
共有ディレクトリ (
/srv/data
) には読み取りと書き込みのアクセス許可があり、新しいファイルを作成できます。
# navigate to /data directory
cd /data
# create a new file with "This file from client machine!" as content
echo "This file from client machine!" > file.txt
7. ls
を実行します および cat
以下のコマンドを実行して、ファイルがマウント ディレクトリにあることを確認します /data
.
# list files on the current directory
ls -lah
# showing the content of the file.txt
cat file.txt
8. 最後に、以下の各コマンドを実行して、マウント ディレクトリに移動します (/test)
file.txt
というファイルを作成します .このコマンドを使用すると、読み取り専用ファイル システムの書き込みアクセス制限をテストできます。
# navigate to /test directory
cd /test
# create new file
echo "Test create a file on Read-only filesystem" > file.txt
以下の出力のように、共有ディレクトリ (/srv/test) には読み取り専用権限しかないため、エラー メッセージが表示されます。
NFS 共有ディレクトリを永続的にマウントする
これで、NFS 共有ディレクトリがクライアント マシンに正常にマウントされましたが、システムを再起動すると失われます。 NFS 共有ディレクトリを永続的にマウントするには? /etc/fstab で NFS 共有ディレクトリを定義する ファイル。
1. /etc/fstab を編集します 好みのエディターを使用して構成ファイル を編集し、次の構成を追加します。 NFSサーバーのIPアドレス、共有ディレクトリ、マウント先ディレクトリでIPアドレスを変更します。
# rw/ro - allow read and write or read-only to the target mount.
# hard - enable client machine to always try to connect to the NFS whenever fail.
# noexec - disable binary file execution on the file system.
# rsize - maximum READ requests that client machine can handle.
# wzise - maximum WRITE requests that client machine can handle.
# timeo - timeout for NFS client before retries requests to the NFS server.
# NFS Shared Directory - target - type - options - dump - pass
172.16.1.20:/srv/data /data nfs rw,hard,noexec,rsize=8192,wsize=8192,timeo=14 0 0
172.16.1.20:/srv/test /test nfs ro,hard,noexec,rsize=8192,wsize=8192,timeo=14 0 0
2. 次に、mount
を実行します /etc/fstab
にすべてのファイルシステムをマウントする以下のコマンド ファイルを作成し、/etc/fstab
を確認します 構成。エラー メッセージが表示されない場合、構成は正しいです。
sudo mount -a
3. df
を実行します 以下のコマンドを実行して、クライアント マシンにマウントされたファイル システムを確認してください。
sudo df -h
以下の出力と同様に、NFS 共有ディレクトリがクライアント マシンに自動的にマウントされるはずです。
4. 最後に、reboot
を実行します コマンドを実行して、クライアント マシンを再起動します。再起動したら、ログインしてdf
を再実行します 手順 3 で行ったようにコマンドを実行して、NFS 共有ディレクトリを確認します。
sudo df -h
以下に示すように、NFS 共有ディレクトリは依然としてクライアント マシンに永続的にマウントされています。
結論
このチュートリアル全体を通して、ディレクトリを安全に共有するために Linux サーバー上に NFS サーバーをセットアップする方法を学びました。また、NFS 共有ディレクトリを永続的にマウントすることにも触れたので、マシンを再起動するたびに共有ディレクトリを手動でマウントする必要はありません。
この時点で、完全に機能する NFS サーバーが完成しました。それで、次は何ですか?おそらく、Kerberos 認証を使用して NFS のセキュリティ層を追加する方法を学びませんか?