FTPは、ファイル転送プロトコルの頭文字であり、特定のコンピューターネットワーク内のコンピューターとサーバー間でファイルを転送するために使用されます。 FTPプロトコルは安全でないデータ転送方法を使用するため、信頼できるネットワークに限定する必要があります。代わりに、両端間でSSLセキュア接続を使用するFTPS(SSLを使用したファイル転送プロトコル)またはSFTP(SSHファイル転送プロトコル/セキュアファイル転送プロトコル)を使用する必要があります。
このチュートリアルでは、Ubuntu18.04でSSL/ TLSを使用してセキュリティで保護されたvsftpdサーバーを構成し、ターミナルとGUIツールを使用してサーバーに接続する方法の詳細な手順を説明します。
VSFTPDサーバーのインストール
LinuxではいくつかのFTPサーバーを利用できます。 vsftpをインストールします。 Ubuntu 18.04でこれを行うには、ターミナルで次のコマンドを入力します。
sudo apt install vsftpd
vsftpdがインストールされると、そのデフォルトの設定ファイルは/etc/vsftpd.confにあります。そのファイルを変更してカスタム構成をテストするには、最初にこのファイルのバックアップを作成します。これを行うには、次のコマンドを実行できます:
sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
次に、次のコマンドを使用してvsftpd.confファイルを作成します。
sudo vim /etc/vsftpd.conf
次の行をファイルに追加します:vsftpsft
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=11000
user_sub_token=$USER
local_root=/home/$USER/ftp
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
これらは最も一般的に使用される構成であり、必要に応じて自由に変更できることに注意してください。
Ubuntu 18.04には、ufw(Uncomplicated Firewall)がプリインストールされて有効になっています。次のコマンドを使用して、ufwがマシンで実行されているかどうかを確認できます。
sudo service ufw status
実行中で、実行したままにする場合は、FTPポートへの着信トラフィックを許可する必要があります(アクティブ接続の場合は20,21、パッシブ接続の場合は10000-10100)。これを行うには、次のコマンドを実行できます:
sudo ufw allow from any to any port 20,21,10000:11000 proto tcp
成功すると、出力は次のようになります。
Rules updated
Rules updated (v6)
このすべての手順が完了したら、次のコマンドを使用してvsftpdサーバーを再起動する必要があります。
sudo service vsftpd restart
FTPサーバーに接続するためのユーザーの作成
必要に応じてvsftpサーバーをインストールして構成したら、ftpサーバーに接続するためのユーザー(ftpsuerなど)を作成する必要はありません。これを行うには、次のコマンドを実行できます:
sudo useradd -m ftpuser
以下のコマンドを使用して、新しく作成したユーザーのパスワードを作成します。
sudo passwd ftpuser
新しいUNIXパスワードを入力するように求められたら、変更を適用するためにパスワードを再入力します。成功した出力は次のようになります:
passwd: password updated successfully
FTPユーザーディレクトリを準備する
FTP接続を保護するために実行する必要がある最も重要なアクションの1つは、ユーザーをホームディレクトリに制限して、他のディレクトリにまったくアクセスできないようにすることです。 vsftpdでこれを行うには、構成ファイルでchrootを有効にする必要があります。これは、記事の構成部分ですでに行っています(chroot_local_user=YES
)。 vsftpdのディレクトリセキュリティの方法は、ユーザーがそれに書き込みアクセス権を持っていないことを前提としています。ただし、既存のユーザーにFTPアクセスを許可していて、サーバーを使用するためにシェルを使用している場合は、ホームフォルダーへの書き込みアクセス権が必要になる場合があります。セキュリティ不足を回避し、ユーザーに適切なFTPアクセスを提供するために、ユーザーのホームディレクトリにftpフォルダーを作成し、FTP経由で接続するときにローカルルートとしてvsftpd構成に追加します。また、ディレクトリの所有権を変更し、書き込みアクセスを削除する必要があります。これを行うには、次のコマンドを実行できます:
sudo mkdir /home/ftpuser/ftp
sudo chown nobody:nogroup /home/ftpuser/ftp
sudo chmod a-w /home/ftpuser/ftp
次に、vsftpd構成ファイル/etc/vsftpd.conf
に次の行を追加/変更します。
user_sub_token=$USER
local_root=/home/$USER/ftp
これらの手順が完了したら、/home/ftpuser/ftp
に別のフォルダーを作成する必要があります。 所有権をユーザーに割り当てます
sudo mkdir /home/ftpuser/ftp/files
sudo chown ftpuser:ftpuser/home/ftpuser/ftp/files
FTPサーバーに接続した後、ユーザーのホームディレクトリにあるファイルを表示できることをテストするために、そのディレクトリにテストファイルを作成し、そこにテキストを追加します。これを行うには、次のコマンドを実行できます:
echo "test file for vsftpd" | sudo tee /home/ftpuser/ftp/files/test.txt
特定のユーザーによるvsftpdへのアクセスを許可または拒否するには、userlistファイルを使用して、vsftpd構成ファイルに適切なレコードを追加します。これを行うには、次を実行できます:
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
userlist_denyがNOに設定されている場合、ファイルに追加されたユーザーのみがFTPサーバーにアクセスでき、YESに設定されている場合、ファイルにリストされているユーザーはFTPサーバーにアクセスできず、他のユーザーはアクセスできます。以下のコマンドを使用して、上記のファイルにユーザー名を追加します。
echo "ftpuser" | sudo tee -a /etc/vsftpd.userlist
VSFTPD用にSSLを構成する
FTP経由で転送されるデータ(資格情報も)は暗号化されていないため、TLS / SSLを有効にして、FTPサーバーに別のレベルのセキュリティを提供できます。 opensslを使用して証明書を作成するには、次のコマンドを実行します。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
ここで、-days 365は、1年間の証明書を追加し、-out、-keyoutフラグに同じ値を追加して、秘密鍵と証明書を同じファイルに配置するためのものです。以下に示すように、証明書を作成するために必要なすべての情報を追加するように求められます。
Generating a 2048 bit RSA private key
.................+++
..............................................................................................+++
writing new private key to '/etc/ssl/private/vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:AU
State or Province Name (full name) [Some-State]:SY
Locality Name (eg, city) []:Sydney
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:ubuntu
Email Address []:[email protected]
証明書が作成されたら、それをvsftpd構成ファイルに追加し、SSLを有効にする必要があります。これを行うには、上記のファイルに次の行を追加します。
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
SSLを介した匿名接続を拒否し、データ転送とログインにSSLを要求する必要があった後。これを行うには、次の行を/etc/vsftpd.conf
に追加します。 ファイル:
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
上記の行が追加されたら、SSLの後継であるTLSを使用するようにサーバーを構成します。これを行うには、同じファイルに次の行を追加します。
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
すべての手順を実行すると、vsftpd構成ファイルは次のようになります。
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=11000
user_sub_token=$USER
local_root=/home/$USER/ftp
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
vsftpdの構成ファイルを変更した後、次のコマンドでサービスを再起動する必要があります。
sudo service vsftpd restart
sftpにletsencrypt証明書を使用するようにvsftpdを構成することもできますが、検証するドメインがあることを確認してください。 sslcertとprivateがキーに保存されているvsftpd構成にパス変数を追加できます。
rsa_cert_file=/ssl/letsencrypt/ftpdomain.com/chain-bundle.pem
rsa_private_key_file=/ssl/letsencrypt/ftpdomain.com/private-key.pem
FTPサーバーへの接続
FTPサーバーに接続する方法は2つあります。
- 端末を使用する
- GUIでFTPクライアントを使用する
端末を使用して接続
コマンドラインからftpサーバーに接続するには、ターミナルで次のコマンドを入力します。
ftp ubuntu
ubuntu
の場所 ftpサーバーがインストールされているマシンのホスト名です。接続しようとしているマシンから、そのホスト名を介してftpサーバーマシンにアクセスできることを確認してください。
接続後、ftpサーバーに接続するためのユーザー名とパスワードを入力するように求められます:
Connected to ubuntu.
220 (vsFTPd 3.0.3)
Name (ubuntu:ubuntu): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ls
と入力します 作成前のテストファイルが存在するかどうかを確認するには:
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 1001 1001 4096 May 21 13:39 files
226 Directory send OK.
GUIを備えたFTPクライアントを使用して接続する
LinuxにインストールされているFTPサーバーに接続するためにFilezillaを使用します。これを行うには、マシンでFilezillaクライアントを開き、FTPサーバーのIPアドレス、ftpuserクレデンシャルを入力して接続し、下のスクリーンショットに示すように接続ボタンを押します。証明書をtrustedに追加するように求められます。その後、FTPサーバーに接続できるようになります。
接続すると、test.txt
が表示されます。 以前に作成したものがあります。
関連記事:
- Ubuntu18.04でMySecureShellSFTPサーバーをセットアップする方法
- Debian9StretchにProFTPDをインストールしてセットアップする5つのステップ
- 例を使用してファイルを管理するための12のlftpコマンド
この記事からわかるように、vsftpdサーバーのインストールと接続は非常に簡単で、いくつかの手順で実行できます。ここでの主なポイントは、ユーザーをホームディレクトリにchrootしたり、匿名ログインを無効にしたり、ローカルのumaskとユーザーの読み取りおよび書き込み権限を追加したりするなど、構成ファイルを介してftpサーバーを保護することです。