はじめに
AWSやさくらvpsなどのレンタルサーバで自分らのサービスを作りたいとき、
デプロイ or アップロードなどは困るときありますよね。
特に画像なんかはエンジニア以外も上げるときが多いかと思います。
そんなときはいっそのことftpサーバを立てちゃうのはひとつの手です。
ということで今回はvsftpdを使ってftpサーバを立ててfptクライアントのFileZillaから接続してみるまでのメモ。
FileZillaはmacでもwindowsでも使えるのでいいですね。
アジェンダ
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の自動起動の設定
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するユーザがログイン時に見れるディレクトリ以外へのアクセスを制限したいとき
- fptするユーザをいくつか用意してログイン時のディレクトリ以外も見れるようにしたいとき
こちらが非常に参考になります
- FTPサーバ (vsftpd-2.0) の設定
- [FreeBSD][Linux]vsftpdでchrootの設定を行うには。
- chroot_list と user_list による権限管理|vsftpd
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. FileZillaでftpにつないでみる
さっそくFileZillaから接続してみます。
まだダウンロードしていない場合は下記リンクからダウンロードしてインストールまで行います。
https://filezilla-project.org/
FileZilla.app
を開くとこのような画面が出ます。
それぞれ入力してQuickconnect
ボタンで接続します。
接続されると画面上部に接続したログが、右側に接続先のディレクトリの中身が表示されます。
まとめ
サクっと書こうと思ったら予想以上に長い記事になってしまいました^^;
セキュアさは弱いイメージのftpですが、ライトにアップロードしたい場合なんかには役立ちますね!
enjoy!