FTP(File Transfer Protocol)は、ユーザーがローカルクライアントとリモートサーバー間でファイルを転送できるようにするクライアントサーバーネットワークプロトコルです。
Linuxで利用できる多くのオープンソースFTPサーバーがあります。最も人気があり、頻繁に使用されるサーバーには、[PureFTPd](https://www.pureftpd.org/project/pure-ftpd)、[ProFTPD](http://www.proftpd.org/)、および[vsftpd](https://security.appspot.com/vsftpd.html)があります。
このガイドでは、CentOS 8にvsftpd(Very Secure Ftp Daemon)をインストールします。これは、安定した、安全で、高速なFTPサーバーです。ユーザーがホームディレクトリにアクセスできないようにvsftpdを構成し、SSL / TLSを使用してデータ送信を暗号化する方法を示します。
vsftpdパッケージは、デフォルトのCentOSソースリポジトリで利用できます。これをインストールするには、rootまたはsudo権限を持つ別のユーザーとして次のコマンドを実行します。
sudo dnf install vsftpd
パッケージがインストールされたら、vsftpdデーモンを起動し、起動時に自動起動を有効にします。
sudo systemctl enable vsftpd --now
サーバーのステータスを確認します。
sudo systemctl status vsftpd
出力は次のようになり、vsftpdサービスがアクティブ化されて実行されていることを示しています。
● vsftpd.service - Vsftpd ftp daemon
Loaded:loaded(/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active:active(running) since Mon 2020-03-3015:16:51 EDT; 10s ago
Process:2880 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf(code=exited, status=0/SUCCESS)...
vsftpd設定は、 / etc / vsftpd / vsftpd.conf
構成ファイルに保存されます。ファイル内のほとんどの設定は、ドキュメントで詳しく説明されています。すべてのオプションを表示するには、[vsftpd公式Webサイトページ](http://vsftpd.beasts.org/vsftpd_conf.html)を参照してください。
次の章では、vsftpdセキュリティの構成に関連するいくつかの重要な設定について説明します。
vsftpd構成ファイルを開きます。
sudo nano /etc/vsftpd/vsftpd.conf
ローカルユーザーにのみFTPサーバーへのアクセスを許可し、 anonymous_enable
および local_enable
ディレクティブを見つけて、構成が次のようになっていることを確認します。
anonymous_enable=NO
local_enable=YES
write_enable
のコメントを解除して、ファイルのアップロードや削除などのファイルシステムの変更を許可します。
write_enable=YES
chroot
コマンドのコメントを解除することにより、FTPユーザーはホームディレクトリ外のファイルにアクセスできなくなります。
chroot_local_user=YES
デフォルトでは、chrootが有効になっている場合、ユーザーがフォルダーへの書き込みを許可されていない場合、vsftpdはユーザーがそのディレクトリにファイルをアップロードすることを拒否します。これはセキュリティの問題を防ぐためです。
chroot
が有効になっている場合は、次のいずれかの方法を使用してアップロードを許可します。
ftp
ディレクトリを作成します。このディレクトリは、ファイルをアップロードするためのchrootおよび書き込み可能な uploads
ディレクトリとして機能します。user_sub_token=$USER
local_root=/home/$USER/ftp
allow_writeable_chroot=YES
vsftpdは、FTPパッシブモードが接続する任意のポートを使用できます。最小ポートと最大ポートを指示し、後でこのポート範囲をファイアウォールで開きます。
構成ファイルに次の行を追加します。
pasv_min_port=30000
pasv_max_port=31000
指定したユーザーがFTPサーバーにログインできるようにするには、 userlist_enable = YES
の行の下に次の構成を追加します。
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
このオプションを有効にした場合、ユーザー名を / etc / vsftpd / user_list
(1行に1人のユーザー)に追加して、ログインできるユーザーを明示的に指定する必要があります。
SSL / TLS暗号化FTP送信を使用するには、[SSL証明書](https://cloud.tencent.com/product/symantecssl?from=10680)が必要であり、それを使用するようにFTPサーバーを構成します。
信頼できる証明書機関によって発行されたSSL証明書を使用するか、自作の証明書を作成できます。
FTPサーバーのパブリックIPアドレスをドメイン名またはサブドメインで指定すると、無料のLet's EncryptSSL証明書を簡単に生成できます。
このガイドでは、 openssl
を使用して自己署名SSL証明書を生成します。
次のコマンドは、2048ビットの秘密鍵と10年の有効期間を持つ自己署名証明書を作成します。秘密鍵と証明書の両方が同じファイルに保存されます。
sudo openssl req -x509 -nodes -days 3650-newkey rsa:2048-keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
SSL証明書が作成されたら、vsftpd構成ファイルを開きます。
sudo nano /etc/vsftpd/vsftpd.conf
rsa_cert_file
コマンドと rsa_private_key_file
コマンドを見つけ、それらの値を pam
ファイルパスに変更し、 ssl_enable
コマンドを YES
に設定します。
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
他に指定されていない場合、FTPサーバーは安全な接続にのみTLSを使用します。
編集が完了すると、vsftpd構成ファイル / etc / vsftpd / vsftpd.conf
(コメントを除く)は次のようになります。
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES
ファイルを保存し、vsftpdサービスを再起動して、変更を有効にします。
sudo systemctl restart vsftpd
FTPサーバーを実行している場合は、ファイアウォールを通過するFTPトラフィックを許可する必要があります。
ファイアウォールで 21
ポート(FTPコマンドポート)、 20
ポート(FTPデータポート)、および 30000-31000
(パッシブモードポート範囲)を開き、次のコマンドを入力します。
sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
次のコマンドを入力して、ファイアウォールルールを再読み込みします。
firewall-cmd --reload
FTPサーバーをテストするには、新しいユーザーを作成する必要があります。
allow_writeable_chroot = YES
を設定した場合は、3番目の部分をスキップしてください。newftpuser
という名前の新しいユーザーを作成します。sudo adduser newftpuser
次に、ユーザーパスワードを設定する必要があります。
sudo passwd newftpuser
echo "newftpuser"| sudo tee -a /etc/vsftpd/user_list
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](https://filezilla-project.org/)などのTLS暗号化を構成できる任意のFTPクライアントを使用して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経由でのみアクセスするように制限します。
CentOS8に安全で高速なFTPサーバーをインストールして構成する方法を説明しました。
より安全で高速なデータ転送を行うには、 SCP
または SFTP
を使用する必要があります。
Recommended Posts