今回はvsftpdを使ってFTPサーバを構築する手順です。
頻繁にデータをアップロードしたりダウンロードしたりしなければ不要ですが、あるとやっぱり便利ですよね。
FTPにアクセスするユーザ名は【hoge】
FTPサーバのFQDNは【ftp.jdbc.tokyo】
で説明します。
まず、FTPサーバ用のサーバ証明書を用意します。
証明書を作成するディレクトリを作成・移動し、適当なファイルを作成します。
1 2 3 4 |
cd /etc/pki/tls/certs/ mkdir ftp.jdbc.tokyo cd ftp.jdbc.tokyo/ vi rand.txt |
1 2 3 4 |
5323uauawur398urouoprkroapkkopkOP`KOPRKPr09q0-q akoporka094k20@4ke2ak@ati@3i@t3oia4t3 takw309kt0a309t3kwtkiaopwktpkotwa3poktwap こんなかんじで、ファイルの中身は適当でOKです |
3DESで2048bitの秘密鍵を作成します。パスフレーズ
1 2 3 4 5 6 |
openssl genrsa -rand rand.txt -des3 2048 > private.key Enter pass phrase: ## 秘密鍵のパスフレーズを入力 Verifying - Enter pass phrase: ## 再入力 openssl rsa -in private.key -out private.key Enter pass phrase: ## 秘密鍵のパスフレーズを入力してパスフレーズを削除 |
続いて自己証明書を作成します。
1 2 3 4 5 6 7 8 |
openssl req -new -x509 -days 3650 -key private.key -out self.crt Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]:Chuo-ku Organization Name (eg, company) [Default Company Ltd]:jdbc.tokyo Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:ftp.jdbc.tokyo Email Address []: |
最低限Common Nameだけは正確に入力してください。
ここまでは普通の自己証明書ですが、vsftpdにサーバ証明書を設定する場合は鍵と証明書のペアが1つのファイルに記載されている必要があります。
なので両ファイルをまとめたファイルを作りましょう。 ついでにパーミッションも直します。
1 2 |
cat private.key self.crt > self.pem chmod 400 ./* |
ここまできたらいよいよvsftpdをインストールします。
1 |
yum install vsftpd |
んでvsftpdの設定。
1 |
vi /etc/vsftpd/vsftpd.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# ----- 以下は変更またはコメント解除する項目 ----- # anonymousログインを禁止する anonymous_enable=NO # ログの場所を指定する xferlog_file=/var/log/vsftpd.log # ASCIIモードをONにする。プラットフォームにより異なる改行コードをきちんと変換してくれる機能らしい ascii_upload_enable=YES ascii_download_enable=YES # 一般ユーザを親ディレクトリに移動させないようにします chroot_local_user=YES # 親ディレクトリに移動できる例外ユーザを作る chroot_list_enable=YES # 親ディレクトリに移動できるユーザを指定するファイル chroot_list_file=/etc/vsftpd/chroot_list # ディレクトリごとに削除できる ls_recurse_enable=YES # IPv6環境なら下記デフォルトのままで良いが、IPv4で運用している環境なら変更必須 listen=YES listen_ipv6=NO # ----- 以下は追記する項目 ----- # Passiveモードを有効にして、外部ネットワークからアップロードできるようにする pasv_enable=YES # Passiveモードでホスト名(またはIPでもOK)を通知する pasv_addr_resolve=YES pasv_address=ftp.jdbc.tokyo # Passiveモード接続時のポートを4000-4029に設定 pasv_min_port=4000 pasv_max_port=4029 # ローカルタイムを有効にしてJSTで動くようにします use_localtime=YES # SSLを有効にする ssl_enable=YES # 先ほど作成した鍵+証明書のペアのファイルを指定 rsa_cert_file=/etc/pki/tls/certs/ftp.jdbc.tokyo/self.pem # SSLの利用を強制する force_local_logins_ssl=YES force_local_data_ssl=YES # 暗号スイートの変更(15/11/11追記 FileZillaだとデフォルトの暗号スイートでネゴれなかった) ssl_ciphers=HIGH # "."つきの隠しファイルも表示する force_dot_files=YES # FTPログイン後のホームディレクトリをユーザ毎に設定するファイル user_config_dir=/etc/vsftpd/user_conf |
FTPログイン後のホームディレクトリを設定するファイルを作成します。
(今回はログイン後のディレクトリを/var/www/htmlにする例です)
1 2 |
mkdir /etc/vsftpd/user_conf vi /etc/vsftpd/user_conf/hoge |
1 |
local_root=/var/www/html |
次に、親ディレクトリに移動可能なユーザを作成する場合は下記ファイルにユーザを追記します。
1 |
echo hoge >> /etc/vsftpd/chroot_list |
あとはポートを開放してサービス自動起動の設定をすれば完了です!
1 2 3 4 |
systemctl start vsftpd.service systemctl enable vsftpd.service firewall-cmd --zone=public --add-service=ftp --permanent firewall-cmd --reload |
設定はこれで完了なので、あとはお好きなFTPクライアントから接続を試してみてください。
お使いのルータの種類によっては、PASVポートを動的に開放してくれないものもあります。
FTPログインはできたけどデータのアップロードができない。という状況の場合は、その可能性が高いですね。
そうなってしまったら仕方ないのでPassvive通信用ポートも開けてくださいまし。
1 2 |
firewall-cmd --zone=public --add-port=4000-4029/tcp --permanent firewall-cmd --reload |
お疲れ様でした!