FTPサーバ(vsFTPD)

■ FC2~FC6 ※ Fedora7以降 FTP 使用停止
FTPとは、ネットワーク経由でファイルを転送するためのプロトコルです。インターネットにあるサーバから、ファイルをダウンロードしたりすることがあると思いますが、その場合はFTPデーモンがサーバー上で起動しています。 FTPを使用する場合はLinuxに登録したユーザーでアクセスするのが基本ですが、ユーザーに関係なく、アクセスする仕組みとしてAnonymous(匿名)FTPサービスというのも存在します。
■FTPサーバのインストール
FTPサーバを構築するには、vsftpd パッケージをインストールします。
PuTTYでSSH方式のリモート接続による操作で今後進めます

Using username "higo".
Authenticating with public key "imported-openssh-key"
Passphrase for key "imported-openssh-key":  ← 一般ユーザーのパスワードを入力
Last login: Thu Sep 21 22:57:31 2006
[higo@linux ~]$ su -  ← スーパーユーザになる
パスワード(P): ← スーパーユーザのパスワードを入力
[root@linux ~]# yum install vsftpd
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
core                      100% |=========================| 1.1 kB    00:00
extras                    100% |=========================| 1.1 kB    00:00
updates                   100% |=========================| 1.2 kB    00:00
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for vsftpd to pack into transaction set.
vsftpd-2.0.5-8.i386.rpm   100% |=========================|  16 kB    00:00
---> Package vsftpd.i386 0:2.0.5-8 set to be updated
--> Running transaction check
Dependencies Resolved
============================================================
Package                 Arch       Version          Repository        Size
============================================================
Installing:
vsftpd                  i386       2.0.5-8          core              137 k
Transaction Summary
============================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 137 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): vsftpd-2.0.5-8.i38 100% |=========================| 137 kB    00:00
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
Importing GPG key 0x4F2A6FD2 "Fedora Project "
Is this ok [y/N]: y
Importing GPG key 0xDB42A60E "Red Hat, Inc "
Is this ok [y/N]: y
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: vsftpd                       ######################### [1/1]
Installed: vsftpd.i386 0:2.0.5-8
Complete!
FTPサーバを起動させます
[root@linux ~]# /etc/rc.d/init.d/vsftpd start
vsftpd 用の vsftpd を起動中:                               [  OK  ]

■FTPサーバの設定ファイル変更

vsftpd.conf ファイルを編集
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
匿名ユーザ(anonymous)はログイン禁止(YES→NO)
anonymous_enable=NO
ユーザが打ち込んだ詳細なログを残す
xferlog_std_format=NO  (YES→NO)
log_ftp_protocol=YES   (次の行へ追加)
アイドル時のタイムアウトを設定(#を削除)
idle_session_timeout=600
接続時のタイムアウトを設定(#を削除、120→60)
data_connection_timeout=60
アスキーモードでのアップロードを許可する(#を削除)
ascii_upload_enable=YES
アスキーモードでのダウンロードを許可する(#を削除)
ascii_download_enable=YES
一般ユーザはホームディレクトリーより上へアクセスさせない(#を削除)
chroot_list_enable=YES
ホームディレクトリーより上へアクセスさせないユーザリスト(#を削除)
chroot_list_file=/etc/vsftpd/chroot_list
ディレクトリを削除できるようにする(#を削除)
ls_recurse_enable=YES
パッシブモードを有効にする(最下行へ追加)
pasv_promiscuous=YES
タイムスタンプ時間を日本時間に変更(最下行へ追加)
use_localtime=YES

■FTP接続ユーザ設定

ホームディレクトリーより上へアクセスさせないユーザリスト
[root@linux ~]# vi /etc/vsftpd/chroot_list
ユーザ「fedora」は、自ホームディレクトリーより上にアクセスさせない
fedora
FTP接続させないユーザリスト
[root@linux ~]# 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  ←ユーザ「fedora」をFTP接続させないようにリストに追加

■FTPログインできるクライアントを設定

[root@linux ~]# 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.」とサーバ自身「127.0.0.1」は許可するので以下を追加します
vsftpd : 192.168.1. 127.0.0.1
/etc/hosts.allow で指定したアドレス以外は全て拒否
[root@linux ~]# 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

■FTPサーバの起動

[root@linux ~]# /etc/rc.d/init.d/vsftpd start
vsftpd用のvsftpdを起動中:                                  [  OK  ]

■FTPサーバの自動起動設定

[root@linux ~]# chkconfig vsftpd on
[root@linux ~]# chkconfig --list vsftpd
vsftpd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
           ランレベル2~5がオンの状態であることを確認

■FTPサーバの動作確認
クライアント(IP:192.168.1.3)のコマンドプロンプトより行います。

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
ユーザ「fedora」が拒否されるか?の確認
C:\WIMDOWS\system32>ftp
ftp> op
To 192.168.1.2
Connected to 192.168.1.2.
220 (vsFTPd 2.0.1)
User (192.168.1.2:(none)): fedora
ログインが拒否された
530 Permission denied.
Login failed.
FTP接続を終了します
ftp> bye
221 Goodbye.
ユーザ「higo」がログインできるか?の確認
C:\WIMDOWS\system32>ftp
ftp> op
To 192.168.1.2
Connected to 192.168.1.2.
220 (vsFTPd 2.0.1)
User (192.168.1.2:(none)): higo
ログインできた
331 Please specify the password.
Password:
230 Login successful.
ftp>
サーバへファイルをアップロードする
ftp> put c:\test.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.   アップロードできた
ftp: 19 bytes sent in 0.00Seconds 19000.00Kbytes/sec.
サーバよりファイルをダウンロードする
ftp> get test.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for test.txt (19 bytes).
226 File send OK.   ダウンロードできた
ftp: 19 bytes received in 0.00Seconds 19000.00Kbytes/sec.
FTP接続を終了します
ftp> bye
221 Goodbye.

■接続エラー対策
【現象】
ftpコマンドを使用してサーバーに接続を行うと、以下のようなメッセージが出力され
ます。

[root@linux ~]# ftp ftp.turbolinux.gr.jp
Connected to ftp.turbolinux.gr.jp.
220 ftp.turbolinux.gr.jp FTP server ready.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (ftp.turbolinux.gr.jp:root): 

【原因】
“Kerberos認証”をサポートするkrb5-workstationパッケージをインストールすると、各ユーザの$PATHが変更されます。これにより、ftpコマンド実行時に呼び出されるプログラムが、/usr/bin/ftpから/usr/kerberos/bin/ftpに変更になります。/usr/kerberos/bin/ftpはKerberos認証をサポートするコマンドなので、サーバーがKerberos認証をサポートしていない場合には、このようなメッセージが表示されます。
【対策】
Kerberos認証を使用しない場合には、krb5-workstationパッケージをアンインストールしてください。または、環境変数PATHを変更するかaliasコマンドでftpを定義するなどして、/usr/bin/ftpが実行されるようにしてください。
【実行例】

[root@linux ~]# export PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/usr/X11R6/bin:/usr/lib/qt/bin
または
[root@linux ~]# alias ftp=/usr/bin/ftp

■krb5-workstationパッケージのアンインストール

[root@linux ~]# yum remove krb5-workstation
Loading "fastestmirror" plugin
Loading "installonlyn" plugin
Setting up Remove Process
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Package krb5-workstation.i386 0:1.5-7 set to be erased
--> Running transaction check
Dependencies Resolved
============================================================
Package                 Arch       Version          Repository        Size
============================================================
Removing:
krb5-workstation        i386       1.5-7            installed         1.7 M
Transaction Summary
============================================================
Install      0 Package(s)
Update       0 Package(s)
Remove       1 Package(s)
Is this ok [y/N]: y
Downloading Packages:
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Removing  : krb5-workstation             ######################### [1/1]
Removed: krb5-workstation.i386 0:1.5-7
Complete!

■外部からの接続
外部からの接続には、ルーターの設定が必要です。
ルーターの設定で20番と21番のポートを開けてください。
ドメイン名での接続は事前にドメイン名の取得を行っている必要があります。
■FTPサーバの停止

[root@linux ~]# /etc/rc.d/init.d/vsftpd stop
vsftpd を停止中:                                           [  OK  ]
起動時にFTPサーバを起動しない
[root@linux ~]# chkconfig vsftpd off
[root@linux ~]# chkconfig --list vsftpd
vsftpd          0:off  1:off  2:off  3:off  4:off  5:off  6:off
[root@linux ~]#

※vsftpd を停止したらルーターの設定で20番と21番のポートを閉じてください。
■その他のサービス状態の表示

[root@linux ~]# service --status-all
jserverは停止しています
httは停止しています
・
・
・
ypbindは停止しています
[root@linux ~]#