FTP

FTP (File Transfer Protocol) サーバソフトウェアの代表的なものには

  • wu-ftpd
  • ProFTPD
  • vsftpd etc...

などがあり、CentOS では、vsftpd (Very Secure ftpd) が採用されている

vsftpd の設定

vsftpd の設定ファイル
  • /etc/vsftpd/vsftpd.conf
基本的な書式
設定項目名=設定値
匿名FTP の有無

匿名FTP とは、サーバにアカウントがない場合でも、ユーザー名として anonymous, パスワードとして利用者のメールアドレスを使用すればログインできるFTPサーバのこと。アカウントのあるユーザーのみにFTPの利用を許可したい場合は「No」にする。

anonymous_enable=YES
ローカルユーザーのログイン許可

アカウントのあるローカルユーザのログインを許可するかどうかを指定

local_enable=YES
アップロードの許可

FTPでのファイルのアップロードを許可するかどうかを指定

write_enable=YES
匿名FTP でのファイルのアップロード

匿名FTP でのファイルのアップロードを許可するかどうかを指定。匿名FTP は誰もが利用可能なため、悪用されないよう基本的には禁止しておくが無難。その場合設定値は「NO」、もしくはコメントアウト(デフォルトではコメントアウトされ無効化)

anon_upload_enable=YES
匿名FTP でのディレクトリ作成の許可

匿名FTP でのディレクトリ作成を許可する。(デフォルトではコメントアウトされ無効化)

anon_mkdir_write_enable=YES
ログファイルへの記録

ファイルのアップロード/ダウンロードの情報をログファイルに記録する。
デフォルトのログファイルは /var/log/vsftpd.log

xferlog_enable=YES
TCP/Wrappers の利用

TCP Wrapper を使ったアクセス制御の有効/無効化

tcp_wrappers=YES

ユーザーが利用できるディレクトリを制限

デフォルトの設定では、一般ユーザーで FTPログインした場合、そのユーザーのホームディレクトリに移動する。cdサブコマンドを使ってシステム内のディレクトリツリーを自由に移動できてしまうため、セキュリティ上よろしくない。
各ユーザーのホームディレクトリより一切↑にはいかなようにする

ホームディレクトリ以外に移動できないように設定
chroot_local_user=YES

ユーザーのログインディレクトリを変更

ユーザーのホームディレクトリ内に、ディレクトリを作成しておき、FTPログイン時に ~/ディレクトリ名 にログインするようにするには下記の通り。

local_root=ftp
# Apache Webサーバを利用してユーザのホームディレクトリを公開している場合など
loclal_root=public_html

PASV モードの対応

FTP は基本的に、データ転送に20番ポート、制御用に21番ポートと、サーバ側で2つのポートを利用する。一般的に、クライアントとサーバ間で通信が行われる場合、クライアント側からサーバ側へ接続を要求する。FTP のデータ転送については、サーバ側からクライアント側へ接続を要求する。が、FTPのデータ転送については、サーバ側からクライアント側に接続できない事態が発生する恐れがあるlこのような場合、、FTPサーバを PASVモードを利用することで回避できる
PASVモードでは、FTPデータ転送についても、制御接続と同様 クライアント側からサーバへ接続を要求する。

PASVモードの有効化
pasv_enable=YES
vsftpd PASVモードを利用する
  • /etc/vsftpd/vsftpd.conf
pasv_enable=YES

FTP クライアントコマンド

コマンドラインでFTPサーバに接続してファイルのアップロード/ダウンロードを行うには lftpd コマンドが利用できる
アカウントを省略すると、匿名ユーザーとして自動的にログインできる

lftpd ホスト名

lftpd サブコマンド

コマンド 内容
ls ファイル名一覧を表示
cd ディレクトリを移動
lcd ローカルのディレクトリを移動
pwd カレントディレクトリを表示
get FILENAME 指定したファイルをダウンロード
mget FILENAME 指定したファイル(複数)をダウンロード
put FILENAME 指定したファイルをアップロード
mput FILENAME 指定したファイル(複数)をアップロード
mirror DIR 指定したディレクトリをミラーリングダウンロード
user USERNAME 匿名ユーザーでログイン中、指定したユーザーで入りなおす
!COMMAND ローカルでシェルコマンドを実行
quit 接続を終了