tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【vsftpd】さくらvpsにftpサーバ(vsftpd)を立ててFileZillから接続してみる

はじめに

AWSやさくらvpsなどのレンタルサーバで自分らのサービスを作りたいとき、
デプロイ or アップロードなどは困るときありますよね。
特に画像なんかはエンジニア以外も上げるときが多いかと思います。

そんなときはいっそのことftpサーバを立てちゃうのはひとつの手です。
ということで今回はvsftpdを使ってftpサーバを立ててfptクライアントのFileZillaから接続してみるまでのメモ。

FileZillamacでもwindowsでも使えるのでいいですね。

アジェンダ

  1. ftpサーバ(vsftpd)入れる
  2. ftpサーバ(vsftpd)の設定する
  3. ftp用ポートを解放する(iptables)
  4. FileZillaftpにつないでみる

1. ftpサーバ(vsftpd)入れる

yumを使ってinstallするだけです。サクっとやっちゃいましょう

# お決まりのupdateをしてから
$ sudo yum update

# vsftpdのインストール
$ sudo yum -y install vsftpd

# もし消すときはremoveで
$ sudo yum -y remove vsftpd

# 念のため起動してみる
$ sudo /etc/rc.d/init.d/vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]

2. ftpサーバ(vsftpd)の設定する

ftpサーバ(vsftpd)の設定をします。

  • vsftpdの自動起動の設定
  • vsftpdの設定ファイルの編集
  • vsftpdの設定ファイルで指定したファイルを作成
  • ftpするユーザごとのログイン時ディレクトリを設定する
  • vsftpdのリスタート(設定の反映)

vsftpdの自動起動の設定

fptに限らずよくやることなのでさらっとやりましょう

# 自動起動設定する前に念のため確認
$ sudo chkconfig --list vsftpd
vsftpd          0:off   1:off   2:off   3:off   4:off   5:off   6:off

# 自動起動設定
$ sudo chkconfig vsftpd on

# 再度確認
$ sudo chkconfig --list vsftpd
vsftpd          0:off   1:off   2:on    3:on    4:on    5:on    6:off

vsftpdの設定ファイルの編集

こちらもそこまで大変ではないので、サクっとやっちゃいましょう。
設定内容はこちらを参考にさせていただきました!thx!

# 念のためデフォルトの設定ファイルをバックアップ
$ sudo cp -ap /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bk.20151011

# 設定ファイル編集
$ sudo vi /etc/vsftpd/vsftpd.conf
---- vi 編集 ----
# 匿名アクセスの禁止
anonymous_enable=YES
↓
anonymous_enable=NO

# グループ書き込み可能になるように002に変更
# つまり、書き込み時のパーミッションを022(=644)から002(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_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=/etc/vsftpd/chroot_list

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

# 
# 以下、ファイル末尾に追加する項目。編集する項目じゃないのでコピペでいいですね
# 

# /etc/vsftpd/user_listのユーザーだけを許可
userlist_deny=NO

# タイムスタンプ時間をローカル時間にする
use_localtime=YES

# PASVのポート範囲を設定
listen_port=50000
pasv_enable=YES
pasv_min_port=50001
pasv_max_port=50020

# ユーザーのログイン時ディレクトリの指定
# local_rootを書かないとホームディレクトリ
# しかし、これはftpするユーザごとの設定ではない。
# ユーザごとに設定したいので、この行は追加せずにやり方は後述します。
# 「ftpするユーザごとのログイン時ディレクトリを設定する」の項目を参照してください
# local_root=/var/www/html

-----------------

補足

補足としてパラメータについて参考サイトのリンクも載せておきます

lcoal_umask

ファイルのパーミッションであるumask(lcoal_umask)についてはこちらを見ると分かりやすいと思います。

ascii_upload_enable/ascii_download_enable

cgiやプログラムをあげる際は、改行コードを変更してくれるアスキーモードで転送したいですよね。
vsftpdはデフォルトではbinaryモードでの転送になっているようです。

ftpd_banner
chroot_local_user/chroot_list_enable/chroot_list_file

これは用途によってなんですが軽く補足。
内容の説明というよりは、用途のパターンとそのときの設定例を書いておきます。

  • fptするユーザがログイン時に見れるディレクトリ以外へのアクセスを制限したいとき
    • chroot_local_user=YES
    • #chroot_list_enable=YES(コメントのまま)
    • #chroot_list_file=/etc/vsftpd/chroot_list(コメントのまま)
  • fptするユーザをいくつか用意してログイン時のディレクトリ以外も見れるようにしたいとき
    • #chroot_local_user=YES(コメントのまま)
    • chroot_list_enable=YES
    • chroot_list_file=/etc/vsftpd/chroot_list(このファイルにユーザを追加する)

こちらが非常に参考になります

userlist_deny

userlist_enable=YESの場合のみ有効な項目。
userlist_deny=NOでユーザーリストファイルに記述したユーザーのみFTPサーバーにログイン可能になる。

use_localtime

デフォルトでGMTなのをlocaltimeを使用する。
chrootされたユーザ(ログインディレクトリから外を見れないユーザ)は/etc/localtimeが見れないためにおかしくなることがあるらしい。

listen_port/pasv_enable/pasv_min_port/pasv_max_port

pasv_enableはデフォルトでYESなので設定しなくても同じですね。
自分は明示的に指定したいので入れてます。
下記が詳しいです

vsftpdの設定ファイルで指定したファイルを作成

ユーザに関しては下記の流れで行います

  • fptするユーザを作成する
  • ftpするユーザを/etc/vsftpd/user_listに追加する
  • /etc/vsftpd/chroot_listを作成してユーザを追加する
  • vsftpdのリスタート(設定の反映)
fptするユーザを作成する
# ユーザの作成
$ sudo adduser --shell /sbin/nologin --home /var/www ftpuser

sudo adduser --shell /sbin/nologin ftpuser

# 作成したユーザのパスワードを設定する
$ sudo passwd ftpuser
ftpするユーザを/etc/vsftpd/user_listに追加する

/etc/vsftpd/user_listというファイルにユーザを追記します。

# ファイルにftpuserを追加
$ sudo vi /etc/vsftpd/user_list
/etc/vsftpd/chroot_listを作成してユーザを追加する

これはファイルのみ作成して中身はカラでも良いです。
追加したユーザはログイン時ディレクトリの外に出れるようになるので、
制限したい場合は追加しないほうが良いです。

# /etc/vsftpd/chroot_listを作成してftpuserを追加
$ sudo vi /etc/vsftpd/chroot_list

ftpするユーザごとのログイン時ディレクトリを設定する

ftpするユーザごとにディレクトリを指定するには、
ユーザごとのlocal_rootを記載した設定ファイルを作成して
その設定ファイルの場所を/etc/vsftpd/vsftpd.confに記載してやります。

# ユーザごとの設定ファイルをおくディレクトリを作成する
$ sudo mkdir /etc/vsftpd/vsftpd_user_conf

# ユーザごとのファイルを作成する
# ファイル名はユーザ名と同じ
# 中身にそのユーザのアクセス可能なパスを書く
$ vi /etc/vsftpd/vsftpd_user_conf/ftpuser
---- vi作成 ----
local_root=/var/www/html/ftpuser/img
----------------

# /etc/vsftpd/vsftpd.confにユーザごとの設定ファイルを読み込む設定を追加
$ sudo vi /etc/vsftpd/vsftpd.conf
---- vi追記 ----
user_config_dir=/etc/vsftpd/vsftpd_user_conf
----------------

vsftpdのリスタート(設定の反映)

# リスタート
$ sudo /etc/rc.d/init.d/vsftpd restart

3. ftp用ポートを解放する(iptables)

/etc/vsftpd/vsftpd.confで設定したポートを解放してあげます。

# iptablesを編集
$ sudo vi /etc/sysconfig/iptables
---- vi追記 ----
# FTP
-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  -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 50001:50020  -j ACCEPT
----------------

# 再起動
$ sudo /etc/init.d/iptables restart
補足

iptablesについてはこちらを参考にしてみてください

4. FileZillaftpにつないでみる

さっそくFileZillaから接続してみます。
まだダウンロードしていない場合は下記リンクからダウンロードしてインストールまで行います。
https://filezilla-project.org/

FileZilla.appを開くとこのような画面が出ます。 f:id:tweeeety:20151011171804p:plain

それぞれ入力してQuickconnectボタンで接続します。

  • Host
  • Username
    • ftpするユーザ名。今回の例ではftpuser
  • Password
    • 作成したユーザのパスワード。今回の例ではsudo passwd ftpuserしたときのパスワード
  • Port
    • 接続するポート。今回の例ではlisten_port=50000で指定した50000

接続されると画面上部に接続したログが、右側に接続先のディレクトリの中身が表示されます。 f:id:tweeeety:20151011171813p:plain

まとめ

サクっと書こうと思ったら予想以上に長い記事になってしまいました^^;
セキュアさは弱いイメージのftpですが、ライトにアップロードしたい場合なんかには役立ちますね!
enjoy!