はじめての自宅サーバ構築 - Fedora/CentOS -
Last Update 2018/05/30
[ 更新履歴 ] [ サイト マップ ] [ 質問掲示板 ] [ 雑談掲示板 ] [ リンク ]
トップ >> クライアントよりサーバを操作 >> FTPサーバの構築(vsFTPD)
動作確認 [ FC1 / FC2 / FC3 / FC4 / FC5 / FC6 / Fedora7 / Fedora8 / Fedora9 / Fedora10 / Fedora11 / Fedora12 / Fedora13 / Fedora14 / Fedora15 / Fedora16 / Fedora17 / CentOS4 / CentOS5 / CentOS6 / CentOS7 ]
  1. はじめに・・・
  2. FTPサーバ(vsFTPD)のインストール
  3. vsFTPDの設定ファイル変更
  4. FTP接続ユーザ設定
  5. FTP接続できるクライアントの制限(セキュリティ強化)
  6. vsFTPDを起動する
  7. OSの再起動を行なった時にvsFTPDを自動的に起動するように設定する
  8. vsFTPDの動作確認(PORTモード)
  9. vsFTPDの動作確認(PASVモード)
  10. 外部(WAN)からの接続

■ はじめに・・・

FTPプロトコルでのファイル転送ツールはFFFTPなどが有名です。
このツールはとても優秀で使い勝手もよく私も使わせてもらっています。
しかし、自宅サーバへのファイル転送には一切使用しておりません。
FFFTP自体には全く問題はありませんが、FTPプロトコル自身に多少の問題があります。

こちらのFTPサーバの構築(vsFTPD)も管理者への要望が多かった為、ご紹介します。
構築後の使用には、LAN以外(WAN)からのサーバアクセスには十分に気を付けて下さい。

個人的には『WinSCPによるサーバファイル転送』をお勧めします。

■ FTPサーバ(vsFTPD)のインストール

# yum -y install vsftpd

■ vsFTPDの設定ファイル変更

vsFTPDの設定ファイルを編集
# vi /etc/vsftpd/vsftpd.conf
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
匿名ユーザはログインさせない
anonymous_enable=NO

# You may change the default value for timing out an idle session.
アイドル時のタイムアウトを設定(300秒)
idle_session_timeout=300

# You may change the default value for timing out a data connection.
接続時時のタイムアウトを設定(30秒)
data_connection_timeout=30

# 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 kajuhome.com FTP service.

# 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_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

PAM認証のサービス名指定
pam_service_name=vsftpd

アクセスユーザーリストファイルの使用
userlist_enable=YES
  上記の「userlist_enable」の設定により、ファイル「/etc/vsftpd/user_list」内のユーザ接続方法が異なります。
  YES : ファイル「/etc/vsftpd/user_list」内に指定されたユーザは拒否される
  NO  : 「/etc/vsftpd/user_list」内の指定ユーザに関わらず接続が許可(*1)される

隠れた属性があり、以下を定義すると「アクセスユーザーリスト」に定義されたユーザの挙動が変わるので注意
定義がない(デフォルト)場合は「userlist_enable=YES」として処理されます
userlist_enable=NO
この設定値を「NO」にすると「/etc/vsftpd/user_list」内に指定されたユーザのみ許可(*1)される

*1:ファイル「/etc/vsftpd/ftpusers」内にそのユーザが設定されていた場合は「拒否」されるので注意

tcp_wrappersを使用する
tcp_wrappers=YES


これ以降は任意で追加

ユーザが打ち込んだftpコマンドをログに残す(下記2つ)
xferlog_std_format=NO
log_ftp_protocol=YES

タイムスタンプ時間を日本時間に合わせる
use_localtime=YES

パッシブモードを利用にする
pasv_promiscuous=YES
パッシブモード利用時のポート範囲(例:50000〜50030)
pasv_min_port=50000
pasv_max_port=50030

■ FTP接続ユーザ設定

ホームパスより上へアクセスさせないユーザ一覧
  *:はじめて作成する場合、当該ファイルはないので新規作成となります
# vi /etc/vsftpd/chroot_list
ユーザ「linux」は、自ホームパスより上に行かせない
linux

FTP接続させないユーザ一覧
# vi /etc/vsftpd/user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd.ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
ユーザ「fedora」をFTP接続させないように設定
fedoravsFTPDの設定ファイル変更』でも述べていますが「userlist_enable」と「userlist_deny」の設定
で接続の動作が異なるので注意する事。(以下に簡単な表を纏めておきます。)
                                    ┌─────────────┐
                                    │  /etc/vsftpd/user_list   │
┌────────┬────────┼──────┬──────┤
│     属性名     │     設定値     │ユーザ名あり│ユーザ名なし│
├────────┼────────┼──────┼──────┤
│userlist_enable │      YES       │  接続不可  │   接続可   │
├────────┼────────┼──────┼──────┤
│                │YES(デフォルト) │    同上    │    同上    │
│userlist_deny   ├────────┼──────┼──────┤
│                │       NO       │   接続可   │  接続不可  │
└────────┴────────┴──────┴──────┘


外部指定ファイルはディストリビューションやvsftpdのバージョンにより違うので注意
    user_list:「/etc/vsftpd/user_list」 または 「/etc/vsftpd.user_list」
    ftpusers :「/etc/vsftpd/ftpusers」  または 「/etc/vsftpd.ftpusers」

■ FTP接続できるクライアントの制限(セキュリティ強化)

FTPログインできるクライアントを設定(tcp_wrappers)
# vi /etc/hosts.allow
#
# hosts.allow   This file describes the names of the hosts which are
#       allowed to use the local INET services, as decided
#       by the '/usr/sbin/tcpd' server.
#
プライベートアドレス「192.168.1.」とサーバ自身、グローバルアドレス「211.xxx.xxx.xxx」は許可
vsftpd : 192.168.1. 127.0.0.1 211.xxx.xxx.xxx


『/etc/hosts.allow』で指定されたクライアント以外は全て拒否
# vi /etc/hosts.deny
#
# hosts.deny    This file describes the names of the hosts which are
#       *not* allowed to use the local INET services, as decided
#       by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow.  In particular
# you should know that NFS uses portmap!
vsftpd : ALL

■ vsFTPDを起動する

vsFTPDを起動する
【FC1 から Fedora15 / CentOS4 / CentOS5 / CentOS6 の場合】
# /etc/rc.d/init.d/vsftpd start

【Fedora16以降 / CentOS7 の場合】
# systemctl start vsftpd.service

■ OSの再起動を行なった時にvsFTPDを自動的に起動するように設定する

起動時にvsFTPDを起動する
【FC1 から Fedora15 / CentOS4 / CentOS5 / CentOS6 の場合】
# chkconfig vsftpd on
設定内容を確認
# chkconfig --list vsftpd
vsftpd          0:オフ  1:オフ  2:オン  3:オン  4:オン  5:オン  6:オフ

【Fedora16以降 / CentOS7 の場合】
# systemctl enable vsftpd.service
設定内容を確認
# systemctl status vsftpd.service
vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled)
   Active: active (running) since 火 2014-07-15 17:17:25 JST; 47s ago

■ vsFTPDの動作確認(PORTモード)

クライアント機より接続する(ここはWindowsのDOS窓より行ってください)
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

FTP接続拒否設定の確認(ユーザ「fedora」が拒否されるか?)
C:\Documents and Settings\fedora>ftp
ftp> op
To 192.168.1.5
Connected to 192.168.1.5.
220 (vsFTPd 1.2.1)
User (192.168.1.5:(none)): fedora
ログインを拒否された
530 Permission denied.
Login failed.
FTP接続を終了
ftp> bye
221 Goodbye.

FTP接続の確認
C:\Documents and Settings\fedora>ftp
ftp> op
To 192.168.1.5
Connected to 192.168.1.5.
220 (vsFTPd 1.2.1)
User (192.168.1.5:(none)): linux
ログインできた
331 Please specify the password.
Password:
230 Login successful.
ftp>

パッシブモードの状態を確認
ftp> ls -l
パッシブモードが無効になっている(*:WindowsのFTPコマンドはPASVに対応していません)
「PASVを使うことを考えてください」というメッセージ
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-------    1 500      500          2049 Oct 05 16:27 Mailbox
226 Directory send OK.
ftp: 65 bytes received in 0.00Seconds 65000.00Kbytes/sec.
ftp>

自ホームパス以外に移れるか確認
現在の位置確認
ftp> pwd
vsFTPDでのchroot設定は、自ホームパス(/home/linux/)をトップパス(/)に擬似的に置き換えます
257 "/"
/root/に移動してみる
ftp> cd /root/
拒否された
550 Failed to change directory.
/etc/に移動してみる
ftp> cd /etc/
拒否された
550 Failed to change directory.
ftp>

サーバへファイルを転送する
ftp> put c:\textfile
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.
ftp: 60 bytes sent in 0.00Seconds 60000.00Kbytes/sec.
転送先の確認
ftp> ls -l
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-------    1 500      500          2049 Oct 05 16:27 Mailbox
転送できた
-rw-r--r--    1 500      500            57 Dec 07 17:57 textfile
226 Directory send OK.
ftp: 131 bytes received in 0.00Seconds 131000.00Kbytes/sec.

サーバよりファイルを取得する
ftp> get textfile
200 PORT command successful. Consider using PASV.
150 Opening ASCII mode data connection for textfile (57 bytes).
226 File send OK.
ftp: 60 bytes received in 0.00Seconds 60000.00Kbytes/sec.

FTP接続を終了
ftp> bye
221 Goodbye.

■ vsFTPDの動作確認(PASVモード)

クライアント機より接続する(代表的なWindowsのFTPツールのFFFTPを使用します。)

  1. FFFTPの「ホストの設定」-「拡張」でPASVを利用する様に設定する

以下はFFFTP操作時のログです。
FFFTP Ver.1.92 Copyright(C) 1997-2003 Sota.
----------------------------
ホスト xxx.xxx.xxx.xxx (21) に接続しています.
接続しました.
220 (vsFTPd 2.0.3)
>USER linux
331 Please specify the password.
>PASS [xxxxxx]
230 Login successful.
>>CD c:\
>XPWD
257 "/home/linux"
>TYPE A
200 Switching to ASCII mode.
パッシブモードになっている。(またポートも指定範囲内である)
>PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,156,70)
ダウンロードのためにホスト xxx.xxx.xxx.xxx (50006) に接続しています.
接続しました.
>NLST -alL
150 Here comes the directory listing.
226 Directory send OK.
ファイル一覧の取得は正常終了しました. (716 Bytes)
>TYPE I
200 Switching to Binary mode.
>PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,156,89)
アップロードのためにホスト xxx.xxx.xxx.xxx (50025) に接続しています.
接続しました.
>STOR /home/linux/textfile
150 Ok to send data.
226 File receive OK.
アップロードは正常終了しました. (1 Sec. 57 B/S).
>TYPE A
200 Switching to ASCII mode.
>PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,156,75)
ダウンロードのためにホスト xxx.xxx.xxx.xxx (50011) に接続しています.
接続しました.
>NLST -alL
150 Here comes the directory listing.
226 Directory send OK.
ファイル一覧の取得は正常終了しました. (782 Bytes)
>TYPE I
200 Switching to Binary mode.
>PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,156,87)
ダウンロードのためにホスト xxx.xxx.xxx.xxx (50023) に接続しています.
接続しました.
>RETR /home/linux/textfile
150 Opening BINARY mode data connection for /home/linux/textfile (57 bytes).
226 File send OK.
ダウンロードは正常終了しました. (1 Sec. 57 B/S).
切断しました

■ 外部(WAN)からの接続

WANから接続するに当たって、ルータの設定が必要です。
ルータのポート開閉は、ご自分のルータ取扱説明書をご覧ください。

DNS名で接続するには事前にドメイン名の取得を行っている必要があります。(以下は代表的なものであり、また、当サイトが使用させて頂いております)

■ コンテンツ関連

■ その他

ページ先頭へ

Copyright(©)2004-2018 First home server construction. All Right Reserved.