自宅のコンピューターに重要なドキュメントを忘れて、オフィスで働いていることはありませんか?それとも、隣に座っている人とファイルを共有したいだけですか? Very Secure FTP Daemon (VSFTPD) のような FTP サーバーは完璧なソリューションです。
このチュートリアルでは、Linux サーバーで VSFTPD を使用して FPT サーバーをインストールおよび構成する方法を学び、コンピューター間でファイルを安全に共有できるようにします。
読み進めて、ファイルが自宅のコンピューターに二度と取り込まれないようにしてください!
前提条件
このチュートリアルは実践的なデモンストレーションです。フォローしたい場合は、次のものがあることを確認してください。
- Linux マシン – このチュートリアルでは Ubuntu 20.04 LTS を使用しますが、どの Linux ディストリビューションでも機能します。
- sudo 権限を持つ root 以外のユーザー
Ubuntu への VSFTPD のインストール
VSFTPD は Unix ライクなシステム用の FTP サーバーですが、デフォルトではインストールされていません。 Ubuntu に VSFTPD をインストールする方法は、他のパッケージをインストールする方法と似ています。 VSFTPD をインストールする前に APT パッケージ マネージャーを更新して、このチュートリアルを開始してください。
1. apt update
を実行します コマンドで APT を更新します。このコマンドは、構成済みのリポジトリからパッケージ リストを取得し、ローカル パッケージ キャッシュを更新します。
sudo apt update -y

2. 次に、apt install
を実行します。 以下のコマンドを実行して、マシンに VSFTPD をインストールします。このコマンドは、FTP サービスに必要なすべての依存関係も取り込みます。
デフォルトでは、VSFTPD パッケージは最新の Debian ベースのディストリビューションのほとんどで利用できます。そのため、追加のパッケージ リポジトリなしでインストールでき、あとは APT に任せることができます。

3. 最後に、systemctl
を実行します。 以下のコマンドを実行して、VSFTPD サービスが実行され、正しく構成されていることを確認します。
sudo systemctl status vsftpd
以下のような出力が表示されます。これは、vsftpd.service がアクティブ (実行中) であり、リクエストをリッスンしていることを示しています。

FTP クライアント接続用のポートを開く
VSFTPD の最新バージョンがインストールされたので、ファイアウォールを構成できます。 Ubuntu のデフォルトのファイアウォール構成ツールである UFW を使用して、安全な FTP クライアント接続用のポートを開くファイアウォール ルールを追加します。
1. ufw status
を実行します コマンドを実行して、現在アクティブなファイアウォール ルールを確認します。
sudo ufw status
以下では、ファイアウォールがアクティブであることがわかりますが、デフォルトで接続を許可するルールはありません.

2. 次に、ufw allow
を実行します。 以下のコマンドを実行して、3 つのポートすべてがファイアウォールを通過できるようにします。 VSFTPD には、ポート 20
での FTP 接続が必要です 、 21
、および 990
.
sudo ufw allow 20,21,990/tcp

3. ufw
を実行します 以下のコマンドで 40000:50000
を開きます ポート範囲。
VSFTPD では、FTP クライアントがパッシブ モードでサーバーにデータ接続できるように、40000:50000 のポート範囲を開く必要があります。
sudo ufw allow 40000:50000/tcp

4. 最後に、ufw status verbose
を実行します。 以下のコマンドを実行して、ファイアウォール ルールがアクティブであることを確認し、エラーをチェックしてください。
sudo ufw status verbose

VSFTDP サーバーの構成
ファイアウォールを通過するトラフィックを正常に許可しましたが、使用する前に VSFTPD サーバーを構成する必要があります。
/etc/vsftpd.conf file は、VSFTPD のメイン構成ファイルです。ただし、動的に行いたい場合は、他のコマンドを使用して FTP サーバーを構成することもできます。または、設定ファイルで利用できないルールを指定したい場合。
/etc/vsftpd.conf ファイルの編集中に、各ディレクティブのコメントを解除して、ディレクティブの前にある # 記号を削除して有効にします。
1. sudo cp
を実行します 以下のコマンドを実行して、元の構成ファイルをバックアップします (/etc/vsftpd.conf /etc/vsftpd.conf.bak
).
いじくり回す前に、重要な構成ファイルを常にバックアップする必要があります。
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
2. 次に、/etc/vsftpd.conf
を開きます お気に入りのテキスト エディターでファイルします。このデモでは nano
を使用しています 構成ファイルを編集します。
sudo nano /etc/vsftpd.conf
3. anonymous_enable を探して変更します ディレクティブの値を NO. にします。 匿名ユーザーは、公開ファイル共有によく使用されます。その匿名ユーザーをサーバーに入れたくありません。代わりに、FPT サーバーを安全にする必要があります。
local_enable ディレクティブの値を YES に設定して、サーバー上のアカウントを持つユーザーが FTP 経由でファイルを転送できるようにします。この構成では、許可されたユーザーのみが FTP サーバーにログインできます。

4. write_enable を変更します はいへの指令 ユーザーが FTP サーバーにファイルをアップロードして保存できるようにします。このディレクティブは、アップロード機能へのアクセスを制御するため、最も重要なものです。

5. chroot_local_user を変更します はいへの指令 FPT ユーザーは root として実行してはならないためです。 FTP サービスを使用するために、特権を持つ可能性のある新しいユーザーを作成する方がはるかに安全です (専用ユーザーの作成方法は後で学習します)。
このディレクティブが有効になっていない場合、FPT ユーザーは、ルート ディレクトリを含め、サーバー上のすべてにアクセスできます。この動作は、セキュリティ上の大きな問題になる可能性があります。
この構成では、ユーザーは指定したフォルダー (ほとんどの場合、ユーザーのホーム ディレクトリ) にのみアクセスできます。

ただし、chroot_local_user ディレクティブの値が YES に設定されている場合、chroot() システムコールが (有効な場合) 書き込みアクセスを拒否するため、write_enable ディレクティブ (ステップ 4) は機能しません。
解決策として、以下のディレクティブを vsftpd.conf に追加してください そのため、chroot_local_user ディレクティブの値に関係なく、write_enable ディレクティブは機能します。
allowed_writeable_chroot=YES

6. 次に、以下のディレクティブを vsftpd.conf に追加します ファイルを使用してパッシブ FTP 接続を有効にします。
VSFTPD は、パッシブ FTP 接続用の別のサービスによって占有されていない 1024 を超える任意のポートを使用できます。このデモでは、「FTP クライアント接続用にポートを開く」セクション (ステップ 3) で設定したポート範囲を使用します。
pasv_min_port=35000
pasv_max_port=40000

7. vsftpd.conf の下部に次の行を追加します。 ファイルを変更して、許可されたユーザーのみが FTP サーバーにログインできるようにします。
userlist_enable=YES
# Add the user to the vsftpd.userlist to allow a specific user
# to use the system login account to access your FTP service.
userlist_file=/etc/vsftpd.userlist
# NO - anyone can log in with an anonymous account.
# YES - the user will be denied to login when their name exists in this file.
userlist_deny=NO

8. 最後に、vsftpd.conf を保存して閉じます。 ファイルを作成し、以下のコマンドを restart
に対して実行します あなたの vsftpd
サーバーに変更を適用します。
sudo service vsftpd restart
FTP サービスを使用する専用ユーザーの作成
これで VSFTPD サーバーの構成は完了しましたが、root ユーザーの代わりに FTP サービスを使用するには専用のユーザーが必要です。ディレクトリに簡単にアクセスできるように、ユーザーのホーム ディレクトリ内にディレクトリを作成します。
1. adduser
を実行します 以下のコマンドで新しいユーザーを作成します。好きなユーザー名を選択できますが、このデモでは ata
という名前のユーザーを作成します .ただし、サーバー上の別の場所にユーザーを複製しないように注意してください。
sudo adduser ata
安全なパスワードを入力し、メモしておいてください。このパスワードを使用して FTP サーバーに接続します。
また、新しいユーザーの詳細を入力するか、ENTER を押してデフォルトの詳細を保持する必要があります。 Y と入力して ENTER を押し、ユーザー情報を確認します。

2. 次に、以下のコマンドを実行して ata
を追加します vsftpd.userlist
へのユーザー ファイル。
ご存じのように、このファイルは、userlist_deny ディレクティブの値が NO に設定されている場合に、FTP 経由でログインできるユーザーを指定します。この時点で、ata ユーザーのみが FTP サーバーにログインでき、他のすべての匿名ユーザーはアクセスを拒否されます。
echo "ata" | sudo tee -a /etc/vsftpd.userlist

3. 次のコマンドを実行して、新しい /home/ata/ftp
に適切な権限を設定します ディレクトリ。
以下のコマンドは、専用の FTP ユーザーのみが /home/ata/ftp ディレクトリにアクセスできるようにし、ユーザーがディレクトリとの間でファイルを転送できるようにします。
# Sets the owner of the /home/ata/ftp directory to be nobody.
sudo chown nobody:nogroup /home/ata/ftp
# Ensures that only the owner (your FTP user)
# has write(w) access(a) to the /home/ata/ftp directory.
sudo chmod a-w /home/ata/ftp
4. chown
を実行します。 /home/ata/ftp/upload
の所有者とグループを設定するコマンド ディレクトリを FTP ユーザー (ata
)。このコマンドは、/home/ata/ftp/upload
の正しい権限も設定します ディレクトリ。
sudo chown ata:ata /home/ata/ftp/upload
5. echo
を実行します 以下のコマンドを実行して、ata.txt
という名前の基本的なテスト ファイルを作成します。 .
以下のコマンドは、FTP ディレクトリに ata.txt という名前の新しいファイルを作成し、テキスト ファイルにテキスト (vsftpd テスト ファイル) を含めます。
echo "vsftpd test file" | sudo tee /home/ata/ftp/upload/ata.txt
この時点で、FPT サーバーの設定が完了し、ユーザーはそれに接続できるようになります。

FTP サーバーへの接続
専用の FTP ユーザーを構成したら、いよいよ FTP サーバーに接続します。ただし、まず匿名ユーザーを使用して FTP サーバーに接続して、FTP サーバーが安全かどうかをテストします。
1. ftp -p
を実行します 以下のコマンドを実行して、FTP サーバーに接続します。 your-server-ip
を置き換えます 実際のサーバーの IP アドレスを使用します。
ftp -p your-server-ip
匿名ユーザーとしてログインしようとすると、次のエラー メッセージが表示されます。この出力は、専用の FTP ユーザーのみがサーバーにアクセスできるため、FTP サーバーが安全であることを確認します。

2. bye
を実行します コマンドを実行して FTP クライアントを終了します。
bye

3. ftp
を再実行します ステップ 1 で行ったように、以下のコマンドを実行します。ただし、今回は専用の FTP ユーザー (ata) としてログインします。
ftp -p your-server-ip
以下に示すように、230 ログイン成功メッセージが表示され、FTP サーバーが意図したとおりに動作していることを確認できます。

4. 次に、以下の各コマンドを実行して ata.txt を確認します ファイルは ftp/upload にあります ディレクトリ。
ata.txt ファイルは、「FTP サービスを使用する専用ユーザーの作成」セクション (ステップ 5) で作成したものです。
# Change to the ftp/upload directory as the working directory.
cd ftp/upload
# List all files in the working directory.
ls

5. get
を実行します 以下のコマンドでファイルをダウンロードします (ata.txt
) を FTP サーバーからダウンロードし、ローカル マシンに保存します。
get ata.txt
以下に、転送が完了したことを示す確認メッセージが表示されます。

6. 次に、put
を実行します。 以下のコマンドで ata.txt
をアップロードします ata2.txt
という名前の新しいファイルとしてローカル マシンからファイル あなたのFTPサーバーに。
put ata.txt ata2.txt

7. 最後に、ls
を再実行します。 コマンドを実行して、現在のディレクトリ内のすべてのファイルを一覧表示し、ata2.txt を確認します。 がユーザーによって正常にアップロードされました。
ls
前のファイル転送 (ステップ 7 から 8) が成功した場合、以下に示すように、2 つのテキスト ファイルが表示されます。1 つは ata.txt という名前で、もう 1 つは ata2.txt という名前です。

シェル アクセスの無効化
新しい FTP ユーザーを作成すると、FTP サーバーは自動的にそのユーザーのログインとシェルの実行を許可します。その結果、ファイルのアップロードとダウンロードに加えて、ユーザーは FTP サーバーで潜在的に危険なシステム コマンドを実行することもできます。
FTP サーバーを使用していないときは、シェル アクセスを無効にして、ユーザーが SSH を使用してログインできないようにすることができます。これは、専用の FTP ユーザーに対してパスワードなしのログインを有効にしている場合に特に重要です。
1. サーバーで別のターミナルを開き、以下のコマンドを ssh
に対して実行します。 専用 FTP ユーザー (ata
) を使用して FPT サーバーに )。
ssh [email protected]
以下に示すように、ata ユーザー名と「FTP サービスを使用する専用ユーザーの作成」セクションで作成したパスワードを使用して、正常にログインできます。
この動作は、ata ユーザーが、サーバー構成の変更を含め、サーバー上で任意のコマンドを実行できることを示しています。侵害された FTP ユーザーは、匿名のユーザーよりもはるかに多くの損害を与える可能性があります。

2. 次に、以下のコマンドを実行して、ftponly.sh
という名前の新しいシェル スクリプトを作成します。 /bin で FPT サーバーのディレクトリ。このスクリプトは、FTP サーバーの専用 FTP ユーザーからの FTP ログインを無効にします。スクリプトは次に出力します (echo
) This account is limited to FTP access only
という警告メッセージが画面に表示されます .
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly .sh

3. 以下の chmod
を実行します コマンドを使用して、この新しいシェル スクリプト (/bin/ftponly
) に正しいアクセス許可を設定します。 )。このコマンドは、スクリプトを実行可能にし、FTP ユーザー (ata) がスクリプトを実行できるようにします。
sudo chmod a+x /bin/ftponly
4. 次に、以下のコマンドを実行して、新しいシェル スクリプトのパス (ftponly
) を追加します。 ) /etc/shells
で ファイル。このアクションにより、/bin/ftponly
以降、ata ユーザーで試行するログインはすべて拒否されます。 代わりにスクリプトが実行されます。
echo "/bin/ftponly" | sudo tee -a /etc/shells

5. usermod
を実行します 以下のコマンドを実行して、FTP ユーザー (ata) の現在のシェルを /bin/ftponly
に変更します。 シェル。
sudo usermod ata -s /bin/ftponly
6. 最後に、以下のコマンドを実行して、FTP ユーザー (ata
) を使用して FPT サーバーに SSH 接続します。 )。
ssh [email protected]
以下に示すように、専用の FTP ユーザーは FTP サーバーに SSH 接続できません。この動作は、 /bin/ftponly シェル スクリプトは警告メッセージを出力し、SSH 接続を閉じます (closed)。

結論
このチュートリアルでは、VSFTPD を使用して Ubuntu Linux に FTP サーバーをインストールして構成する方法を学習しました。また、アクセスが制限された FTP ユーザーを構成し、FTP ユーザーのシェル アクセスを制限する方法も学びました。
この時点で、アクセスが制限された機能的な FTP サーバーが必要です。
この新たに発見された知識を使用して、AWS EC2 で FTP サーバーを構成したり、Raspberry Pi で FTP サーバーのセットアップを開始したりできます。作業を開始するには、どれを選びますか?