現在4つのサイトをさくらVPSで運用していますが、今まではファイルアップロードにWinSCPを使っていました。
WinSCPの使い勝手が想像以上に良かったのでFTPサーバーは入れていませんでしたが、複数のサイトを管理するようになると、やはり使い慣れたFileZillaが便利。
幾つかのブログを頼りに約1時間で導入完了できました。作業の流れをまとめます。
全体の流れ
FTPサーバーはvsftpdが定番のようなので、迷うことなくvsftpdを利用します。
- yumでvsftpdをインストール後に、設定ファイルを編集して起動。
- 次にFTPユーザーを追加、私はいつもの作業ユーザーを設定。
- 最後にファイヤーウォールである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」。長く悩んでも答えが出ない時の為に、登録しておけば助かるかもしれません。