FTP(ファイル転送プロトコル)は、リモートネットワークとの間でファイルを転送するために使用される標準のネットワークプロトコルです。より安全で高速なデータ転送を行うには、SCPorSFTPを使用してください。
Linuxで利用できるオープンソースのFTPサーバーはたくさんあります。最も人気があり、広く使用されているのは、PureFTPd、ProFTPD、vsftpdです。
このチュートリアルでは、Debian 9にvsftpd(Very Secure Ftp Daemon)をインストールして構成する方法について説明します。vsftpdは、安定した、安全で高速なFTPサーバーです。また、ユーザーをホームディレクトリに制限し、SSL/TLSを使用して送信全体を暗号化するようにvsftpdを構成する方法についても説明します。
前提条件#
としてログインしているユーザーは、パッケージをインストールするためにsudo権限を持っている必要があります。
Debian 9へのvsftpdのインストール#
vsftpdパッケージはDebianリポジトリで利用できます。インストールは非常に簡単です:
sudo apt update
sudo apt install vsftpd
vsftpdサービスは、インストールプロセスが完了すると自動的に開始されます。サービスステータスを印刷して確認します:
sudo systemctl status vsftpd
出力は次のようになり、vsftpdサービスがアクティブで実行されていることを示します。
● vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2018-12-10 11:42:51 UTC; 53s ago
Main PID: 1394 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─1394 /usr/sbin/vsftpd /etc/vsftpd.conf
vsftpdの構成#
vsftpdサーバーは、vsftpd.conf
を変更することで構成できます。 /etc
にあるファイル ディレクトリ。
ほとんどの設定は、構成ファイル内に十分に文書化されています。利用可能なすべてのオプションについては、公式のvsftpdpageにアクセスしてください。
次のセクションでは、安全なvsftpdインストールを構成するために必要ないくつかの重要な設定について説明します。
vsftpd構成ファイルを開くことから始めます:
sudo nano /etc/vsftpd.conf
1。 FTPアクセス#
anonymous_enable
を見つけます およびlocal_enable
ディレクティブを使用して、構成が以下の行と一致することを確認します。
anonymous_enable=NO
local_enable=YES
これにより、ローカルユーザーのみがFTPサーバーにアクセスできるようになります。
2。アップロードを有効にする#
write_enable
のコメントを解除します ファイルのアップロードや削除など、ファイルシステムへの変更を許可するように設定します。
write_enable=YES
3。 Chroot Jail#
FTPユーザーがホームディレクトリ外のファイルにアクセスできないようにするには、chroot
のコメントを解除します。 設定。
chroot_local_user=YES
デフォルトでは、セキュリティの脆弱性を防ぐために、chrootが有効になっている場合、ユーザーがロックされているディレクトリが書き込み可能である場合、vsftpdはファイルのアップロードを拒否します。
以下のいずれかの方法を使用して、chrootが有効になっているときにアップロードを許可します。
-
方法1。 -アップロードを許可するための推奨される方法は、chrootを有効にして、FTPディレクトリを設定することです。このチュートリアルでは、
/etc/vsftpd.confftp
を作成します chrootおよび書き込み可能なuploads
として機能するユーザーホーム内のディレクトリ ファイルをアップロードするためのディレクトリ。user_sub_token=$USER local_root=/home/$USER/ftp
-
方法2。 -別のオプションは、vsftpd構成ファイルに次のディレクティブを追加することです。ユーザーにホームディレクトリへの書き込み可能なアクセスを許可する必要がある場合は、このオプションを使用します。
/etc/vsftpd.confallow_writeable_chroot=YES
4。パッシブFTP接続#
vsftpdは、パッシブFTP接続に任意のポートを使用できます。ポートの最小範囲と最大範囲を指定し、後でファイアウォールで範囲を開きます。
構成ファイルに次の行を追加します。
/etc/vsftpd.confpasv_min_port=30000
pasv_max_port=31000
5。ユーザーログインの制限#
特定のユーザーのみがFTPサーバーにログインできるようにするには、ファイルの最後に次の行を追加します。
/etc/vsftpd.confuserlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
このオプションを有効にすると、ユーザー名を/etc/vsftpd.user_list
に追加して、ログインできるユーザーを明示的に指定する必要があります。 ファイル(1行に1人のユーザー)。
6。 SSL / TLSを使用した送信の保護#
FTP送信をSSL/TLSで暗号化するには、SSL証明書を取得し、それを使用するようにFTPサーバーを構成する必要があります。
信頼できる認証局によって署名された既存のSSL証明書を使用するか、自己署名証明書を作成できます。
FTPサーバーのIPアドレスを指すドメインまたはサブドメインがある場合は、無料のLet’sEncryptSSL証明書を簡単に生成できます。
このチュートリアルでは、openssl
を使用して自己署名SSL証明書を生成します コマンド。
次のコマンドは、10年間有効な2048ビットの秘密鍵と自己署名証明書を作成します。秘密鍵と証明書の両方が同じファイルに保存されます:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
SSL証明書が作成されたら、vsftpd構成ファイルを開きます。
sudo nano /etc/vsftpd.conf
rsa_cert_file
を見つけます およびrsa_private_key_file
ディレクティブ、値をpam
に変更します ファイルパスを設定し、ssl_enable
を設定します YES
へのディレクティブ :
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
特に指定がない限り、FTPサーバーはTLSのみを使用して安全な接続を確立します。
vsftpdサービスを再起動します#
編集が完了すると、vsftpd構成ファイル(コメントを除く)は次のようになります。
/etc/vsftpd.conflisten=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
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
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
ファイルを保存し、vsftpdサービスを再起動して、変更を有効にします。
sudo systemctl restart vsftpd
UFWファイアウォールを実行している場合は、FTPトラフィックを許可する必要があります。
ポート21
を開くには (FTPコマンドポート)、ポート20
(FTPデータポート)および30000-31000
(パッシブポート範囲)、次のコマンドを実行します:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
ロックアウトを回避するために、ポート22
も開きます。 :
sudo ufw allow OpenSSH
UFWを無効にしてから再度有効にして、UFWルールをリロードします。
sudo ufw disable
sudo ufw enable
変更を確認するには:
sudo ufw status
Status: active
To Action From
-- ------ ----
20:21/tcp ALLOW Anywhere
30000:31000/tcp ALLOW Anywhere
OpenSSH ALLOW Anywhere
20:21/tcp (v6) ALLOW Anywhere (v6)
30000:31000/tcp (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
FTPサーバーをテストするために、新しいユーザーを作成します。
- FTPアクセスを許可するユーザーが既にいる場合は、最初の手順をスキップしてください。
-
allow_writeable_chroot=YES
を設定した場合 構成ファイルで、3番目のステップをスキップします。
-
newftpuser
という名前の新しいユーザーを作成します :sudo adduser newftpuser
-
許可されたFTPユーザーリストにユーザーを追加します:
echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list
-
FTPディレクトリツリーを作成し、正しい権限を設定します:
sudo mkdir -p /home/newftpuser/ftp/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp
前のセクションで説明したように、ユーザーはファイルを
ftp/upload
にアップロードできます。 ディレクトリ。
この時点で、FTPサーバーは完全に機能しており、FileZillaなどのTLS暗号化を使用するように構成できるFTPクライアントを使用してサーバーに接続できるはずです。
シェルアクセスの無効化#
デフォルトでは、ユーザーを作成するときに、明示的に指定されていない場合、ユーザーはサーバーへのSSHアクセスを持ちます。
シェルアクセスを無効にするには、アカウントが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アクセスのみを許可するすべてのユーザーのシェルを変更します。