vsftpd FTPサーバー構築の記事一覧

vfstpd.confの設定項目一覧

vsftpdは起動時にvsftpd.confを参照し、vsftpdの様々な動作オプションを決定します。

vsftpd.confの書式

vsftpd.confに記述するステートメントは行の終端で終了します。
ステートメントはディレクティブとその値を “=” で結んだ形式で記述します。

directive=value
  • directiveの部分に有効なディレクティブ、value の部分に有効な値を入れる
  • “=”とdirective, valueの間にスペースがあってはならない
  • 先頭に # のある行はコメントと解釈される

vfstpd.confの設定項目一覧

vsftpd設定ファイル(vfstpd.conf)には以下のようなディレクティブ(設定項目)があります。

ディレクティブ 説明 デフォルト
anonymous_enable 匿名ユーザーによるFTPログインの許可する YES
local_enable ローカル ユーザ アカウントによる ログインを許可する YES
write_enable ファイルに変更を加えるFTPコマンドの使用を許可する YES
local_umask 新規ファイルに適用するパーミッションのumask値を設定する 022
anon_upload_enable 匿名ユーザーからのサーバーへのファイル書き込み許可する NO
anon_mkdir_write_enable 匿名ユーザーがディレクトリの生成を許可する NO
dirmessage_enable メッセージファイル(message_fileで指定)を設置したディレクトリにアクセスがあるとメッセージファイルの内容を表示する NO
xferlog_enable ログ取得の有無を設定する YES
connect_from_port_20 アクティブモード時のサーバー側が使用するデータ転送用ポート番号の指定方法を定義する(YES:ftp_data_portで指定するポート、NO:1024以降のポート) YES
chown_uploads 匿名ユーザーでアップロードされたファイルの所有者を変更するかを設定する YES
chown_username 匿名ユーザーでアップロードされたファイルの所有者を変更す場合のユーザーを指定する whoever
xferlog_file ログファイルのファイル名を設定する /var/log/xferlog
xferlog_std_format ログをxferlogのフォーマットにするかの設定する YES
idle_session_timeout コントロールコネクション上にFTPコマンドや応答が流れない(アイドル)状態のタイムアウト値を秒数で指定する 600
data_connection_timeout データ転送の進捗が進まない場合のタイムアウト値を秒数で指定する 300
nopriv_user 特権がいらない場合の権限を指定する nobody
async_abor_enable 非同期ABORを認めるかどうかを設定する NO
ascii_upload_enable アップロード時のASCIIモードでのデータ転送を許可する NO
ascii_download_enable ダウンロード時のASCIIモードでのデータ転送を許可する NO
ftpd_banner 接続が最初に来たときにvsftpdが表示する挨拶メッセージを指定する vsFTPd x.x.x
deny_email_enable 匿名ユーザーのパスワード(e-mail アドレス)のうちログインを拒否したいもののリストを適用するかどうかを指定する NO
banned_email_file 匿名ユーザーのパスワード(e-mail アドレス)のうち、許可しないもののリストのファイル名を指定する /etc/vsftpd/banned_emails
chroot_local_user ログイン後にホームディレクトリへとchroot()するかどうかを指定する(ホームディレクトリより上層へのアクセスを禁止するかどうか) NO
chroot_list_enable ログイン後にホームディレクトリへとchroot()されるローカルユーザーのリストを指定する(ホームディレクトリより上層へのアクセスを許可するユーザーのリスト) NO
chroot_list_file ホームディレクトリ内のchoot() jailに入れられるローカルユーザーのリストを示すファイル名を指定する /etc/vsftpd/chroot_list
ls_recurse_enable “ls -R”コマンドの使用を許可する NO
listen スタンドアロンモード(デーモン)で起動するかどうかを指定する NO
listen_ipv6 スタンドアロンモード(デーモン)で起動するかどうかを指定する(IPv6で待ち受ける) NO
pam_service_name vsftpdが使用するPAMサービス名を指定する ftp
userlist_enable userlist_fileで指定したファイルをユーザ名のリストとして読み込む。このファイルに名前のあるユーザーでログインしようとするとパスワードを尋ねられる前に拒否される NO
userlist_deny NOにした場合、userlist_fileで指定したファイルに明示的にリストされたユーザー以外はログインが拒否される YES
userlist_file userlist_enableオプションが有効な場合に読み込まれるファイルのファイル名を指定する /etc/vsftpd/user_list
tcp_wrappers YESにした場合、vsftpdをtcp_wrappersをサポートしてコンパイルしてあれば外から来る接続はtcp_wrappersのアクセス制御が適用される NO
use_localtime ディレクトリリストの表示にローカルのタイムゾーンを使用する NO
pasv_enable パッシブモード接続の許可/不許可を設定する YES
pasv_min_port パッシブモードでの接続に割り当てるポートの最小値 0(任意のポート)
pasv_max_port パッシブモードでの接続に割り当てるポートの最大値 0(任意のポート)

※環境(ディストリビューションやバージョン等)によってはデフォルト値が異なる場合があります。

2016年02月05日(金)|vsftpd FTPサーバー構築

vsftpd FTPサーバー構築

今回は以下のようなポリシーでFTPサーバー(vsftpd)を構築します。

  • 匿名ユーザー(annonymous)でのログインを拒否する
  • パッシブモードでの転送を許可する
  • rootでのログインを拒否する
  • 自身のホームディレクトリより上層へはアクセスを禁止する
  • ただし、ftpadminユーザーのみホームディレクトリより上層へのアクセスを許可する

vsftpd.confの編集

上記のポリシーを満たすようにvsftpd.confを編集します。

# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=YES
use_localtime=YES
pasv_enable=YES
pasv_min_port=0
pasv_max_port=0

まず、デフォルトでは、匿名ユーザー(anonymous)でのログインが許可されていますのでこれを禁止します。

anonymous_enable=NO
anon_upload_enable=NO

ホームディレクトリより上層へのアクセスを禁止するかどうかを指定します。

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

「chroot_local_user」をYESにするとホームディレクトリより上層へのアクセスが禁止されます。ただし、「chroot_list_enable」をYESにすることでホームディレクトリより上層へのアクセスを許可するユーザーのリストが有効となります。それにより、「chroot_list_file」に記述したユーザーのみ上層へのアクセスが許可されます。

FTPでログインできるユーザーを指定します。

userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list

「userlist_enable」をYESにするとユーザーリストを使用しアクセスできるユーザーを制限することができるようになります。ユーザーリストのパスは「userlist_file」で指定します。
「userlist_deny」をYESにした場合、ユーザーリストはアクセスを拒絶するユーザーのリストになります。逆にNOにした場合、ユーザーリストはアクセスを許可するユーザーのリストになります。

パッシブモードでの転送を許可します。また、パッシブモードでの接続時に使用するポート番号の最小値と最大値を指定します。

pasv_enable=YES
pasv_min_port=0
pasv_max_port=0

「pasv_min_port」「pasv_max_port」に0を指定すれば、1024~65535番のうちのポート番号がランダムで使用されるようになります。

FTP用ユーザー作成

FTP用のOSユーザーを作成します。ここでは「ftpuser」と「ftpadmin」を作成します。

# useradd ftpuser
# passwd ftpuser
Changing password for user ftpuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
# useradd ftpadmin
# passwd ftpadmin
Changing password for user ftpadmin.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

chrootしないユーザーリスト作成

ホームディレクトリより上層へのアクセスを許可するユーザーリストを作成します。

# vi /etc/vsftpd/chroot_list
ftpadmin

ここではftpadminユーザーのみ許可するため、上記1行を記述します。

vsftpd.confの設定反映

ここまで行った設定を反映させるためにvsftpdを再起動します。

# service vsftpd restart

ファイル受信ディレクトリ作成

ファイルを受信するディレクトリを作成します。ftpuserユーザーはホームディレクトリ配下へしかアクセスできないため、その下の階層に作成します。

# cd /home/ftpuser/
# mkdir upload
# chown ftpuser:ftpuser ./upload/
# chmod 700 ./upload/

FTPクライアントからのファイル送信

FTPサーバーに対してファイルを送信してみましょう。今回もWindows標準のFTP機能を使用して、ファイル送信の確認をします。

Windows標準のFTP機能はコマンドプロンプトから使用します。
(コマンドプロンプトの起動は画面左下のWindowsマークをクリックし「プログラムとファイル検索」欄に「cmd」と入力し、Enterキーを押下します。)

まずは送信するテスト用ファイルを作成します。

> type nul > testfile03

続いてFTPサーバーにログインします。今回はftpuserでログインします。

> ftp 172.16.0.10
172.16.0.10 に接続しました。
220 (vsFTPd 2.2.2)
ユーザー (172.16.0.10:(none)): ftpuser
331 Please specify the password.
パスワード:
230 Login successful.

putコマンドでファイルを送信します。その際のパス指定ですが、ftpuserは「/home/ftpuser」ディレクトリが「/」になります。そのため先ほど作成したuploadディレクトリへ送信するには「/upload/>送信ファイル名<」というパス指定になります。

ftp>  put "C:\Users\user\testfile03" /upload/testfile03
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp> 
ftp>  bye
221 Goodbye.

今度はftpadminユーザーでログインしてみます。

> ftp 172.16.0.10
172.16.0.10 に接続しました。
220 (vsFTPd 2.2.2)
ユーザー (172.16.0.10:(none)): ftpadmin
331 Please specify the password.
パスワード:
230 Login successful.

ログイン直後のカレントディレクトリをpwdコマンドで確認してみます。

ftp> pwd
257 "/home/ftpadmin"

ホームディレクトリより上層へのアクセスを許可しているftpadminユーザーでログインした場合は、OS上のパスと一致していることが確認できます。

2016年02月03日(水)|vsftpd FTPサーバー構築

iptablesでFTP(パッシブモード)を許可する

今回はパッシブモードでの接続を許可する設定方法について見ていきます。

まず、パッシブモードで使用するポートを確認しましょう。

FTPパッシブモード使用ポート
上図のように、データコネクションで使用するポートはランダムであり定まっていません。そのため、単純なパケットフィルタで許可しようとすると、次のようなパケットフィルタルールを適用する必要があります。

FTPクライアント(From) FTPサーバー(To)
1024~65535 許可 21 許可
1024~65535 許可 1024~65535 許可

上表のとおり、ほとんどのポートを開放する必要があり、これではパケットフィルタを設定する意味がありません。そこでiptablesにその問題を解決してくれるモジュールを組み込む対応を取ります。

「ip_conntrack_ftp」というモジュールを組み込んでおくと、データコネクションやパッシブモードの対応を自動で行ってくれます。

コントロールコネクション用のポート開放

「ip_conntrack_ftp」モジュールの組み込み設定を行う前に、まずはFTPサーバーで待ち受けるコントロールコネクション用のポートを開放する必要があります。
ポートは21番になりますので21番ポートの入力(受信)パケットを許可する必要があります。21番ポートを開けるには以下コマンドを実行します。

# iptables -I INPUT 4 -p tcp --dport 21 -j ACCEPT

ルールを挿入する場所は適宜変更してください。上記例では4番目に挿入しています。

FTP関連モジュールの設定

「ip_conntrack_ftp」モジュールはFTPプロトコルを識別し、使うポートを追跡して適宜開けてくれます。(つまり、ポートレベルでフィルタリングするのではなく、Windowsファイアウォールなどと同じようにアプリケーションレベルでフィルタリングしてくれます。)
また、IPマスカレードを使用している場合は、「ip_nat_ftp」モジュールもロードします。

二つのモージュールをロードするには、「/etc/sysconfig/iptables-config」に以下のように記述します。

IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"

これでiptablesが起動するタイミングで自動的にロードされるようになりました。。

あとは、iptablesを再起動します。

# service iptables restart

以上で、パッシブモードでのFTPファイル送受信が可能になりました。

2016年01月31日(日)|vsftpd FTPサーバー構築

iptablesでFTP(アクティブモード)を許可する

CentOSは、iptables(ファイアウォール)の設定が自動的に有効になっており、初期設定では外部からFTPでの接続ができません。

そのため、アクティブモードのFTPアクセスできるようにするには以下のいずれからの方法をとらなくてはなりません。

  • iptablesを無効にする。
  • iptablesにFTP(20、21番ポート)でのアクセスを許可する設定を追加する。

「iptablesを無効にする」方法は前回の記事で行いましたが、サーバーを運用していく上でファイアウォールの機能を無効にするということはセキュリティ対策がまったくできていないということと同意のため、当然ですが、実運用ではやってはいけない行為です。

ですので今回は「iptablesにFTP(20、21番ポート)でのアクセスを許可する設定を追加する」方法について見ていきます。

アクティブモードで使用するポート

iptablesの設定を行う前にアクティブモードでFTPアクセスする際に使用するポート番号について確認しましょう。
FTPアクティブモード使用ポート
上図のようにアクティブモードの場合、FTPサーバー側で使用するポートは20番(送信元ポート)、21番(宛先ポート)で固定となります。

iptablesにFTPアクセス許可設定を追加

まずは現状のファイアウォール(iptables)設定を確認します。

# service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

アクティブモードの場合、FTPサーバーで待ち受けるポートは21番になりますので21番ポートの入力(受信)パケットを許可する必要があります。21番ポートを開けるには以下コマンドを実行します。

# iptables -I INPUT 4 -p tcp --dport 21 -j ACCEPT

 ※ルールを挿入する場所は適宜変更してください。上記例では4番目に挿入しています。

データコネクションで20番ポートを使用しますが、その際使用するのはFTPサーバーから見た場合、送信元ポートに当たるため、出力(送信)パケットかつ送信元ポート20番のパケットを許可する必要があります。ただし、今回の例では出力(送信)パケットの制御は何も行っておらず、全て許可する設定となっているため、設定不要です。

続いて、設定を保存します。

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

最後にiptablesを再起動させて設定は反映させます。

# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

以上でアクティブモードにおけるiptablesの設定は完了です。

FTPクライアントからのファイル送信

では早速、FTPサーバーに対してファイルを送信してみましょう。今回もWindows標準のFTP機能を使用して、ファイル送信の確認をします。

Windows標準のFTP機能はコマンドプロンプトから使用します。
(コマンドプロンプトの起動は画面左下のWindowsマークをクリックし「プログラムとファイル検索」欄に「cmd」と入力し、Enterキーを押下します。)

まずは送信するテスト用ファイルを作成します。

> type nul > testfile02

続けて、作成したテスト用ファイルをFTPサーバーに送信します。

C:\Users\user> ftp 172.16.0.10
172.16.0.10 に接続しました。
220 (vsFTPd 2.2.2)
ユーザー (172.16.0.10:(none)): anonymous
331 Please specify the password.
パスワード:
230 Login successful.
ftp> cd /pub/upload
250 Directory successfully changed.
ftp>
ftp> put "C:\Users\user\testfile02" ./testfile02
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.

putコマンドでファイル送信を試みましたが、失敗してしまいました。エラーメッセージからデータコネクションの確立に失敗しているようです。FTPサーバー側のファイアウォールの設定はしたはずですが、なぜでしょう。

それは、FTPクライアント側の設定に問題があります。アクティブモードの場合、ファイル転送用に使用するデータコネクションはFTPサーバーからFTPクライアントに対して接続することを思い出してください。

今回のケースでは、FTPクライアントとなるローカルホストのファイアウォールで、その接続要求がブロックされてしまっていました。

この問題を回避するには、Windowsファイアウォールの設定を変更する必要があります。

Windows7を例にすると、画面左下のWindowsマークをクリックし「コントロールパネル」→「Windows ファイアウォール」→「Windows ファイアウォールを介したプログラムまたは機能を許可する」をクリックします。

Windowsファイアウォール設定

「許可されたプログラムおよび機能」で「ファイル転送プログラム」にチェックが入っていることを確認し、入っていなければチェックを入れます。

これで、データコネクションも確立できるようになったはずです。

ではもう一度、ファイル送信してみます。

ftp> put "C:\Users\user\testfile02" ./testfile02
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.

今度はうまくいきました。

アクティブモードの問題

実際にアクティブモードでFTP送信を行ってみましたが、その過程でアクティブモードの問題が垣間見えたのではないでしょうか。

その問題とは、アクティブモードの場合、FTPクライアント側のファイアウォール設定を変更しないといけないということです。

FTPでファイルの送受信するのはパソコンに詳しい人だけではありませんのでファイアウォールの設定を変更させるということは簡単なようで敷居は高いです。例えば、以下のような構成となっているケースを考えてみます。

ネットワーク構成例

今回の例ではWindowsファイアウォールだけの設定変更で済みましたが、上図構成の場合はルータの設定も変更してやらなくてはいけません。例えば会社のネットワーク機器の設定を一般社員が変更することは社内の管理体制上の理由でできないのが普通です。仮に設定変更できたとしてもセキュリティを緩めてしまうことになります。

そもそも、FTPサーバーからFTPクライアントへの接続要求が必要なのが問題なのです。FTPサーバーからの逆接続をやめて、接続要求はあくまでFTPクライアントからとすることが理想です。

そこで登場するのがパッシブモードです。
パッシブモードでは接続要求を出すのはFTPクライアントからのみとなり、上記の問題を解決します。最近では、セキュリティを考慮してパッシブモードが使われることが多いです。

次回は、iptablesでパッシブモードでのFTPを許可する方法について見ていきます。

2016年01月30日(土)|vsftpd FTPサーバー構築

anomnymous FTPの設定

anonymous FTPの設定を行います。

anonymous FTPとは、利用者登録を行っていない利用者でも自由に接続できる「anonymous」(匿名)と呼ばれる特殊なユーザーにより、FTPサーバーへのファイル送受信をできるようにする利用形態のことです。

匿名ユーザーでFTPサーバーにログインするときは、ユーザ名に「anonymous」、パスワードは任意(空欄可)の文字列を指定します。(ただし、マナーとしてメールアドレスを入力するということは覚えておきましょう。)

今回は、匿名ユーザーからFTPサーバーへのファイル書き込み(アップロード)を行えるように設定します。

vsftpd.confの編集

vsftpdの設定変更はvsftpd.confを編集することで行います。

# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

vsftpdの設定項目は上記以外にもたくさんありますが、ここでは以下2つの設定項目について着目します。

設定項目 説明
anonymous_enable 匿名ユーザーによるFTPログインの許可/不許可を指定。
anon_upload_enable 匿名ユーザーからのサーバーへのファイル書き込み(アップロード)許可/不許可を指定。

上記2つの設定項目を「YES」に設定することで匿名ユーザーからFTPサーバーへのファイル書き込み(アップロード)が可能になります。
続いて、ファイルのアップロード先ディレクトリを作成します。匿名ユーザーのホームディレクトリはデフォルトでは「/var/ftp」になっています。ここでは「/var/ftp/pub」配下に「upload」ディレクトリを作成します。

# cd /var/ftp/pub
# mkdir -m 777 upload

以上で、anonymous FTPの設定は完了です。この状態でvsftpdを起動します。

vsftpdの起動

vsftpdを起動するには以下のコマンドを実行します。

# service vsftpd start
Starting vsftpd for vsftpd: [  OK  ]

iptablesの停止

FTPは2つのコネクションを使い分けるプロトコルであり、データ転送に使用するデータコネクションにおいてはポート番号が固定ではありません。そのため、iptablesの設定は少し面倒です。

ここでは一旦、iptablesを無効にすることにします。

# service iptables stop
iptables: Flushing firewall rules: [  OK  ]
iptables: Setting chains to policy ACCEPT: filter [  OK  ]
iptables: Unloading modules: [  OK  ]

iptablesでFTPアクセスを許可する方法については次回に詳しく見ていきます。

FTPクライアントからのファイル送信

FTPクライアントソフトウェアもいろいろありますが、ここではWindows標準のFTP機能を使用して、ファイル送信の確認をします。

Windows標準のFTP機能はコマンドプロンプトから使用します。
(コマンドプロンプトの起動は画面左下のWindowsマークをクリックし「プログラムとファイル検索」欄に「cmd」と入力し、Enterキーを押下します。)

まずは何でも良いので送信するファイルを作成しましょう。

> type nul > testfile

上記は「空(0バイト)でファイルを作成する」という処理を行うコマンドです。Linuxのtouchコマンドに相当します。

あとはftpコマンドを実行します。以下は、FTPサーバーのIPアドレスが「172.16.0.10」の場合のコマンド例です。

> ftp 172.16.0.10
172.16.0.10 に接続しました。
220 (vsFTPd 2.2.2)
ユーザー (172.16.0.10:(none)): anonymous
331 Please specify the password.
パスワード:
230 Login successful.
ftp>

ftpコマンドを実行すると、FTPサーバーに接続します。接続に成功するとユーザー名とパスワードの入力が求められます。今回は匿名ユーザーでログインするためユーザー名に「anonymous」と入力します。パスワードは何でも構いません。ここでは空欄のままEnterキーを押下します。
ログインに成功すると、FTPのコマンドラインインタプリタが起動し、ユーザーからFTPコマンドを受け付けられる状態となります。

試しにいくつかFTPコマンドを実行してみます。

ftp> pwd
257 "/"
ftp>
ftp> cd /pub/upload
250 Directory successfully changed.
ftp>
ftp> pwd
257 "/pub/upload"
ftp>

FTPサーバー(リモートホスト)の現在のディレクトリ(カレントディレクトリ)のパスを確認するにはpwdコマンドを実行します。また、FTPサーバーのディレクトリを変更するにはcdコマンドを実行します。

OSコマンドと似ている部分もあるため、覚えやすいはずです。

FTPクライアント(ローカルホスト)からFTPサーバーへファイルを送信するにはputコマンドを実行します。

ftp> put "C:\Users\user\testfile" ./testfile
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp>bye

putコマンドの結果に「226 Transfer complete.」と出力されれば送信成功です。
なお、ひとつのファイルを送信する場合はputを使用しますが、一度に複数のファイルを送信したい場合はmputコマンドを使用します。

2016年01月17日(日)|vsftpd FTPサーバー構築

vsftpdのインストール

vsftpdのインストール方法について見ていきます。

今回はyumを使用して、vsftpdをインストールします。

# yum install vsftpd
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
base                                                     | 3.7 kB     00:00
extras                                                   | 3.4 kB     00:00
updates                                                  | 3.4 kB     00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package vsftpd.i686 0:2.2.2-14.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package          Arch           Version                   Repository      Size
================================================================================
Installing:
 vsftpd           i686           2.2.2-14.el6              base           157 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 157 k
Installed size: 344 k
Is this ok [y/N]: y
Downloading Packages:
vsftpd-2.2.2-14.el6.i686.rpm                             | 157 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded

 ~ 省略 ~

Installed:
  vsftpd.i686 0:2.2.2-14.el6

Complete!

「Is this ok [y/N]:」というプロンプトが出力されたら「y」を入力してEnterキーを押下すればインストールが始まります。(なお、yumコマンドに-yオプションをつけると、y/Nを入力しなくても済みます。)

「Complete!」が出力されれば、無事インストール完了です。

自動起動の設定

vsftpd(FTPサーバー)を常時稼動させておく場合は、自動起動の設定を行います。以下コマンドを実行することで、OS起動と同時にvsftpdも起動するようになります。

# chkconfig vsftpd on

以上で自動起動するように設定されたため、CentOSを再起動しても、OS起動とともにvsftpdが起動されるようになります。

2016年01月16日(土)|vsftpd FTPサーバー構築

FTPにおけるアクティブモードとパッシブモードの違い

FTPを理解していく上で欠かせないのが転送モードの概念です。

FTPには「アクティブモード」と「パッシブモード」のふたつの転送モードがあります。そのうちのどちらを使用するかによって、ファイアウォールの設定などFTPサーバー以外の要素にも影響がでます。

FTPにおけるコネクションの種類

アクティブモードとパッシブモードの違いを理解するためには、まず、FTPにおけるコネクションの種類について知っておく必要があります。

FTPは「コントロールコネクション」と「データコネクション」のふたつのコネクションを組み合わせて使用します。

種類 用途
コントロールコネクション FTPサーバーにログインする際の利用者認証、ならびにFTPコマンドを送信し、その応答を受信する。また、データコネクションを確立するためのネゴシエーションに使用。
データコネクション 実際のデータを転送するために使用。

データコネクションは実際のデータ転送に使用するコネクションです。コントロールコネクション上で送られたコマンドごとにデータコネクションを作り、その上でデータを送受信します。

そのデータコネクションを確立するための手段として、アクティブモードとパッシブモードの2種類があります。両者の違いで最も重要なのは以下です。

種類 特徴
アクティブモード FTPサーバー側からFTPクライアントに接続する。
パッシブモード FTPクライアントからFTPサーバー側に接続する。

アクティブモードとパッシブモードのどちらを使用するかはFTPクライアントで設定します。上記の特徴を踏まえ、それぞれの転送モードの方式について見ていきましょう。

アクティブモード

FTPのアクティブモードはコントロールコネクションにTCP/21番ポートを使用し、データコネクションにTCP/20番ポートを使用します。FTP送信におけるシーケンスを図にすると以下のようになります。(下図ではコントロールコネクションを青矢印、データコネクションを赤矢印で表しています。)
FTPアクティブモード

通常、一般的なクライアント・サーバー(クラサバ)構成の場合、クライアントからサーバーに接続要求するものですが、FTPのデータコネクションをアクティブモードで確立しようとした場合、上図にあるように、接続要求がサーバー側からクライアントに出されることが特徴です。

多くのFTPクライアントソフトウェアはアクティブモードをデフォルト設定としています。また、Windows標準のFTPクライアント機能に至ってはアクティブモードしかサポートしていません。

パッシブモード

FTPのパッシブモードはコントロールコネクションにTCP/21番ポートを使用し、データコネクションには毎回ランダムで決まるポート番号を使用します。
FTPパッシブモード

パッシブモードを使用する場合、クライアントからコントロールコネクションを介してPASVコマンドによりパッシブモードを使用することを要求します。サーバーはその要求を許可する場合、「Entering Passive mode」を返します。同時に、データコネクションで使用するポート番号を返します。

パッシブモードの必要性

FTPはファイル転送に特化したプロトコルです。2つのコネクションを使用するのも、その方がファイル転送を行う上で効率が良いからに他なりません。
1つのコネクションでデータもコマンドも送ろうとすると、コマンドがデータに紛れてしまうなどして色々不都合が起こります。その点、2つのコネクションを使い分けることで、効率的なファイル転送が行えるようになります。

例えば、ファイルを送信している最中でも、コネクションを分けていれば、送信キャンセルや一時中断など細かく制御することが可能となります。

ただし、コネクションを2つ確立することはセキュリティの面で不都合が生じます。

特にアクティブモードは都合が悪いです。それは、FTPサーバーがFTPクライアントに対して接続要求するという点です。
例えば会社のネットワークでは、社内から社外への接続は緩やかに許可することが多いですが、社外から社内への接続は非常に厳しくなります。そのような構成下においてアクティブモードはとても扱いずらいです。なぜなら、FTPサーバー(社外)からFTPクライアント(社内)への接続要求は途中のファイアウォールでブロックされてしまうからです。

その問題を解決するのがパッシブモードです。
FTPサーバーからの逆接続をやめて、接続要求はあくまでFTPクライアントからとすることで、社内から社外への接続のみとなるわけです。

最近では、上記のようにセキュリティを考慮してパッシブモードが使われることが多いです。

2016年01月14日(木)|vsftpd FTPサーバー構築

FTPの仕組み

今回からはFTPサーバーを構築していきます。構築する前にまずは前提となる基礎知識から見ていきます。

FTPとは

FTPとは、File Transfer Protocol(ファイル・トランスファー・プロトコル)の略で、その何のとおり、ファイル転送用のアプリケーションプロトコルです。

FTPを使用してファイルをサーバーにアップロードしたり、サーバーからダウンロードすることができます。

FTPサーバー、FTPクライアントの二種類のソフトウェアを使用し、両ソフトウェアの間で接続を確立してファイルを送受信します。
その際、FTPサーバー側ではユーザー名とパスワードによる利用者の認証を行い、それぞれの利用者に許可された権限や領域でファイルの送受信が行われることになります。暗号化機能を備えていないためセキュアとはいえませんが、まだまだ現役で活躍しているプロトコルです。

anonymous FTP

ファイル送受信の際、ユーザー名とパスワードによる利用者認証を行うと上述しましたが、不特定多数の利用者にファイルを配布するなどの目的のため、利用者登録を行っていない者でも自由に接続できる「anonymous」(匿名)と呼ばれる特殊なユーザーを作成することができます。

そのようなユーザーを「匿名ユーザー(anonymous user)」などと呼ばれ、認証を必要とせず、誰でもアクセス可能となります。

匿名ユーザーでアクセスするときは、ユーザ名に「anonymous」、パスワードは任意(空欄でもよい)を指定します。ただし、マナーとしてメールアドレスを入力することが多いです。

このような利用形態を「anonymous FTP」と呼び、不特定多数の人へファイルを公開する場合などで使われます。

バイナリモードとASCIIモード

FTPにはバイナリモードとASCIIモードの2つのモードがあります。FTPクライアントはどちらのモードを使用するかを指定して送信します。

バイナリモードは送信側から送ったファイルをまったくそのまま転送することを目的としていますが、ACSIIモードの場合はOS側で異なる改行コードを自動的に修正してくれる機能を持っています。

2つのモードの使い分けとして、zipやexeファイルなどのバイナリファイルを送信する場合はバイナリモード、テキストファイルはASCIIモードを選びます。

よくやるミスとして、バイナリファイルをASCIIモードで送信してしまい、受信側ではそのバイナリファイルが破損してしまっており、開けないといったことです。例えばExcelのファイルはバイナリファイルになりますが、ASCIIモードで送信して、受信側では開けないとなどといったケースです。

vsftpdとは

vsftpd(Very Secure Ftp Daemon)は、その名のとおり、セキュリティが高く、安定性に優れているFTPサーバーです。

Redhat Linux、FedoraやCentOSには、vsftpdが標準で付属しています。

FTPサーバー(ソフトウェア)は無償で使えるものから有償なものまで数多く存在します。それらと比較して、vsftpdは高機能とは言えませんが、軽くて高速なのが特徴です。

また、設定、保守も比較的容易であることなどから商用のサイトでもよく使われています。

2016年01月11日(月)|vsftpd FTPサーバー構築

サイト内検索

カテゴリー

  • Apache2.2構築
  • BIND DNSサーバー構築
  • Linux基礎知識
  • NTPサーバー構築
  • vsftpd FTPサーバー構築

サイト情報

  • 当サイトについて
  • 免責
  • お問い合わせフォーム
  1. CentOSサーバー構築入門
  2. vsftpd FTPサーバー構築の記事一覧

CentOSサーバー構築入門

CentOSによるサーバー構築方法をわかりやすく解説しています。
  • 特定商取引法に基づく表示
  • 運営者情報
  • お問い合わせ
  • サイトマップ
  • twitter
  • facebook
  • Google +1
  • RSS
Copyright ©2025 CentOSサーバー構築入門 All Rights Reserved.

[↑]このページの先頭へ