05_vsftpd.md

2021/5/25

vsftpd
概要
旧来より広く使われる，FTPサーバを構築する．
また，Telnetによる通信の確認⽅法も習得する．

⽬次
1. FTPとは
2. SELinuxの無効化
3. 導⼊と起動設定
4. 設定
5. ファイルのアップロードとダウンロード

FTPとは
FTP (File Transfer Protocol)ファイル転送を⽬的としたサービスである．
ファイル転送のみを⽬的としたプロトコルとしてよく使われたが，近年はHTTP(S)によるWebサービスを⽤いてファイル転送することが多い．
通常のFTPでは，ユーザ名やパスワードが平⽂で交換されてしまう．
そこで，SSL/TLSにてログイン認証部を暗号化して⽤いることが多い．
⼀⽅，SSHによる暗号化した通信上でファイルを交換する，SFTP (SSH File Transfer Protocol) に切り替えるところもある．
TCPを使ったプロトコルの1つであるが，制御⽤(21番ポート)と転送⽤の2つのポートを⽤いる．
アクティブ(Active)モードとパッシブ(Passive)モードの2つがある．
アクティブモードは，以下の流れで接続する．
以下，クライアントの動作は[C]，サーバの動作は[S]で⽰す．
1. [C] サーバの21番ポートにアクセスし，制御⽤のコネクションを張る．
2. [C] 転送⽤コネクションのN番ポートを⽤意し，サーバに伝える．
3. [C] クライアントは，サーバにファイルの転送を要求する．
4. [S] N番ポートにアクセスし，転送⽤のコネクションを張る．サーバ側は20番ポートである．
5. [S-C] ファイルがサーバとクライアント間で転送される．
6. [S] 4. が切断される．
7. 他のファイルを転送する場合は，3. ~ 6. を繰り返す．
8. [C] 1. が切断される．
つまり，クライアントが接続ポート(N番)を与え，それに対してサーバがコネクションを張る．
旧来のような，サーバとクライアントが直接接続するような環境であると，この⽅法で⼗分である．
しかし，NAPTの環境のような，IPアドレスとポートが同時に書き換わるような環境であると，クライアントからのN番ポートが，サーバに到達する前に書き変わり，うまく動作しなくなる．
そこで，クライアントからコネクションを張る，パッシブモードが⽤意されている．
1/7

05_vsftpd.md

2021/5/25

1. [C] サーバの21番ポートにアクセスし，制御⽤のコネクションを張る．
2. [C] 転送⽤コネクションのためのポート番号をサーバに要求する．
3. [S] M番ポートをクライアントに通知する．
4. [C] サーバにファイルの転送を要求する．
5. [C] サーバM番ポートに転送⽤のコネクションを張る．
6. [S-C] ファイルがサーバとクライアント間で転送される．
7. [C] 5. が切断される．
8. 他のファイルを転送する場合は，3. ~ 7. を繰り返す．
9. [C] 1. が切断される．
つまり，サーバが接続ポート(M番)を与え，それに対してクライアントがコネクションを張る．
これならば，ポート番号が書き換わることがなく，間にNAPTがあったとしても動作する．

本演習では，FTPサーバを提供するアプリケーションの1つである， vsftpd を導⼊する．

応⽤1
どのような⽅法ならばセキュアにファイルをやり取りできるだろうか．

応⽤2
アクティブモード，パッシブモードを説明せよ．

SELinuxの無効化
CentOSは，Secure OSというセキュリティが強固なOSの1つであり， SELinux が導⼊されている．
本来は，有効化したまま運⽤することが望ましい．
また，有効化したまま⼀部のセキュリティのみを無効化することもできる．
しかし，本演習では，時間的束縛や基礎的知識の優先のため，無効化する．
動作モードには以下の3つがある．
1. Enforcing ... SELinuxの有効化する．
2. Permissive ... 警告モードである．セキュリティ違反があれば監査ログを残すのみである．
3. Disabled ... SELinuxの無効化する．

2/7

05_vsftpd.md

2021/5/25================================================================================
演習1-------------------------------------------------------------------------------/etc/selinux/config ファイルにて，SELinuxをpermissiveモードにせよ．
変更後は，適応のためシステムの再起動をすること．
================================================================================

導⼊と確認
1. yum コマンドを⽤いてアップデートを⾏え．
2. Apacheなどと同様に， vsftpd をインストールせよ．
3. firewall-cmd を⽤いて， ftp サービスと 60001/tcp ， 60002/tcp の通信を許可せよ．
4. VirtualBoxのポートフォーワードを設定せよ．
21番ポートをフォーワードする．(制御⽤)
60001番と60002番ポートをフォーワードする．(転送⽤)
5. systemctl コマンドを⽤いてサービスを起動せよ．
6. Telnetによる通信で，接続を確認せよ． Tera Term により，以下の⽂字が表⽰されれば接続できている．

220 (vsFTPd 3.0.2)================================================================================
Tips!
--------------------------------------------------------------------------------

3/7

05_vsftpd.md

2021/5/25================================================================================================================================================================
余談だが，IPによるネットワーク間通信のTCPとUDPの違いを述べる．
TCPは，コネクションという仮想回線を送信元と送信先に確⽴することで，通信の信頼性を担保する．
コネクションさえ張ってしまえば，確実な通信が⾏える．
しかし，コネクション毎にリソースをある程度使⽤する．
UDPは，コネクションを確⽴せず，パケットを投げつける．
信頼性は低いが，低いリソースで使⽤できる．
つまり，TCPは，HTTPやSMTPなどの⾼い信頼性が必要で，リアルタイム性の求められない処理に向いている．
UDPは，DNS，DHCP，動画配信など，パケットレベルでの正確性が求められないものに使われる．
================================================================================
4/7

05_vsftpd.md

2021/5/25

設定
以下に本システムに導⼊するFTPサーバの要件を⽰す．
1. 匿名ログインを許可しない．FTPサーバにアクセスできるのは，存在するユーザのみである．
2. ローカルユーザのログインを許可する．
3. 全てのFTPコマンドを許可する．ファイルシステムを変更するようなものも含める．
4. アップロードとダウンロードの詳細がログファイルに記録されるようにする．
5. 外から来る接続はアクセス制御を適⽤しない．
6. スタンドアロンモードを有効化する．
7. IPv6を待ち受けない．
8. PASVをデータ接続の開始において許可する．パッシブモードを使⽤する．
9. PASV コマンドへの応答において，vsftpd が伝える IP アドレスに 127.0.0.1 を指定せよ．
10. PASV でのデータ接続に割り当てるポートの最⼩値を 60001 にする．
11. PASV でのデータ接続に割り当てるポートの最⼤値を 60002 にする．
12. wu-ftpd で使われているような標準的な xferlog フォーマットで転送ログファイルを作成する．
参考⽂献として，以下を参照すると良い．
Man page of VSFTPD.CONF https://linuxjm.osdn.jp/html/vsftpd/man5/vsftpd.conf.5.html================================================================================
演習2-------------------------------------------------------------------------------configファイルを⾒つけ出し，上記の要件に従って，設定せよ．
なお，⼤体のconfigファイルは， /etc 配下やサブディレクトリ内に存在する．
find や grep コマンド， | (パイプ)を利活⽤すること．
================================================================================

応⽤3
なぜ，以下のような設定を⾏うのか思考せよ．
応⽤2と関連付けると良い．

PASV コマンドへの応答において，vsftpd が伝える IP アドレスに `127.0.0.1` を指定せよ．

ファイルのアップロードとダウンロード[W] で始まるのは，ホストOS(Windows)の操作である．
[C] で始まるのは，仮想マシン(CentOS)の操作である．
FTPクライアントは， FFFTP が推奨であるが，他のクライアントを使⽤しても構わない．
ただし，応⽤3の理由で，他のクライアントでの動作は難しいと考えられる(未検証)．
1. [W] FFFTP (FTPクライアント) をダウンロード，インストールする．
「FFFTP」定番FTPクライアントソフト - 窓の杜
https://forest.watch.impress.co.jp/library/software/ffftp/
2. [W] FFFTP の新規ホストを登録する．
5/7

05_vsftpd.md

2021/5/25

ホストは，127.0.0.1
ユーザ名とパスワードは，itakeharaとそのパスワード「拡張」タブより，「PASVモードを使う」にチェック必要ならばポートを変更「特殊機能」タブより，「PASVで返されるアドレスを無視」にチェック
3. [W] ホストに接続する．
接続できると，以下のように，WindowsとCentOSのファイル⼀覧が表⽰される．

4. [W] Alice.txt を作成する．
5. [W] FTPクライアントを⽤いて，CentOSに Alice.txt を転送する．
6. [C] Bob.txt を作成する．
7. [W] FTPクライアントを⽤いて，Bob.txt を取得する．
================================================================================
演習3-------------------------------------------------------------------------------CentOSとWindowsの両⽅に， Alice.txt と Bob.txt があることを⽰せ．
================================================================================================================================================================
演習4-------------------------------------------------------------------------------ファイルをやり取りしたログを /var/log/xferlog にて確認せよ．
================================================================================

参考⽂献
斎藤. "CentOS7で作るネットワーク・サーバ構築ガイド", 株式会社秀和システム, 2015/04/01 第1版.
TCPとUDPの違いと使い分け（第18回） | ⽇経クロステック（xTECH）
https://xtech.nikkei.com/it/pc/article/NPC/20070130/260041/ , 2020/11/29.

奥付

6/7

05_vsftpd.md

2021/5/25

Name
⽵原 ⼀駿 ( Ichitoshi TAKEHARA )所属
⾹川⼤学⼤学院 ⼯学研究科 信頼性情報システム⼯学専攻 最所研究室 M1
メールアドレス itakehara@fw.ipsj.or.jp-------------------------------------------------------------------------------2020/12/03 初版
2021/05/25 2版--------------------------------------------------------------------------------

7/7