GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu20.04でSSL/TLSを使用してFTPサーバー(vsftpd)をインストールおよび構成する方法

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。 Chroot Jail

FTPは、ユーザーが特定のディレクトリに制限されている場合に最適に機能します。 vsftpdは、chrootjailを使用してこれを実現します。ローカルユーザーに対してchrootが有効になっている場合、デフォルトではホームディレクトリに制限されます。これを実現するには、次の行のコメントを解除します。

chroot_local_user=YES

セキュリティの脆弱性を防ぐために、有効にした場合のchrootは、ユーザーが書き込み可能に制限されているディレクトリである限り機能しません。

この制限を回避するために、chrootが有効になっているときにファイルのアップロードを許可する2つの方法があります。

  1. 方法1 -この方法は、FTPアップロードに別のディレクトリを使用することで機能します。このチュートリアルでは、ftpを作成します chrootとして機能するユーザーのホーム内のディレクトリと2番目の書き込み可能なディレクトリupload ファイルをアップロードするため。これを実現するには、ファイルの最後に次の行を追加します。

    user_sub_token=$USER
    local_root=/home/$USER/ftp
    
  2. 方法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ポートはFTPのデフォルトポートである21なので、ポートを離れることができます フィールドが空です。 [暗号化]オプションで、[TLSを介した明示的なFTPが必要]を選択します ドロップダウンメニューから。

FTPのユーザー名とパスワードを上記で作成したものと入力します。 接続をクリックします ボタンをクリックして続行します。

接続に成功すると、次のようなサーバー証明書が表示されます。

[今後のセッションでは常にこの証明書を信頼する]オプションをオンにすることができます。 ログイン時に毎回質問されないようにします。[OK]をクリックします 続行します。

これで、通常のFTP操作を実行できます。

ステップ8-シェルアクセスを無効にする

このステップは完全にオプションです。デフォルトでは、FTPユーザーを作成するときに、明示的に指定されていない場合、ユーザーはサーバーへのSSHアクセスを持ちます。

セキュリティを向上させるために、FTPユーザーへのシェルアクセスを無効にする必要があります。これを無効にするには、ユーザーアカウントがFTPアクセスのみに制限されていることを示すメッセージを出力する新しいシェルを作成する必要があります。

/bin/ftponlyを作成します シェルを作成して実行可能にします。

$ echo -e '#!/bin/sh\necho "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接続を構成しました。

ご不明な点がございましたら、下のコメント欄でお尋ねください。


Ubuntu
  1. VSFTPDを使用してCentOS7にFTPサーバーをインストールする方法

  2. vsftpd FTPサーバーをインストールし、Debian11でTLSを使用して保護する方法

  3. Ubuntu20.04にSSL/TLSを使用してVsftpdをインストールします

  1. vsftpdを使用してUbuntuにFTPサーバーをインストールする方法

  2. Ubuntu20.04にNFSサーバーをインストールして構成する方法

  3. Ubuntu20.04にVNCをインストールして構成する方法

  1. Ubuntu20.04でVSFTPDを使用してFTPサーバーをセットアップする方法

  2. Ubuntu18.04にVNCをインストールして構成する方法

  3. Ubuntu18.04でVSFTPDを使用してFTPサーバーをセットアップする方法