はじめに
FTPの通信をSSL/TLSで暗号化する、FTPSサーバーの Ubutn/CentOSでの設定方法です。
似たものに SFTP がありますが、SFTPではSSHを使用した転送となります。
SFTPサーバーの設定は、下記の記事を参照してください。
家庭用NASにSSHサーバ経由でsftpでアクセスできるようにする – パソコン鳥のブログ
本記事で説明している FTPSサーバーでは、FTPS接続時のディレクトリを chrootによって指定できます。また、設定(以降に記載の allow_writeable_chroot=YES)によって、chrootしたディレクトリ直下へも書き込みができます。
一方、SFTPサーバーでは、SFTP接続ユーザにルートとして見せるディレクトリは、所有者 root で書き込み権限も root のみにしないといけない制限があり、chrootしたディレクトリ直下へは書き込みできません。これは、SSHのchrootの制限のためです。
FTPSサーバーの設定
設定内容
本記事では、以下のように設定を行います。
- 接続ユーザーアカウントは、サーバー上のLinuxユーザーアカウントです。
後述の設定で、接続できるユーザーを指定できます。 - 接続ユーザーのディレクトリは、chrootによってユーザーのホームディレクトリがルートディレクトリになります。
ホームディレクトリより上位にアクセスする場合は、後述の設定が必要です。 - FTPSサーバーとしてパッシブモードが有効です。パッシブモードで利用するサーバーのポートは、40000~40030 とします。
基本的な設定
FTPSサーバーとしてvsftpdを使用します。
Ubuntuの場合
apt install vsftpd
CentOSの場合
yum install vsftpd
vsftpdの設定ファイルを以下のように修正します。
このファイルは、
Ubuntu:/etc/vsftpd.conf
CentOS:/etc/vsftpd/vsftpd.conf
です。
同じ設定項目がすでにあれば、以下の内容に変更してください。無い場合は、追加してください。
listen=YES
listen_ipv6=NO
write_enable=YES
chroot_local_user=YES
ls_recurse_enable=YES
userlist_enable=NO
anonymous_enable=NO
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/user_conf
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40030
ssl_enable=YES
ssl_ciphers=ssl_ciphers=kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 !SHA1 !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED !DES
rsa_cert_file=/etc/vsftpd/server.crt
rsa_private_key_file=/etc/vsftpd/server.key
rsa_cert_file 、rsa_private_key_file でサーバ証明書、サーバ用秘密鍵を指定します。
オレオレ証明書(自己署名証明書)を用いる場合は、次の記事で作成方法を参照してください。
CentOS6/CentOS7/Ubuntu14.04 でのサーバ証明書の作成方法 – パソコン鳥のブログ
ssl_ciphers の記述内容で、接続の際に使用する暗号化するプロトコルはTLSv2以上としています。個別に ssl_sslv2=NO 等の指定は不要です。
RedHat系(CentOSも)では、ssl_tlsv1_2=YES のように、ssl_tlsv1_1=、ssl_tlsv1_2= が使えますが、Ubuntuではそのオプションは無いので、上記のように ssl_ciphers の設定によって、暗号化するプロトコルがTLSv2以上になるようにしています。
必要なディレクトリを作成します。
mkdir -p /etc/vsftpd/user_conf
記述したら、vsftpdを起動します。
systemctl enable vsftpd
service vsftpd restart
接続できるユーザーの制限
FTPS接続できるユーザーを制限する場合は、vsftpdの設定ファイルを以下のようにします。
このファイルは、
Ubuntu:/etc/vsftpd.conf
CentOS:/etc/vsftpd/vsftpd.conf
です。
userlist_enable=YES
userlist_file=/etc/vsftpd/userlist
userlist_deny=NO
続けて、FTPS接続させるユーザーを /etc/vsftpd/userlist に、1行に1ユーザーで記述します。
vsftpdに反映させます。
service vsftpd reload
SSH接続の制限
本記事では、Linuxサーバー上のユーザーでFTPS接続可能にする設定ですが、FTPS接続だけ可能にし、SSH接続をさせたくない場合は、次の作業が必要です。
SSH接続をさせないユーザー名を指定して、次のコマンドを実行します。
ユーザーのログインシェルを、すぐ終了する nologin にすることで、ログインできなくします。
sudo usermod -s /usr/sbin/nologin ユーザー名
また、/etc/shells に次の行が無ければ追加します。
ユーザーのログインシェルが /etc/shells に記載が無いと、vsftpd で接続ができないので、下記を追加する必要があります。
/usr/sbin/nologin
接続時のルートディレクトリの指定
上記設定では、ホームディレクトリがルートディレクトリになります。
それ以外のディレクトリを指定する場合は、ここでの作業が必要です。
FTPS接続させるユーザーごとに、ファイル /etc/vsftpd/user_conf/ユーザー名 を作成します。
ファイルの内容は次のようにします。
ディレクトリ の箇所に、ルートディレクトリとなるディレクトリを指定します。
local_root=ディレクトリ
ファイアウォールの設定
FTPSサーバーのファイアウォールの設定を行います。
以下の値 40000、40030は、先の「基本的な設定」で、pasv_min_port、pasv_max_port に指定した値です。
Ubuntuでは、以下を実行します。
ufw allow ftp
ufw allow 40000:40030/tcp
CentOSでは以下を実行します。
firewall-cmd --add-service=ftp --permanent
firewall-cmd --add-port=40000-40030/tcp --permanent
firewall-cmd --reload
以上でサーバーの設定は完了です。
クライアント(WinSCP)の接続
設定したFTPSサーバーへ、WinSCPで接続する場合の設定です。
セッションの箇所で、「転送プロトコル」に “FTP”、「暗号化」に ”明示的なTLS/SSL” を指定します。
ユーザー名・パスワードは、FTPSサーバーの設定をしたLinuxサーバーのものを指定します。
ポーと番号は21のままにしてください。
また、上記画面で [設定] を押して、「高度なサイトの設定」を出します。
ここで、ダイアログ画面左のツリーで「環境」を選択し、「ファイル名を UTF-8 でエンコード」を “オン” にします。
ダイアログ画面左のツリーで「TLS/SSL」を選択し、「TLS/SSL の最小バージョン」を “TLS 1.2” にします。
以上が WinSCP の設定です。
参考
【vsftpd】FTPサーバーでchroot設定するとログイン出来なくなってしまう原因と対策 – 中堅プログラマーの備忘録
【CentOS7】vsftpdでパッシブモードのFTPサーバーを設定する – 中堅プログラマーの備忘録
CentOS7 の vsftpd でホームディレクトリ直下も書き込み可能にする – Ewig Leere(Lab2)
vsftpdでFTPユーザーごとのルートディレクトリを設定する方法 – DACELO SPACE
Linux の使い方: vsftpd でホームディレクトリより上を参照禁止にする (CentOS 5.4)
vsftpd で特定のアカウントに chroot を設定する
vsftpdで550 Permission denied.がでてファイルが書き込めなくてハマった件 » KUMA TYPE
【vsftpd】FTPをSSL/TLSで暗号化する設定 #vsftpd – Qiita
vsftpdでパッシブモードを設定する | ex1-lab
最近のnologinは/etc/shellsに含まれていない #RaspberryPi – Qiita
ftp – How to enable TLS 1.1 minimum on vsftpd – Server Fault
PowerProtect DPシリーズ アプライアンスおよび統合データ保護アプライアンス: セキュリティ脆弱性スキャンが検索で「TLS SSL弱MAC暗号スイート」を検出しました | Dell 日本
Pure-FTPd ufwによるFireWall設定とパッシブモードで使用するポート範囲の指定 – Symfoware
コメント