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.allowAllowと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=NO

13.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で設定を行う他、起動時のオプションで動作を指定することもできる。

オプション説明
-4IPv4のみの利用
-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 no

13.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 50000

13.2.6. 匿名FTPサーバ

匿名FTPサーバ(Annonymous FTP)は匿名でFTPサーバを利用できるようにすること。
この場合chrootにより権限のないディレクトリにアクセスできないようにすることが重要となる。

方法としては以下の通り。

  1. /home/ftpなどのディレクトリを作成する
  2. /bin,/lib,/etcなどを作成しFTPサービス運営に必要なファイルをコピーする
  3. anonnymousユーザ用のディレクトリ(/home/ftp/pub)などを作成する
  4. /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