FTPまたはファイル転送プロトコルは、クライアントとサーバー間でファイルを転送するための非常に古いよく知られたプロトコルです。 また、TLSなしで使用された場合にのみ、安全でないプロトコルです。 このチュートリアルでは、FTPを安全に使用できるようにするTLS用にvsftpdを構成します。 最近では、FTPはSFTPやSCPなどのより安全なプロトコルに置き換えられることがよくあります。
ただし、サーバーでFTPを使用する必要がある場合は、vsftpd(Very Secure FTP Daemon)が最適です。
このチュートリアルでは、Ubuntu20.04ベースのサーバーでvsftpdを使用してFTPサーバーをインストールおよび構成する方法を学習します。 また、SSL/TLSプロトコルを使用して接続を保護する方法についても学習します。
前提条件
- sudo権限を持つroot以外のユーザーがいるUbuntu20.04サーバー。
ステップ1-vsftpdをインストールします
最初のステップは、vsftpdをインストールすることです。
$ sudo apt update
$ sudo apt install vsftpd
次に、元の構成ファイルをバックアップして、新しい構成から開始できるようにする必要があります。
$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
ステップ2-ファイアウォールを構成する
このステップでは、FTPポートへのアクセスを許可するようにUFWファイアウォールを構成します。
まず、ファイアウォールの状態を確認しましょう。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
可能な限り、これまでに許可されているのはSSHポートのみです。 TLSを使用する場合はポート20(FTPコマンドポート)、21(FTPデータポート)、990を開き、将来必要になる可能性のあるパッシブポートの範囲にはポート35000〜40000を開きます。
$ sudo ufw allow 20:21/tcp
$ sudo ufw allow 990/tcp
$ sudo ufw allow 35000:40000/tcp
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
990/tcp ALLOW Anywhere
20:21/tcp ALLOW Anywhere
35000:40000/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
20:21/tcp (v6) ALLOW Anywhere (v6)
990/tcp (v6) ALLOW Anywhere (v6)
35000:40000/tcp (v6) ALLOW Anywhere (v6)
ステップ3-vsftpdを構成する
ここで、vsftpdが機能するために、いくつかの重要な設定について説明します。
構成ファイルを開くことから始めます。
$ sudo nano /etc/vsftpd.conf
1.FTPアクセス
このチュートリアルでは、ローカルユーザーにのみFTPアクセスを許可し、匿名アクセスを無効にします。 これを行うには、次の行が存在し、次のようになっていることを確認します。
anonymous_enable=NO
local_enable=YES
2.ファイルアップロードの有効化
ここでのFTPの唯一の最も重要な目的は、サーバーに書き込めることです。 次の行のコメントを解除して、ファイルのアップロードを有効にします。 #
その前に。
write_enable=YES
3. ChrootJail
FTPは、ユーザーが特定のディレクトリに制限されている場合に最適に機能します。 vsftpdは、chrootjailを使用してこれを実現します。 ローカルユーザーに対してchrootが有効になっている場合、デフォルトではホームディレクトリに制限されます。 これを実現するには、次の行のコメントを解除します。
chroot_local_user=YES
セキュリティの脆弱性を防ぐために、有効にした場合のchrootは、ユーザーが書き込み可能に制限されているディレクトリである限り機能しません。
この制限を回避するために、chrootが有効になっているときにファイルのアップロードを許可する2つの方法があります。
-
方法1 -この方法は、FTPアップロードに別のディレクトリを使用することで機能します。 このチュートリアルでは、
ftp
chrootとして機能するユーザーのホーム内のディレクトリと2番目の書き込み可能なディレクトリupload
ファイルをアップロードするため。 これを実現するには、ファイルの最後に次の行を追加します。user_sub_token=$USER local_root=/home/$USER/ftp
-
方法2 -2番目の方法は、ホームディレクトリ全体への書き込み可能なアクセスを許可することです。 これを実現するには、次の行を追加します。
allow_writeable_chroot=YES
4.パッシブFTP
vsftpdは、パッシブFTP接続に任意のポートを使用できます。 vsftpdが使用できる最小および最大ポート番号の範囲を指定できます。 これらは、以前にUFWファイアウォールで構成したポートです。
次の行を追加して、パッシブFTP接続を許可します。
pasv_min_port=35000
pasv_max_port=40000
5.ユーザーの制限
特定のユーザーのみがFTPサーバーにログインできるようにするには、下部に次の行を追加します。
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
このオプションを有効にすると、FTPの使用を許可するユーザーを指定し、ユーザー名をに追加する必要があります。 /etc/vsftpd.userlist
ファイル。
vsftpdを再起動して、構成を有効にします。
$ sudo systemctl restart vsftpd
ステップ4-ユーザーディレクトリの設定
このチュートリアルでは、FTPトランザクション用の新しいユーザーアカウントを作成します。 この目的のユーザーアカウントを既にお持ちの場合は、手順1をスキップできます。また、 allow_writeable_chroot=YES
前の構成ファイルでは、ステップ3をスキップできます。
ステップ1-新しいユーザーを追加します。
$ sudo adduser testuser
強力なパスワードを設定し、他のすべてのプロンプトをスキップします。
ステップ2-許可されたFTPユーザーリストにユーザーを追加します。
$ echo "testuser" | sudo tee -a /etc/vsftpd.userlist
ステップ3-FTPとファイルディレクトリを作成する
この手順は、FTPルートとして別のディレクトリと、chrootjailの制限を回避するためにファイルをアップロードするための別のディレクトリが必要な場合です。
FTPフォルダを作成します。
$ sudo mkdir /home/testuser/ftp
その所有権を設定します。広告
$ sudo chown nobody:nogroup /home/testuser/ftp
書き込み権限を削除します。
$ sudo chmod a-w /home/testuser/ftp
続行する前に、権限を確認してください。
$ sudo ls -al /home/testuser/ftp
total 8
dr-xr-xr-x 2 nobody nogroup 4096 Jun 7 13:08 .
drwxr-xr-x 3 testuser testuser 4096 Jun 7 13:08 ..
次に、ファイルの実際の書き込み可能なディレクトリを作成しましょう。
$ sudo mkdir /home/testuser/ftp/upload
$ sudo chown testuser:testuser /home/testuser/ftp/upload
権限をテストします。
$ sudo ls -al /home/testuser/ftp
total 12
dr-xr-xr-x 3 nobody nogroup 4096 Jun 7 13:10 .
drwxr-xr-x 3 testuser testuser 4096 Jun 7 13:08 ..
drwxr-xr-x 2 testuser testuser 4096 Jun 7 13:10 upload
最後に、を追加しましょう test.txt
テストに使用するファイル。
$ echo "vsftpd test file" | sudo tee /home/testuser/ftp/upload/test.txt
ステップ5-FTPアクセスをテストする
この時点で、FTPサーバーは完全に機能しています。 先に進む前に、少しテストを行うことができます。
匿名ユーザーとしてログインしてみましょう。
$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): anonymous
530 Permission denied.
ftp: Login failed.
ftp>
接続を閉じます。
ftp> bye
意図したとおりに機能します。つまり、匿名ユーザーは許可されません。
他のsudoユーザーと同じように接続してみましょう。 同様に接続するべきではありません。
$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): sudo_user
530 Permission denied.
ftp: Login failed.
ftp>
接続を閉じます。
ftp> bye
最後に接続してみましょう testuser
FTP用に作成しました。
$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): testuser
331 Please specify the password.
Password: your_user's_password
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
に切り替えましょう upload
ディレクトリを使用し、 get
テストファイルをローカルマシンに転送するコマンド。
ftp> cd upload
250 Directory successfully changed.
ftp> get test.txt
227 Entering Passive Mode (136,244,105,99,165,42).
150 Opening BINARY mode data connection for test.txt (17 bytes).
226 Transfer complete.
16 bytes received in 0.0101 seconds (164.3719 kB/s)
ftp>
次に、を使用して新しい名前でファイルをアップロードしましょう put
書き込み権限をテストするコマンド。
ftp> put test.txt upload.txt
227 Entering Passive Mode (136,244,105,99,163,102).
150 Ok to send data.
226 Transfer complete.
17 bytes sent in 0.000894 seconds (518.7988 kB/s)
接続を閉じます。
ftp> bye
ステップ6-SSL/TLSを使用した送信の保護
FTP送信を暗号化するには、SSL証明書を取得し、それを使用するようにvsftpdを構成する必要があります。
FTPサーバーを指すドメインまたはサブドメインがすでにある場合は、無料のLet’sEncryptSSL証明書を作成して使用できます。
チュートリアルでは、自己署名SSL証明書を使用します。 作成するには、 openssl
指図。
次のコマンドは、2048ビットの秘密鍵と1年間有効な証明書を作成します。 証明書とキーの両方が同じファイルに保存されます。
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
次のプロンプトをスキップするか、好みに応じて値を入力することができます。
証明書が作成されたので、vsftpd構成ファイルを再度開きます。
$ sudo nano /etc/vsftpd.conf
次の行を見つけて、次のようにそれらの前にハッシュを付けてコメントアウトします。
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ここで、次の行を追加します。
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
また、の値を変更します ssl_enable
に YES
。
ssl_enable=YES
SSLセキュリティを向上させるために、さらにいくつかの設定を追加しましょう。
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
これらの設定のほとんどは自明です。 これらは匿名ユーザーのSSLを無効にし、データ転送とログインの両方にSSLを要求します。 また、安全でないSSLプロトコルを無効にし、TLSv1.0に固執します。 そして最後に、SSLの再利用を無効にし、高暗号化暗号スイートを必要としています。
設定を有効にするためにサーバーを再起動します。
$ sudo systemctl restart vsftpd
これで、コマンドラインからFTPを使用できなくなります。 TLSをサポートするクライアントを使用して接続する必要があります。
ステップ7-FileZillaを使用したTLSのテスト
このチュートリアルでは、Filezillaを使用してTLS機能をテストします。
Filezillaを開いたら、単語のすぐ上にあるサイトマネージャーアイコンをクリックします ホスト 一番上の行。
新しいウィンドウが開きます。 クリック 新しいサイト 右下のボタン。
名前の付いた新しいアイコンが表示されます 新しいサイト。 を使用して名前を変更できます 名前を変更 ボタン。
[ホスト]フィールドにサーバーのIPアドレスを入力します。 FTPポートは21であるため、FTPのデフォルトポートであるため、 ポート フィールドが空です。[暗号化]オプションで、[TLSを介した明示的なFTPが必要 ドロップダウンメニューから。
FTPのユーザー名とパスワードを上記で作成したものと入力します。 クリック 接続 ボタンをクリックして続行します。
接続に成功すると、次のようなサーバー証明書が表示されます。
オプションを確認できます 今後のセッションでは、この証明書を常に信頼してください。 ログイン時に毎回質問されないようにします。をクリックします。 Ok 続行します。
これで、通常のFTP操作を実行できます。
ステップ8-シェルアクセスを無効にする
このステップは完全にオプションです。 デフォルトでは、FTPユーザーを作成するときに、明示的に指定されていない場合、ユーザーはサーバーへのSSHアクセスを持ちます。
セキュリティを向上させるために、FTPユーザーへのシェルアクセスを無効にする必要があります。 これを無効にするには、ユーザーアカウントがFTPアクセスのみに制限されていることを示すメッセージを出力する新しいシェルを作成する必要があります。
を作成します /bin/ftponly
シェルを作成して実行可能にします。
$ echo -e '#!/bin/shnecho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
$ sudo chmod a+x /bin/ftponly
新しいシェルを有効なシェルのリストに追加します /etc/shells
ファイル。
$ echo "/bin/ftponly" | sudo tee -a /etc/shells
ユーザーシェルをに変更します /bin/ftponly
。
$ sudo usermod newftpuser -s /bin/ftponly
同じコマンドを使用して、FTPアクセスを許可するすべてのユーザーのシェルを変更できます。
結論
これで、Ubuntu20.04ベースのサーバーにFTPサーバーをインストールするようにvsftpdをインストールして構成したチュートリアルは終了です。 また、SSL/TLSを使用して機能するようにFTP接続を構成しました。
ご不明な点がございましたら、下のコメント欄でお尋ねください。
The post Ubuntu20.04でSSL/TLSを使用してFTPサーバー(vsftpd)をインストールおよび構成する方法 appeared first on Gamingsym Japan.