FTPとは、ネットワーク経由でファイルを転送するためのプロトコル。インターネットにあるサーバから、ファイルをダウンロードしたりすることがあると思うが、その場合はFTPデーモンがサーバー上で起動している状態である。 FTPを使用する場合はLinuxに登録したユーザーでアクセスするのが基本だが、ユーザーに関係なく、アクセスする仕組みとしてAnonymous(匿名)FTPサービスというのも存在する。
■FTPサーバのインストール
FTPサーバを構築するには、vsftpd パッケージをインストールする。
PuTTYでSSH方式のリモート接続による操作で今後進める
Using username "higo".
Authenticating with public key "imported-openssh-key"
Last login: Mon Sep 19 06:10:52 2011 from 192.168.1.7
[higo@server1 ~]$
[higo@server1 ~]$ su - ← スーパーユーザになる
パスワード(P): ← スーパーユーザのパスワードを入力
[root@server1 ~]# yum install vsftpd
Loaded plugins: fastestmirror, refresh-packagekit
Existing lock /var/run/yum.pid: another copy is running as pid 2557.
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: PackageKit
Memory : 47 M RSS ( 95 MB VSZ)
Started: Mon Sep 19 08:36:00 2011 - 00:14 ago
State : Sleeping, pid: 2557
Loading mirror speeds from cached hostfile
* base: ftp.jaist.ac.jp
* centosplus: ftp.jaist.ac.jp
* epel: ftp.jaist.ac.jp
* extras: ftp.jaist.ac.jp
* updates: mirror.khlug.org
Setting up Install Process
Resolving Dependencies
--> Running transactiyon check
---> Package vsftpd.i686 0:2.2.2-6.el6_0.1 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
====================================================================================================
Package Arch Version Repository Size
====================================================================================================
Installing:
vsftpd i686 2.2.2-6.el6_0.1 updates 155 k
Transaction Summary
====================================================================================================
Install 1 Package(s)
Upgrade 0 Package(s)
Total download size: 155 k
Installed size: 343 k
Is this ok [y/N]: y
Downloading Packages:
vsftpd-2.2.2-6.el6_0.1.i686.rpm | 155 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : vsftpd-2.2.2-6.el6_0.1.i686 1/1
Installed:
vsftpd.i686 0:2.2.2-6.el6_0.1
Complete!
FTPサーバを起動させる
[root@server1 ~]# /etc/rc.d/init.d/vsftpd start
vsftpd 用の vsftpd を起動中: [ OK ]
■FTPサーバの設定ファイル変更
vsftpd.conf ファイルを編集
[root@server1 ~]# 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@server1 ~]# vi /etc/vsftpd/chroot_list
例:ユーザ「centos」は、自ホームディレクトリーより上にアクセスさせない
centos
FTP接続させないユーザリスト
[root@server1 ~]# 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
centos ←ユーザ「centos」をFTP接続させないようにリストに追加
■ FTPアクセス制限
サーバー自身、内部ネットワーク、特定の外部IP(xxx.xxx.xxx.xxx)からのアクセスを許可
[root@server1 ~]# echo "vsftpd : 127.0.0.1 192.168.1. xxx.xxx.xxx.xxx" >> /etc/hosts.allow
上記以外の全てのアクセスを禁止
[root@server1 ~]# echo "vsftpd : ALL" >> /etc/hosts.deny
会社等からアクセスする場合、自分の会社の接続環境(IPアドレス)を調べ、/etc/hosts.allowへ登録する必要がある。そんな時は診断くんで確認できる。
■FTPサーバの起動
[root@server1 ~]# /etc/rc.d/init.d/vsftpd start
vsftpd用のvsftpdを起動中: [ OK ]
■FTPサーバの自動起動設定
[root@server1 ~]# chkconfig vsftpd on
[root@server1 ~]# 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.7)のコマンドプロンプトより行う。
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
ユーザ「centos」が拒否されるか?の確認
C:\Users\higo>ftp
ftp> op
宛先 192.168.1.4
192.168.1.4 に接続しました。
220 (vsFTPd 2.2.2)
ユーザー (192.168.1.4:(none)): centos
530 Permission denied.
ログインできませんでした。
ftp> bye ← FTP接続を終了
221 Goodbye.
ユーザ「higo」がログインできるか?の確認
C:\Users\higo>ftp
ftp> op
宛先 192.168.1.4
192.168.1.4 に接続しました。
220 (vsFTPd 2.2.2)
ユーザー (192.168.1.4:(none)): higo
331 Please specify the password.
パスワード:
230 Login successful.
ftp>
事前に作成しておいたtest.txtをサーバへアップロードする
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.
■外部からの接続
外部からの接続には、ルーターの設定で20番と21番のポートを開ける必要がある。
ドメイン名での接続は事前にドメイン名の取得を行っている必要がある。
■ ポートチェック【ポート開放確認】
「管理しているサーバーが外部から接続アクセスできるか?」「ポートは開放されているか?」「portは閉じているか?」「ルータのポートは開放されているか」等の
ポートチェック・ポートの疎通確認テストはこちらで
■FTPサーバの停止
ファイル転送はSSH (Secure Shell)を使用する場合は、FTPサーバは停止しておく。
[root@server1 ~]# /etc/rc.d/init.d/vsftpd stop
vsftpd を停止中: [ OK ]
起動時にFTPサーバを起動しない
[root@server1 ~]# chkconfig vsftpd off
[root@server1 ~]# chkconfig --list vsftpd
vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@linux ~]#
※vsftpd を停止したらルーターの設定で20番と21番のポートを閉じる。