FTPサーバー構築(vsftpd)

最終更新日: 2014.02.19

<<トップページ <<新着情報 <<サイト内検索 <<CentOSで自宅サーバー構築 <<Scientific Linuxで自宅サーバー構築

■概要

Webサーバーへのファイル転送用にFTPサーバーを構築する。
ここでは、Fedora標準のFTPサーバーであるvsftpdを採用する。
なお、ユーザ名、パスワード、CGI等に書かれたパスワード情報等の盗聴による不正入手対策として、SSLによる暗号化通信を行えるようにする。
また、管理者ユーザ以外は自身のホームディレクトリより上層へはアクセスできないようにする。


■vsftpdインストール

[root@fedora~]# yum -y install vsftpd ← vsftpdインストール

■vsftpd設定

(1)vsftpd設定
[root@fedora~]# vi /etc/vsftpd/vsftpd.conf ← vsftpd設定ファイル編集
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO ← anonymousユーザ(匿名ユーザ)のログイン禁止

# Uncomment this to allow local users to log in.
local_enable=YES ← ローカルユーザのアクセス許可

# Uncomment this to enable any form of FTP write command.
write_enable=YES ← 行頭の#を削除してコメント解除(書き込みを許可)

# Activate logging of uploads/downloads.
xferlog_enable=YES ← /var/log/vsftpd.logに接続・転送を記録(1/3)

# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log ← /var/log/vsftpd.logに接続・転送を記録(2/3)

# If you want, you can have your log file in standard ftpd xferlog format
xferlog_std_format=NO ← /var/log/vsftpd.logに接続・転送を記録(3/3)

# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES ← アスキーモードでのアップロードを許可
ascii_download_enable=YES ← アスキーモードでのダウンロードを許可

# You may fully customise the login banner string:
ftpd_banner=Welcome to blah FTP service. ← FTPログイン時にソフト名とバージョンが表示されないようにする

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_local_user=YES ← デフォルトでホームディレクトリより上層へのアクセスを禁止する
chroot_list_enable=YES ← ホームディレクトリより上層へのアクセスを許可するユーザのリストの有効化
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list ← ホームディレクトリより上層へのアクセスを許可するユーザのリスト

# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
ls_recurse_enable=YES ← ディレクトリごと削除できるようにする

以下を最下行へ追加
use_localtime=YES ← タイムスタンプ時間を日本時間にする
pasv_addr_resolve=YES ← PASVモード接続先IPアドレスをホスト名から取得する
pasv_address=fedorasrv.dip.jp ← PASVモード接続先IPアドレスが牽けるホスト名※
pasv_min_port=60000 ← PASVモード接続時の最小ポート番号
pasv_max_port=60030 ← PASVモード接続時の最大ポート番号
ssl_enable=YES ← SSLの有効化
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem ← サーバー証明書を指定
require_ssl_reuse=NO
force_local_logins_ssl=NO ← ログイン時にSSL接続を強制しない※暗号化しない接続もできるようにする場合のみ
force_local_data_ssl=NO ← データ転送時にSSL接続を強制しない※暗号化しない接続もできるようにする場合のみ
※pasv_addressには、サーバーのグローバルIPアドレスが牽けるホスト名を指定する。なお、DNSサーバーを導入して内部からの名前解決時にプライベートIPアドレスに変換してしまっている場合は、新たにドメインを取得し、DNSサーバーに設定しないようにして、取得したドメイン名をpasv_addressに指定する。

(2)ホームディレクトリより上層へのアクセスを許可するユーザの登録
[root@fedora~]# touch /etc/vsftpd/chroot_list
 ← ホームディレクトリより上層へのアクセスを許可するユーザのリストを作成※対象ユーザが存在しなくても作成必須

[root@fedora~]# echo fedora >> /etc/vsftpd/chroot_list
 ← 例としてユーザfedoraによるホームディレクトリより上層へのアクセスを許可する場合
※管理者や、自身のホームディレクトリ以外へアクセスできるようにしておく必要があるユーザのみ登録しておく

(3)ホームディレクトリより上層へのアクセスができないユーザのタイムスタンプを日本時間にする
【新規ユーザ対処】
[root@fedora~]# mkdir /etc/skel/etc ← ユーザ登録時にホームディレクトリへetcディレクトリが作成されるようにする

[root@fedora~]# cp /etc/localtime /etc/skel/etc/
 ← ユーザ登録時に/etc/localtimeがホームディレクトリのetcディレクトリへコピーされるようにする

【既存ユーザ対処】
[root@fedora~]# vi localtimset ← localtimeセットアップスクリプト作成
#!/bin/bash

for user in `ls /home`
do
   id $user > /dev/null 2>&1
   if [ $? -eq 0 ]; then
        grep $user /etc/vsftpd/chroot_list > /dev/null 2>&1
        if [ $? -ne 0 ] && [ ! -f /home/$user/etc/localtime ]; then
            mkdir -p /home/$user/etc
            cp /etc/localtime /home/$user/etc
            echo $user
        fi
   fi
done

[root@fedora~]# sh localtimset ← localtimeセットアップスクリプト実行
user1
・
・
・
usern

[root@fedora~]# rm -f localtimset ← localtimeセットアップスクリプト削除

(4)FTPサーバーへのアクセスを禁止するユーザの登録
[root@fedora~]# echo fedora >> /etc/vsftpd/ftpusers
 ← 例としてユーザfedoraによるFTPサーバーへのアクセスを禁止する場合

(5)サーバー証明書作成
[root@fedora~]# cd /etc/pki/tls/certs/ ← ディレクトリ移動

[root@fedora certs]# make vsftpd.pem ← サーバー証明書作成
umask 77 ; \
PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
/usr/bin/openssl req -utf8 -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 -set_serial 0 ; \
cat $PEM1 >  vsftpd.pem ; \
echo ""    >> vsftpd.pem ; \
cat $PEM2 >> vsftpd.pem ; \
rm -f $PEM1 $PEM2
Generating a 1024 bit RSA private key
.................................++++++
................................++++++
writing new private key to '/tmp/openssl.OH7090'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP ← 国名応答
State or Province Name (full name) [Berkshire]:Tokyo ← 都道府県名応答
Locality Name (eg, city) [Newbury]:Shinjuku ← 市区町村名応答
Organization Name (eg, company) [My Company Ltd]:fedorasrv.com ← サイト名応答(なんでもいい)
Organizational Unit Name (eg, section) []: ← 空ENTER
Common Name (eg, your name or your server's hostname) []:ftp.fedorasrv.com ← ホスト名応答
Email Address []:root@fedorasrv.com ← 管理者メールアドレス応答

[root@fedora certs]# cd ← ホームディレクトリへ戻る

■vsftpd起動

(1)vsftpd起動
[root@fedora~]# /etc/rc.d/init.d/vsftpd start ← vsftpd起動
vsftpd 用の vsftpd を起動中:                               [  OK  ]

[root@fedora~]# chkconfig vsftpd on ← vsftpd自動起動設定

[root@fedora~]# chkconfig --list vsftpd ← vsftpd自動起動設定確認
vsftpd          0:off   1:off   2:on    3:on    4:on    5:on    6:off ← ランレベル2〜5のon確認

(2)ポート21番のOPEN
ルーター側の設定でポート21番をOPENする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

ポートチェック【外部からポート開放確認】で「host名」にサーバー名(例:fedorasrv.com)、「port番号」に21と入力して「ポートチェック」ボタン押下し、「ホスト=fedorasrv.com ポート=21 にアクセスできました。」と表示されることを確認。

(3)PASV接続用ポートのOPEN
ルーター側の設定でPASV接続用ポート(60000〜60030)をOPENする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

■SSL対応FTPクライアント導入

WindowsからFTPサーバーへ接続(FileZilla)参照
※FileZillaはSFTP接続にも対応しており、SFTPで接続するとFTPサーバーのchroot機能が働かない=ログインユーザー自身のホームディレクトリ以外も参照できてしまうため、SSHサーバーのchroot設定も行なっておくこと

■アクセス制限

vsftpdへアクセスできるホストを制限する。
[root@fedora~]# echo "vsftpd:127.0.0.1" >> /etc/hosts.allow ← サーバー自身からのvsftpdへのアクセスを許可

[root@fedora~]# echo "vsftpd:192.168.1." >> /etc/hosts.allow ← 内部(例:192.168.1.XXXからのvsftpdへのアクセスを許可)

[root@fedora~]# echo "vsftpd:.ppp.asahi-net.or.jp"  >> /etc/hosts.allow
 ← 外部(例:xxx.ppp.asahi-net.or.jpからのvsftpdへのアクセスを許可)

[root@fedora~]# echo "vsftpd:ALL" >> /etc/hosts.deny ← vsftpdへの全てのアクセスを禁止
※上記では、内部(例:192.168.1.XXX)と外部(例:xxx.ppp.asahi-net.or.jp)からのみ、vsftpdへのアクセスを許可している


■関連コンテンツ




▲このページのトップへ戻る

プライバシーポリシー