1. ファイル転送プロトコルの基礎知識
FTP(File Transfer Protocol)はアプリケーション層で動作するプロトコルで、主に以下の実装が存在します:
- サーバーソフトウェア:vsftpd, Pure-FTPd, FileZilla Server
- クライアントソフトウェア:ftpコマンド, lftp
データ転送モード:
- ASCIIモード:テキストファイル用
- バイナリモード:すべてのファイルタイプに対応
接続構造:
- コントロール接続:コマンド送信用
- データ接続:ファイル転送用
動作モード:
- アクティブモード(PORT):サーバーが特定ポートで待ち受け
- パッシブモード(PASV):クライアントが接続先を指定
パッシブモードが推奨される理由:ファイアウォール設定により高番ポートが制限されるケースに対応するため
2. vsftpdインストール手順
- iptables停止:
systemctl stop firewalld - SELinux無効化:
setenforce 0 - インストール確認:
rpm -q vsftpd - インストール実行:
yum install -y vsftpd - サービス自動起動設定:
systemctl enable vsftpd - サービス起動:
systemctl start vsftpd
3. 設定ファイル構成
基本設定:
# 書き込み権限のグローバル設定
write_enable=YES
匿名ユーザー設定:
anonymous_enable=YES
ftp_username=ftp
no_anon_password=YES
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
ファイル所有者設定:
# アップロードファイルの所有者変更
chown_uploads=YES
chown_username=test
4. アクセス制御
TCP Wrapper利用:
# /etc/hosts.allow設定例
vsftpd:192.168.121.0/255.255.255.0 :allow
all:all:deny
ユーザー制限:
- 禁止ユーザー一覧:
/etc/vsftpd/ftpusers - アクセス制御リスト:
/etc/vsftpd/user_list
5. ローカルユーザー設定
# ローカルユーザー認証有効化
local_enable=YES
local_mask=022
6. セキュリティ強化
ホームディレクトリ制限:
# ユーザーのホームディレクトリに制限
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
7. ロギング設定
# 転送ログ記録
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
8. 実践的設定例
要件:
- 匿名アクセス禁止
- 特定ローカルユーザーのみアクセス可
- ホームディレクトリ制限
- PASVモード使用
実装手順:
- 設定ファイル変更:
anonymous_enable=NO pasv_enable=YES pasv_min_port=10000 pasv_max_port=11000 userlist_deny=NO chroot_local_user=YES - ユーザー作成:
useradd -d /tmp/zxy zxy passwd zxy - アクセスリスト更新:
echo "zxy" > /etc/vsftpd/user_list - サービス再起動:
systemctl restart vsftpd