Ubuntu16.04で匿名ダウンロード用にvsftpdを設定する方法
序章
FTP(File Transfer Protocolの略)は、クライアントとサーバー間でファイルを移動するためにかつて広く使用されていたネットワークプロトコルです。 その後、ファイルを配信するためのより高速で、より安全で、より便利な方法に置き換えられました。 多くのカジュアルなインターネットユーザーは、https
を使用してWebブラウザーから直接ダウンロードすることを期待しており、コマンドラインユーザーはscp
やsFTPなどの安全なプロトコルを使用する可能性が高くなります。
FTPは、非常に特殊なニーズを持つレガシーアプリケーションとワークフローをサポートするためによく使用されます。 使用するプロトコルを選択できる場合は、より最新のオプションを検討することを検討してください。 ただし、FTPが必要な場合は、vsftpdが最適です。 セキュリティ、パフォーマンス、安定性のために最適化されたvsftpdは、他のFTPサーバーで見られる多くのセキュリティ問題に対して強力な保護を提供し、多くのLinuxディストリビューションのデフォルトです。
このチュートリアルでは、公開ファイルを広く配布することを目的とした匿名FTPダウンロードサイト用にvsftpdを設定する方法を示します。 FTPを使用してファイルを管理するのではなく、sudo
特権を持つローカルユーザーは、scp
、sFTP
、またはその他の安全なプロトコルを使用してファイルを転送および保守する必要があります。 。
前提条件
このチュートリアルに従うには、次のものが必要です。
- sudo権限を持つroot以外のユーザーがいるUbuntu16.04サーバー:これらの権限を持つユーザーを設定する方法について詳しくは、 Ubuntu16.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 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
がインストールされ、必要なポートが開いているので、次に進む準備ができています。
ステップ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=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
最後の行に次のように表示されている場合は、成功しています。
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:// 203.0.113.0
すべてが期待どおりに機能している場合は、pub
ディレクトリが表示されます。
pub
をクリックして、test.txt
を参照し、右クリックしてファイルを保存することもできます。
コマンドラインからテストすることもできます。これにより、構成に関するより多くのフィードバックが得られます。 多くのコマンドラインクライアントの-p
フラグであるパッシブモードでサーバーにFTPで転送します。 パッシブモードを使用すると、ユーザーはローカルファイアウォール構成の変更を回避して、サーバーとクライアントの接続を許可できます。
注:ネイティブWindowsコマンドラインFTPクライアントftp.exe
は、パッシブモードをまったくサポートしていません。 Windowsユーザーは、WinSCPなどの別の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 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 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を使用できないレガシーアプリケーションをサポートできます。 ファイルの保守の詳細については、SFTPを使用してリモートサーバーでファイルを安全に転送する方法を参照してください。