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コマンドを使用します。