前書き

FTP(File Transfer Protocolの略)は、クライアントとサーバー間でファイルを移動するためにかつて広く使用されていたネットワークプロトコルです。 それ以降、ファイルを配信するより高速で安全で便利な方法に置き換えられました。 多くのカジュアルなインターネットユーザーは、 `+ https `を使用してWebブラウザーから直接ダウンロードすることを期待しており、コマンドラインユーザーは ` scp +`やhttps://www.digitalocean.com/community/tutorialsなどの安全なプロトコルを使用する可能性が高くなります/ how-to-use-sftp-to-securely-transfer-files-with-a-remote-server [sFTP]。

FTPは、非常に特定のニーズを持つレガシーアプリケーションおよびワークフローをサポートするためによく使用されます。 使用するプロトコルを選択できる場合は、最新のオプションを検討することを検討してください。 ただし、FTPが必要な場合は、vsftpdが最適です。 セキュリティ、パフォーマンス、安定性のために最適化されたvsftpdは、他のFTPサーバーで見られる多くのセキュリティ問題に対する強力な保護を提供し、多くのLinuxディストリビューションのデフォルトです。

このチュートリアルでは、公開ファイルを広く配布することを目的とした匿名FTPダウンロードサイト用にvsftpdを設定する方法を示します。 FTPを使用してファイルを管理するのではなく、 + sudo +`特権を持つローカルユーザーは、 `+ scp ++ sFTP +、またはファイルを転送および維持するために選択した他の安全なプロトコルを使用する必要があります。

前提条件

このチュートリアルを進めるには、次のものが必要です。

  • * `+ sudo +`特権を持つ非rootユーザーを持つUbuntu 16.04サーバー*:これらの特権を持つユーザーの設定方法の詳細については、https://www.digitalocean.com/community/tutorials/initialをご覧ください。 -server-setup-with-ubuntu-16-04 [Ubuntu 16.04での初期サーバー設定]ガイド。

サーバーを設置したら、準備が整います。

ステップ1-vsftpdのインストール

パッケージリストを更新し、 `+ vsftpd +`デーモンをインストールすることから始めます。

sudo apt-get update
sudo apt-get install vsftpd

インストールが完了したら、構成ファイルをコピーし、空の構成から始めて元のファイルをバックアップとして保存できるようにします。

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

設定のバックアップが整ったら、ファイアウォールを設定する準備が整いました。

ステップ2-ファイアウォールを開く

まず、ファイアウォールのステータスをチェックして、有効になっているかどうかを確認します。有効になっている場合は、現在許可されているものを確認して、設定をテストするときにファイアウォールルールが実行されないようにします。

sudo ufw status

この場合、次のように表示されます。

OutputOutput
Status: active

To Action  From
-- ------  ----
OpenSSH ALLOW   Anywhere
OpenSSH (v6)   ALLOW   Anywhere (v6)

他のルールが設定されているか、ファイアウォールルールがまったくない場合があります。 この例では、「+ ssh +」トラフィックのみが許可されているため、FTPトラフィックのルールを追加する必要があります。

多くのアプリケーションでは、 + sudo ufw app list +`を使用して名前で有効にできますが、FTPはそれらの1つではありません。 ufwは/ etc / servicesでサービスのポートとプロトコルもチェックするため、名前でFTPを追加できます。 ポート20の `+ ftp-data +`とポート21の `+ ftp +(コマンド用)の両方が必要です。

sudo ufw allow ftp-data
sudo ufw allow ftp
sudo ufw status

これで、ファイアウォールルールは次のようになります。

OutputStatus: active

To Action  From
-- ------  ----
OpenSSH  ALLOW   Anywhere


OpenSSH (v6)   ALLOW   Anywhere (v6)

`+ vsftpd +`をインストールし、必要なポートを開いたら、先に進む準備ができました。

ステップ3-ファイル用のスペースの準備

最初に、ファイルをホストする予定のディレクトリを作成し、 `+ -p +`フラグを使用して中間ディレクトリを作成します。 ディレクトリ構造により、すべてのFTPディレクトリをまとめて保持し、後で認証を必要とする他のフォルダーを追加できます。

sudo mkdir -p /var/ftp/pub

次に、ディレクトリのアクセス許可を「+ nobody:nogroup +」に設定します。 後で、FTPユーザーとグループが所有しているすべてのファイルを表示するようにFTPサーバーを構成します。

sudo chown nobody:nogroup /var/ftp/pub

最後に、後でテストするためにディレクトリにファイルを作成します。

echo "vsftpd test file" | sudo tee /var/ftp/pub/test.txt

このサンプルファイルを配置したら、vsftpdデーモンを構成する準備が整いました。

手順4-匿名アクセスの構成

「+ sudo 」権限を持つユーザー向けに設定して、一般に広く配布するためのファイルを管理しています。 これを行うには、「 vsftpd 」を設定して匿名ダウンロードを許可します。 ファイル管理者は、ファイルを管理するために「 scp 」、「 sftp +」、またはその他の安全な方法を使用することが期待されるため、FTP経由でのファイルのアップロードはできません。

構成ファイルには、vsftpdの多くの構成オプションの一部が含まれています。

既に設定されているものを変更することから始めます。

sudo nano /etc/vsftpd.conf

以下の値を見つけて、以下の値と一致するように編集します。

/etc/vsftpd.conf

. . .
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=
#

We’ll set the local_enable setting to “NO” because we’re not going to allow users with local accounts to upload files via FTP. The comment in the configuration file can be a little confusing, too, because the line is uncommented by default.
# Uncomment this to allow local users to log in.
local_enable=
. . .

既存の設定の変更に加えて、追加の構成を追加します。

これらの設定を構成ファイルに追加します。 これらは順序に依存しないため、ファイル内のどこにでも配置できます。

#
# Point users at the directory we created earlier.
anon_root=/var/ftp/
#
# Stop prompting for a password on the command line.
no_anon_password=YES
#
# Show the user and group as ftp:ftp, regardless of the owner.
hide_ids=YES
#
# Limit the range of ports that can be used for passive FTP
pasv_min_port=40000
pasv_max_port=50000

それらを追加したら、ファイルを保存して閉じます。 次に、次のコマンドでデーモンを再起動します。

sudo systemctl restart vsftpd

`+ systemctl +`はすべてのサービス管理コマンドの結果を表示しないため、成功したことを確認したい場合は、次のコマンドを使用します。

sudo systemctl status vsftpd

最後の行に次のように表示されている場合、成功しています:

OutputAug 17 17:49:10 vsftpd systemd[1]: Starting vsftpd FTP server...
Aug 17 17:49:10 vsftpd systemd[1]: Started vsftpd FTP server.

これで、作業をテストする準備が整いました。

ステップ5-匿名アクセスのテスト

Webブラウザーからftp://を入力し、続いて_your_サーバーのIPアドレスを入力します。

ftp://

すべてが期待どおりに機能している場合、 `+ pub +`ディレクトリが表示されます:

image:https://assets.digitalocean.com/articles/vsftp-anon/anonftp-pub.png [ブラウザの「pub」フォルダの画像]

また、「+ pub 」をクリックして「 test.txt +」を参照し、右クリックしてファイルを保存することもできるはずです。

image:https://assets.digitalocean.com/articles/vsftp-anon/anonftp-test1.png [ブラウザの「test.txt」ファイルの画像]

コマンドラインからテストすることもできます。これにより、構成に関するより多くのフィードバックが得られます。 多くのコマンドラインクライアントの「+ -p +」フラグであるパッシブモードでサーバーにftpします。 パッシブモードを使用すると、ユーザーはローカルファイアウォールの構成を変更してサーバーとクライアントの接続を許可できます。

ftp -p

ユーザー名の入力を求められたら、「ftp」または「anonymous」のいずれかを入力できます。 これらは同等なので、短い「ftp」を使用します。

Connected to 203.0.113.0.
220 (vsftpd 3.0.3)
Name (203.0.113.0:21:sammy):

Enterキーを押すと、次のメッセージが表示されます。

Output
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

パッシブモードが期待どおりに機能していることを確認します。

ls
Output227 Entering Passive Mode (45,55,187,171,156,74).
150 Here comes the directory listing.
drwxr-xr-x    2 ftp      ftp          4096 Aug 17 19:30 pub
226 Directory send OK.

匿名ユーザーとして、 `+ get +`コマンドを使用してローカルマシンにファイルを転送できるはずです。

cd pub
get test.txt
Outputftp> get test.txt
227 Entering Passive Mode (45,55,187,171,156,73).
150 Opening BINARY mode data connection for test.txt (14 bytes).
226 Transfer complete.
16 bytes received in 0.0121 seconds (1325 bytes/s)

この出力は、ファイルのダウンロードに成功したことを示しています。必要に応じて、ローカルファイルシステムにあることを確認できます。

また、匿名ユーザーがファイルシステムをいっぱいにしないようにしたいので、テストするために、すぐに同じファイルを新しい名前でサーバーに戻します。

put test.txt upload.txt
Output227 Entering Passive Mode (104,236,10,192,168,254).
550 Permission denied.

これを確認したので、次のステップに備えてモニターを終了します。

bye

匿名接続が期待どおりに機能していることを確認したので、ユーザーが接続しようとしたときに何が起こるかに注意を向けます。

ステップ6-ユーザーとして接続を試みる

また、この設定ではログイン資格情報が暗号化されないため、ローカルアカウントを持つユーザーとして接続できないことを確認したい場合があります。 ログインを求められたときに「ftp」または「anonymous」を入力する代わりに、sudoユーザーを使用してみてください。

ftp -p
OutputConnected to 203.0.113.0:21.
220 (vsFTPd 3.0.3)
Name (203.0.113.0:21:)
530 This FTP server is anonymous only.
ftp: Login failed.
ftp>

これらのテストは、匿名ダウンロード専用にシステムをセットアップしたことを確認します。

結論

このチュートリアルでは、匿名ダウンロード専用にvsftpdを構成する方法について説明しました。 これにより、最新のプロトコルや、更新が困難な広く公開されているFTP URLを使用できないレガシーアプリケーションをサポートできます。 ファイルのメンテナンスの詳細については、https://www.digitalocean.com/community/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server [SFTPの使用方法]リモートサーバーを使用してファイルを安全に転送するには]をご覧ください。