13.2. FTPサーバのセキュリティ
Linux/Unix系OSで使用されているFTPサーバにはwu-ftpdや設定が容易であるProFTPDや、安全性の高いvsftpd、セキュリティと実用性重視のPure-FTPDなどがある。
13.2.1. ProFTPD
ProFTPDはproftpd.confで設定を行う。
なお書式はApacheの設定と似ているため設定しやすい。
# アクセス時表示のサーバ名
ServerName                      "ProFTPD Default Installation"
# デーモン(standalone)かスーパーサーバ(inetd)経由かを指定
ServerType                      standalone
# バージョンを隠す
ServerIdent                     No
# Rootログインを許可しない
RootLogin                       Off
# ホームディレクトリより上のディレクトリに移動禁止
DefaultRoot
# PAM認証
AuthPAMAuthorization            on
# タイムアウトするまでの秒数
TimeoutIdle 120
# ポート番号
Port                            21
# Umask値
Umask                           022
# 最大接続クライアント数
maxClientPerHost                10
# 最大子プロセス数
MaxInstances                    30
# 子プロセスの実行ユーザ/実行グループ
User                            nobody
Group                           nobody
<Global>
    # ファイル上書きファイル転送の許可
    AllowOverwrite yes
    <Limit All SITE_CHMOD>
        # 全てのFTPコマンドとアクセス権限の変更
        AllowAll
    </Limit>
</Global>
# 読み取りは許可/書き込みは禁止
<Limit READ>
    AllowAll
</Limit>
<Limit STOR>
    DenyAll
</Limit>
# 全てのIPアドレスからのログイン許可
<Limit LOGIN>
Order Deny.Allow
Allow from all
</Limit>
# 匿名ログインの同時接続ユーザ数と超過メッセージ
MaxClients  100 "Sorry, max %m users -- try again later"
# ファイル転送ログ
TransferLog /var/log/proftpd/xferlog/legacyアクセス制御はLimitディレクティブで行う。
Limitディレクティブにはアクセス制御ディレクティブやFTPコマンド/FTPコマンドグループを記述できる。
<Limit FTPコマンド/FTPコマンドグループ>~</Limit>| アクセス制御ディレクティブ | 説明 | 
|---|---|
| Order Allow,deny/deny.allow | AllowとDenyがチェックされる順序 | 
| Allow from 場所 | 許可するホストやネットワーク設定 | 
| AllowAll | 許可を明示 | 
| AllowUser | 許可するユーザ | 
| AllowGroup | 許可するグループ | 
| Deny from 場所 | 拒否するホストやネットワーク設定 | 
| DenyAll | 拒否を明示 | 
| DenyUser | 拒否するユーザ | 
| DenyGroup | 拒否するグループ | 
| FTPコマンド | 説明 | 
|---|---|
| RETR | サーバからクライアントへのファイル転送 | 
| STOR | クライアントからサーバへのファイル転送 | 
| REN | ファイル名変更 | 
| DELE | ファイル削除 | 
| RMD | ディレクトリ削除 | 
| SITE_CHMOD | パーミッション変更 | 
| FTPコマンドグループ | 説明 | 
|---|---|
| DIRS | ファイル一覧の取得 | 
| READ | ファイルの読み取り | 
| WRITE | ファイル/ディレクトリの作成/削除 | 
| ALL | すべてのFTPコマンド | 
| LOGIN | ログイン | 
13.2.2. vsftpd
vsftpdの設定はvsftpd.confで設定を行う。
# ローカルユーザログインの許可
local_enable=Yes
# 書き込みを許可
write_enable=Yes
# umask値を022にする
local_umask=022
# 20番ポートからの送信接続
connect_from_port_20=YES
# ファイル転送ログを残す
xferlog_enable=YES
# ファイル転送ログファイル
xferlog_file=/var/log/vsftpd.log
# ログファイルの形式(YESの場合はwu-ftpdと同様の形式)
xferlog_std_format=NO13.2.3. FTPサーバのアクセス制御
FTPログインを許可しないユーザの指定は/etc/ftpusersにユーザリストを記述する。
主にrootユーザやシステムアカウントを記述すると良い。
root
bin
daemon
mail
:
:chroot機能で特定のディレクトリ以外のディレクトリにユーザが移動することを禁止できる。
これはセキュリティ上重要な設定となる。
- proftpd.confの場合- DefaultRoot ~
 
- vsftpd.confの場合- chroot_local_user=YES
- chroot_list_file=/etc/vsftpd.chroot_List
 
13.2.4. Pure-FTPD
Pure-FTPDの場合はpure-ftpd.confで設定を行う他、起動時のオプションで動作を指定することもできる。
| オプション | 説明 | 
|---|---|
| -4 | IPv4のみの利用 | 
| -A | 全ユーザにchrootの利用 | 
| -B | デーモンとして動作する | 
| -c 数 | 最大クライアント数 | 
| -C 数 | IPアドレスあたりの最大クライアント数 | 
| -e | 匿名ユーザのみログインを許可する | 
| -E | 匿名ユーザの利用拒否 | 
| -i | 匿名ユーザにファイルのアップロードを禁止する | 
# 全ユーザに対してchrootを適用
ChrootEveryone yes
# 最大クライアント数
MaxClientsNumber 50
# IPアドレス当たりの最大クライアント数
MaxClientPerIP 8
# Yesでデーモン動作、Noでxinitd経由(スーパーデーモン)
Daemonize yes
# ドットファイルの表示の有無
DisplayDotFiles yes
# PureDBの利用
PureDB /etc/pure-ftpd/pureftpd.pdb
# PAM認証の利用有無
PAMAuthentication no13.2.5. パッシブモード
通常FTPサーバはデータ転送に20/21番ポートを使用し、一般的にはクライアントからサーバ側へ接続要求を行う。
FTPのデータ転送に関してはFTPサーバ側からクライアントに接続要求するアクテイブモードと言われる方法となる。
この場合クライアント側のFWの設定なので接続できない場合があるためパッシブモードでFTPサーバを動作させることで回避できる。
パッシブモードではデータ転送の際にクライアント側からサーバへ接続要求することができる。
各サーバにおけるパッシブモードの設定方法は以下の通り。
# proftpd.confの場合
# ルータのWAN側IPアドレス
MasqueradeAddress 10.2.3.4
# 利用するポート設定
PassivePorts 52000 52020# vsftpdの場合
pasv_enable=YES# Pure-FTPDノヴァ愛
PassivePortRange 30000 5000013.2.6. 匿名FTPサーバ
匿名FTPサーバ(Annonymous FTP)は匿名でFTPサーバを利用できるようにすること。
この場合chrootにより権限のないディレクトリにアクセスできないようにすることが重要となる。
方法としては以下の通り。
- /home/ftpなどのディレクトリを作成する
- /bin,- /lib,- /etcなどを作成しFTPサービス運営に必要なファイルをコピーする
- anonnymousユーザ用のディレクトリ(/home/ftp/pub)などを作成する
- /home/ftpにchrootする
上記手順により他のディレクトリにannonymousユーザはアクセスできなくなる。
# proftpdの場合
<Anonymous ~ftp>
User ftp
Group ftp
    # ダウンロードのみ許可
    <Limit READ>
        AllowAll
    </Limit>
    <Limit STOR>
        DenyAll
    <Limit>
</Anonymous># vsftpdの場合
# 匿名FTPの許可
anonymous_enable=YES
# 匿名ユーザによるアップロード禁止
anon_upload_enable=NO
# 匿名ユーザによるディレクトリ作成などを禁止
anon_mkdir_write_enable=NO