さくらVPSにFTPサーバー(vsftpd)を1時間で導入

FTP現在4つのサイトをさくらVPSで運用していますが、今まではファイルアップロードにWinSCPを使っていました。

WinSCPの使い勝手が想像以上に良かったのでFTPサーバーは入れていませんでしたが、複数のサイトを管理するようになると、やはり使い慣れたFileZillaが便利。

幾つかのブログを頼りに約1時間で導入完了できました。作業の流れをまとめます。

 

全体の流れ

FTPサーバーはvsftpdが定番のようなので、迷うことなくvsftpdを利用します。

  1. yumでvsftpdをインストール後に、設定ファイルを編集して起動。
  2. 次にFTPユーザーを追加、私はいつもの作業ユーザーを設定。
  3. 最後にファイヤーウォールであるiptablesでFTPのポートを開けて終了。

ほとんどの流れは初心者プログラマー奮闘記さんを参考にさせて頂きました。

 

vsftpdのインストール

sudoでルートになってyumで一発です。

yum -y install vsftpd

Complete!と表示されてインストール終了。自動起動するようにchkconfigで設定。

chkconfig vsftpd on

設定できたか確認。

chkconfig --list vsftpd
vsftpd          0:off   1:off   2:on    3:on    4:on    5:on    6:off

こんな表示になります。0~6までのランレベルにおける設定が表示されます。2~5のランレベルにおいてonになりましたが、環境によっては3~5だったりするようです。

ランレベルとはシステムの状態のことで、表を見れば0や6の時点でoffなのは納得できます。

ランレベル 0システムの停止
ランレベル 1シングルユーザモード
ランレベル 2マルチユーザモード (NFSマウントなし)
ランレベル 3マルチユーザモード (通常 : コンソールログイン)
ランレベル 4未使用
ランレベル 5マルチユーザモード (通常 : ディスプレイマネージャ使用)
ランレベル 6システムの再起動

 

vsftpdの設定

vsftpdはまだ起動していません。起動する前に設定ファイルを触ります。 /etc/vsftpd/に各種設定ファイルができています。vsftpd.confを設定します。

vi /etc/vsftpd/vsftpd.conf

以下の設定を変更しました。

#匿名アクセスを禁止に。
anonymous_enable=YES
↓
anonymous_enable=NO

#ファイルのパーミッションをグループ書き込み可の664に。
local_umask=022
↓
local_umask=002

#アスキーモードを有効に。
#ascii_upload_enable=YES
#ascii_download_enable=YES
↓
ascii_upload_enable=YES
ascii_download_enable=YES

#シグニチャを隠蔽。
#ftpd_banner=Welcome to blah FTP service.
↓
ftpd_banner=Welcome to blah FTP service.

#ホームディレクトリ上層を参照できるユーザー設定
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
↓
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

#サブフォルダを含む一括アップロード・ダウンロードを許可
#ls_recurse_enable=YES
↓
ls_recurse_enable=YES

#---ファイルの最後に以下の設定を追加---
#/etc/vsftpd/user_listのユーザーだけを許可。
userlist_deny=NO

#タイムスタンプ時間をローカル時間にする。(環境により必要なし)
#use_localtime=YES

#設定を簡単にするためにPASVのポート範囲を限定。
pasv_min_port=50000
pasv_max_port=50030

#ユーザーの初期アクセスディレクトリ。
#wwwで/home/ユーザー名/www
local_root=www

#ユーザのホームディレクトリより上位のディレクトリへの移動を不許可に。
chroot_local_user=YES

#.ファイルをアップ可能に
force_dot_files=YES

実はuse_localtimeをYESにすることで、ファイルをアップした時に更新日時が9時間ズレるのを防止できるハズなのですが、私の環境では、逆にuse_localtime=YESの状態で9時間ズレました。コメントアウトすることで正常となりました。すぐに解決してしまったので原因究明はしていません。

次にFTPユーザーを追加します。

vi /etc/vsftpd/user_list

自分自身か、あるいは新たにFTP専用ユーザーなどを作成して追加してください。

次にchroot_listという空ファイルを作成します。

echo > /etc/vsftpd/chroot_list

ホームディレクトリより上位のディレクトリへ移動できるユーザーを設定したい場合はchroot_listにユーザー名を記述します。

注意点としては、この動作はchroot_local_user=YESの場合で、chroot_local_userの記述がなかったりNOの場合は、逆に、chroot_listに記述したユーザーが上位にアクセスできなくなります。

つまり出来るだけ手間なく上位にアクセスできるユーザーを制限する設定となっています。

chroot_listについては、とても詳しい説明がスグラボさんで読めます。

ここまで来たら設定完了。vsftpdを起動します。

/etc/rc.d/init.d/vsftpd start

 

iptablesでFTPの為のポートを開ける

最後にファイヤーウォール、iptablesを編集します。

vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 50000:50030  -j ACCEPT

設定を反映&確認して終了です。

service iptables restart
iptables -L

あとはFTPクライアントで接続。アップ&ダウンロードが出来ればOKです。

私の場合はFileZillaで一発で接続できました。FTPクライアントに設定するユーザー名とパスワードは/etc/vsftpd/user_listに追加したユーザーのものです。

先程も書きましたが、ファイルをアップしたら更新日時が9時間ズレましたが、use_localtime=YESをコメントアウトすることで正常になりました。

 

プログラミングで悩んだ時は

93%の回答率が売りのエンジニアのための無料Q&Aサイト「teratail」。長く悩んでも答えが出ない時の為に、登録しておけば助かるかもしれません。