vsftpdとは
vsftpdとは、LinuxなどUnix系でよく利用されるftpサーバーです。 UbuntuやCentOSなどで標準のftpサーバーとなっています。
データを暗号化して通信するプロトコルftpsに対応し、パーミッションにかなり厳密な硬派なソフトウェアといった印象です。設定ファイルは逆にものすごく単純な記法で書きやすいです。
環境
- Alima Linux 8.7 (RHEL系)
- vsftpd 3.0.3
また、利用するftpクライアントはlftpを想定しています。起動して動作確認する、などの内容ではlftpの方法で記述します。
起動させるまで
インストール
最初から入っている方が多いかもしれません。
dnf -y install vsftpd
起動
まずは起動できるかを一応確認しましょう。
systemctl start vsftpd
設定
基本
設定ファイルは基本的に/etc/vsftpd/
にあります。
メインの編集ファイルは/etc/vsftpd/vsftpd.conf
です。
設定ファイルを見ていただけるとわかると思いますが、設定は基本的に
設定項目=YES or NO or value
といった形になっています。なので、各項目が何を意味しているのか考えながら設定すると理解しやすいです。
匿名アカウントの無効化
匿名アカウントでの利用を許可しない設定です。基本的にユーザーを用意するなどして利用すると思われるので無効化します。
anonymous_enable=NO
ローカルユーザーで認証する
文字通りローカル(vsftpdが起動しているサーバー)のユーザーで認証するためにYESにします。
local_enable=YES
また、今の設定だと、/etc/vsftpd/user_list
に追加されているユーザーにはログインできないようになります。最低限rootは追加しておきましょう。
putを許可
ftpでサーバーに書き込めるようにする
write_enable=YES ascii_upload_enable=YES ascii_download_enable=YES
ログインバナーを変え、バージョンを隠す
バージョンを隠すことで脆弱性に少し強くなります。
ftpd_banner=Welcome message. seccomp_sandbox=NO
起動確認
一度ここで起動確認しましょう。最後にSSL関連をやりますが、ここまでで動かないと確実に動かないです。 ここでは、ftp-userというユーザーにログインする想定で記述していきます。
lftp ftp-user@127.0.0.1 # ↑ # vsftpdが起動している端末のIP or URL
このようになると、ログインまでは成功です!しかし、コマンドを打つとエラーになることもあるので、lsコマンドも打っておきましょう。
SSL設定
ここでは、サーバー 証明書と対応した秘密鍵が必要になります。購入したものや、Let’s Encryptで取得するなど方法は複数がありますが、今回は自己証明書で行きます。Webサーバーなどで利用しているものがあればそれでも大丈夫です。
証明書,秘密鍵発行
sudo openssl genrsa -aes256 2048 > vsftpd.key sudo openssl req -new -key vsftpd.key -x509 -days 365 -out vsftpd.pem mv vsftpd.key vsftpd.key.bak sudo openssl rsa -in vsftpd.key.bak -out vsftpd.key sudo sudo chown root:root vsftpd.pem vsftpd.key sudo mv vsftpd.key /etc/pki/tls/private/ sudo mv vsftpd.pem /etc/pki/tls/certs/
以上で、自分で署名した証明書と秘密鍵が手に入ります。一応しきたりに従って/etc/pki/tls/*/
に置いてますが、特に場所はあまり関係ないので/etc
のどこかに置きましょう。
途中キーフレーズの追加や削除を行なっています。これは、証明書の発行にキーフレーズを入力するためです。一連の操作で一つの文字列を使ってください。
vsftpd.confの編集
#SSL ssl_enable=YES ssl_sslv2=NO ssl_sslv3=NO ssl_tlsv1=NO ssl_tlsv1_1=YES ssl_tlsv1_2=YES ssl_ciphers=ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES128-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-AES256-CCM8:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8:!EXP force_local_data_ssl=YES force_local_logins_ssl=YES rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem rsa_private_key_file=/etc/pki/tls/private/vsftpd.key
この設定では、SSL2,SSL3,TLS1.0を無効化しています。
また、使用される暗号についても、強度が強いものが選択されるようにしています。
また、force_local_data_ssl
で、ftps通信を必須としています。
最後の二行で、証明書と鍵を指定しています。
再起動して接続確認
systemctl restart vsftpd
で確認しましょう。
自己証明書なので、危険とでますが、ftpsで接続可能です。これら証明書と秘密鍵をちゃんとしたものに変えると、完全なftpsで通信できます。