FTPは、クライアントとサーバー間でファイルを移動するためにかつて広く使用されていたネットワークプロトコルであるFile TransferProtocolの略語です。これは、より速く、より安全で、より便利なファイル転送方法に置き換えられました。多くのカジュアルなネットユーザーは、 https
を使用してWebブラウザーから直接ダウンロードしたいと考えており、コマンドラインユーザーは scp
やSFTPなどの安全なプロトコルを使用することを好みます。
FTPは、特定の要件を持つレガシーアプリケーションとワークフローをサポートするためによく使用されます。使用するプロトコルを選択できる場合は、より最新のオプションを検討することを検討してください。ただし、FTPが必要な場合は、vsftpdを選択することをお勧めします。 vsftpdは、セキュリティ、パフォーマンス、および安定性のために最適化されており、他のFTPサーバーに存在する多くのセキュリティ問題を十分に防ぐことができ、多くのLinuxディストリビューションのデフォルト設定です。
このチュートリアルでは、パブリックファイルを広く配布することを目的とした匿名FTPダウンロードサイト用にvsftpdを設定する方法を示します。 FTPを使用してファイルを管理する代わりに、ローカルユーザーの sudo
権限は、 scp
、 sFTP
、またはファイルを転送および維持するために選択したその他の安全なプロトコルを使用することが期待されます。
このチュートリアルに従うには、次のものが必要です。
サーバーができたら、開始できます。
最初にパッケージリストを更新し、 vsftpd
デーモンをインストールします。
sudo apt-get update
sudo apt-get install vsftpd
インストールが完了したら、構成ファイルをコピーして、空の構成から開始し、元のファイルをバックアップとして保存できるようにします。
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
構成をバックアップすることで、ファイアウォールを構成する準備が整いました。
まず、ファイアウォールのステータスをチェックして有効になっているかどうかを確認します。有効になっている場合は、構成をテストするときにブロックするファイアウォールルールが発生しないように、現在許可されているものを確認します。
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
現在、ファイアウォールルールは次のとおりです。
Status: active
To Action From
------------
OpenSSH ALLOW Anywhere
21 /tcp ALLOW Anywhere
20 /tcp ALLOW Anywhere
OpenSSH(v6) ALLOW Anywhere(v6)21/tcp(v6)ALLOW Anywhere(v6)20/tcp(v6)ALLOW Anywhere(v6)
vsftpd
をインストールし、必要なポートを開いたら、続行する準備が整いました。
まず、 -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デーモンを構成できます。
私たちは、一般に広く配布するためにファイルを維持する権限を持つ sudo
ユーザー向けに設定しています。このために、匿名ダウンロードを許可するように vsftpd
を構成します。ファイル管理者は、ファイルを維持するために scp
、 sftp
、またはその他の安全な方法を使用することが期待されるため、FTPを介したファイルのアップロードは許可されません。
構成ファイルには、vsftpdの多くの構成オプションが含まれています。
まず、設定内容を変更します。
sudo nano /etc/vsftpd.conf
次の値を見つけて、次の値に一致するように編集します。
...
# Allow anonymous FTP?(Disabled by default).
anonymous_enable=YES
#
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=NO
...
既存の設定を変更することに加えて、他のいくつかの構成も追加します。
注: man vsftpd.conf
コマンドを使用して、すべてのオプションを理解できます。
これらの設定を構成ファイルに追加します。それらは順序に依存しないため、ファイル内のどこにでも配置できます。
#
# 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
注: UFWを使用している場合、これらの設定はそのまま実行できます。 iptablesを使用している場合は、指定した pasv_min_port
と pasv_max_port
の間にポートを開くルールを追加する必要がある場合があります。
追加後、ファイルを保存して閉じます。次に、次のコマンドを使用してデーモンを再起動します。
sudo systemctl restart vsftpd
systemctl
は、すべてのサービス管理コマンドの結果を表示するわけではないため、成功したことを確認する場合は、次のコマンドを使用します。
sudo systemctl status vsftpd
最後の行が次のようになっている場合は、成功しています。
Aug 1717:49:10 vsftpd systemd[1]: Starting vsftpd FTP server...
Aug 1717:49:10 vsftpd systemd[1]: Started vsftpd FTP server.
これで、作業をテストする準備が整いました。
Webブラウザーから、ftp:// * serverの背後にあるIPアドレスを入力します。
ftp:// 203.0.113.0
すべてが期待どおりに機能する場合は、 pub
ディレクトリが表示されます。
また、 pub
をクリックし、 test.txt
を表示し、右クリックしてファイルを保存できるはずです。
コマンドラインからテストすることもできます。これにより、構成に関するフィードバックがさらに提供されます。多くのコマンドラインクライアントの -p
フラグであるパッシブモードでサーバーにftpします。パッシブモードでは、ユーザーはローカルファイアウォール構成を変更してサーバーとクライアントの接続を許可する必要がありません。
**注:**ネイティブWindowsコマンドラインFTPクライアント ftp.exe
は、パッシブモードをまったくサポートしていません。 Windowsユーザーは、[WinSCP](https://winscp.net/eng/docs/commandline)などの別のWindowsFTPクライアントを表示したい場合があります。
ftp -p 203.0.113.0
ユーザー名の入力を求められたら、「ftp」または「anonymous」と入力できます。それらは同等であるため、短い「ftp」を使用します。
Connected to 203.0.113.0.220(vsftpd 3.0.3)Name(203.0.113.0:21:sammy): ftp
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 1719: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 in0.0121seconds(1325 bytes/s)
この出力は、ファイルが正常にダウンロードされたことを示しています。必要に応じて、ローカルファイルシステムにあるかどうかを確認できます。
また、匿名ユーザーがファイルシステムに入力しないようにしたいので、テストするために、右に曲がって同じファイルを新しい名前でサーバーに戻そうとします。
put test.txt upload.txt
Output227 Entering Passive Mode(104,236,10,192,168,254).550 Permission denied.
これを確認したので、次のステップの準備のためにモニターを終了します。
bye
匿名接続が期待どおりに機能していることを確認したので、ユーザーが接続しようとしたときに何が起こるかに注目します。
この設定ではログイン資格情報が暗号化されないため、ローカルアカウントを持つユーザーとして接続できないようにすることもできます。ログインを求められたら、「ftp」や「anonymous」と入力する代わりに、sudoユーザーを使用してみてください。
ftp -p 203.0.113.0
OutputConnected to 203.0.113.0:21.220(vsFTPd 3.0.3)Name(203.0.113.0:21:your_user)530 This FTP server is anonymous only.
ftp: Login failed.
ftp>
これらのテストは、匿名ダウンロード用にのみシステムを設定したことを確認します。
このチュートリアルでは、匿名ダウンロード専用にvsftpdを構成する方法について説明しました。これにより、更新がより困難な最新のプロトコルや広く公開されているFTPURLを使用できないレガシーアプリケーションをサポートできます。
その他のUbuntuチュートリアルについては、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。
参照:「Ubuntu16.04で匿名ダウンロード用にvsftpdを設定する方法」
Recommended Posts