FTPD.CONF(5)

名称
ftpd.conf - ftpd(8) 設定ファイル

解説
ftpd.conf ファイルには、ユーザが各自のコネクションを認証した 直後に適用される ftpd(8) に対する各種の設定オプションを指定します。

ftpd.conf は行の並びからなり、 各行は設定ディレクティブ、コメント、空行からなります。 ファイルの中でより後ろに出現するディレクティブは その前で定義されたディレクティブの設定を オーバライドします。 これにより ‘wildcard’ エントリでデフォルトを定義し、 その後で class 専用のオーバライドを定義することができます。

ディレクティブ行の書式は以下のとおりです。
    command class [arguments]

“\” はエスケープ文字です。 この文字はコメント文字の機能をエスケープしたり、 行の最後の文字である場合には設定ディレクティブを 複数行にわたって延長することに使用できます。 “#” はコメント文字であり、この文字から行の最後までの すべての文字が無視されます (ただしエスケープ文字で エスケープされていない場合に限ります)。

認証される個別のユーザは class のメンバであり、 ftpusers(5) で決定されます。 class はそのユーザに適用される ftpd.conf のエントリを決定するときに使用されます。 ftpd.conf のエントリを構文解析するときには以下のような 特別な class が存在します。
all 任意の class にマッチします。
none
    どの class にもマッチしません。

各 class には type があり、以下のうちの1つです。

GUEST
    “(anonymous” か “ftp” としてのログインによる) ゲスト。 ログイン後に chroot(2) が実行されます。

CHROOT
    ((ftpchroot) 5 による) chroot(2) ユーザ。 ログイン後に chroot(2) が実行されます。

REAL
    通常ユーザ。

ftpd(8) の STAT コマンドは、ログインしているユーザの class に対し private ディレクティブが設定されていなければ、 ftpd.conf で定義される当該ユーザの class 設定を戻します。

設定行は以下のいずれかになります。

advertise class host

advertize class host
    host のアドレス (host 名か IP アドレス) を PASV と LPSV コマンドへの応答に通知するアドレスとして 設定します。 これはファイアウォールが設定されている場合には 有用なことがあります。 ただし、通知されるアドレスが接続しているアドレス と異なっている場合には、 多くの ftp クライアントは機能しません。 class が “none” であるかまたは引数がない場合には、無効になります。

checkportcmd class [off]
    PORT コマンドの正当性を検証します。 指定された IP アドレスが ftp コマンドのコネクションとマッチしない場合や、 リモートの TCP ポート番号が IPPORT_RESERVED より小さい場合には、 PORT コマンドは処理に失敗します。 このオプションを使用することを、 ftp バウンス攻撃についてセキュリティ上潜在的な問題が あるサイトについては 特に、 推奨します。 class が “none” であるかまたは off が指定された場合には、この機能は無効になります。 そうでない場合には、有効になります。

chroot class [pathformat]
    pathformat が指定されないか、または class が “none” である場合には、 デフォルトの動作 (下記参照) を行います。 そうでない場合には、 pathformat は構文解析されて、ログイン時に chroot(2) でルートディレクトリとされるディレクトリを生成します。

    pathformat は以下のエスケープ文字列を混在できます。
    エスケープ文字
        解説
    %c  class 名。
    %d  ユーザのホームディレクトリ。
    %u  ユーザ名。
    %%  “%” 文字。

    デフォルトのルートディレクトリは以下のとおりです。
    CHROOT
        ユーザのホームディレクトリ。
    GUEST
        -a anondir が指定された場合は anondir, を使用します。指定されない場合は、 ‘ftp’ ユーザのホームディレクトリを使用します。
    REAL
        デフォルトでは chroot(2) コマンドは実行しません。

classtype class type
    class の class type を type (上記参照) に設定します。

conversion class
    suffix [type disable command] 組込みの自動的なファイル変換を定義します。 取得されるファイル名の末尾が suffix で終わっていて、 (suffix のない) 本当のファイルが存在する場合には、 そのファイルの内容ではなく command の出力が戻されます。

    suffix
        変換を開始させるサフィックスです。

    type
        変換が正当であるファイル型の並びです。 正当な型は ‘f’ (ファイル) および ‘d’ (ディレクトリ) です。

    disable
        存在する場合には変換を抑止するファイル名です。 ファイル名が “~”. である場合にはこの禁止動作を抑止します (即ち、 変換は常に許可されます)。

    command
        変換を行うコマンドです。 execv(3) を使用してコマンドを実行するので、 最初の単語はコマンドの完全なパス名を指定してください。 command 中に出現する全ての単語 “%s” は要求されたファイル (ただし suffix はない) と置換されます。

    ファイル中の後方で定義された conversion ディレクティブは 同じ suffix で前方にある conversion ディレクティブを オーバライドします。

denyquick class [off]
    PASS コマンドを受付けた後ではなく、 USER コマンドを受付けた後に ftpusers(5) ルールを適用します。 この機能を有効にすれば利用可能なアカウント (例えば、 一部のユーザは REAL または CHROOT の class を許可されるが、他の ユーザは許可されない場合) について情報漏洩が生じるものの、 ‘(root’ のような) 禁止されたユーザが安全でないコネクションを経由して パスワードを入力することを予防することに役立ちます。 このオプションは anonymous だけのサービスを実行するサーバに 特に 推奨します。 class が “none” であるかまたは off が指定された場合にはこの機能は無効になります。 そうでない場合には有効になります。

display class [file]
    file が指定されないか、または class が “none” である場合には、これは無効となります。 そうでない場合には、 ユーザが新しいディレクトリに入る度に、 file が存在するか調べ、 存在すればその内容をユーザに表示します。 エスケープシーケンスがサポートされています。 より詳細な情報については ftpd(8) の Display file escape sequences を参照してください。

homedir class [pathformat]
    pathformat を指定しないかまたは class が “none” である場合には、デフォルトの動作 (以下参照) を行います。 そうでない場合には、 pathformat は構文解析され、ログイン時に移行するディレクトリを生成したり、 パス名のティルダを展開してユーザの ‘ホーム’ ディレクトリとして使用するなどされます。 pathformat は chroot ディレクティブの場合と同様に構文解析されます。

    デフォルトのホームディレクトリは REAL ユーザについてはユーザのホームディレクトリであり、 GUEST や CHROOT ユーザについては / ディレクトリとなります。

limit class
    count [file] class の同時実行するコネクションの最大数を count に制限します。 ‘0’ で無制限な数のコネクションを指定します。 制限が超過していて file が指定されていれば、その内容をユーザに表示します。 class が “none” であるかまたは count が指定されていない場合には、無効となります。 file が相対パスである場合には、 /etc ディレクトリ (ただし、これは -c confdir でオーバライドできます) から探索されます。

maxfilesize class size
    アップロードされるファイルの最大長を size に設定します。 class が “none” であるかまたは引数が指定されない場合には、無効となります。

maxtimeout class time
    クライアントがリクエストできる最大のタイムアウト時間を設定します。 デフォルトは 2 時間です。 この時間は 30 秒以下にはできず、また timeout 値以下にもできません。 class が “none” であるかまたは time が指定されない場合には、デフォルトである 2 時間に設定されます。

modify class [off]
    class が “none” であるかまたは off が指定された場合には、次のコマンドを無効にします : CHMOD, DELE, MKD, RMD, RNFR, UMASK. そうでない場合には、これらのコマンドを有効にします。

motd class [file]
    file が指定されないかまたは class が “none” である場合には、無効となります。 そうでない場合には、 file をログイン後に表示する「今日の連絡事項 (the message of the day)」 ファイルとして使用します。 エスケープシーケンスがサポートされます。 より詳細な情報については ftpd(8) の Display file escape sequences を参照してください。 file が相対パスである場合には、 /etc ディレクトリ (ただし、これは -c confdir でオーバライドできます) から探索されます。

notify class [fileglob]
    fileglob が指定されないかまたは class が “none” である場合には、無効となります。 そうでない場合には、ユーザが新しいディレクトリに入る度に fileglob にマッチする任意のファイルをユーザに告知します。

passive class [off]
    class が “none” であるかまたは off が指定された場合には、パッシブコネクション (PASV, LPSV, EPSV) を無効にします。 そうでない場合には、有効にします。

portrange class min max
    パッシブなデータポートに使用されるポート番号の範囲を設定します。 max は min より大きくなければなりません。 どちらの番号も IPPORT_RESERVED (1024) と 65535 の間でなければなりません。 class が “none” であるかまたは引数が指定されない場合には、無効となります。

private class [off]
    class が “none” であるかまたは off が指定された場合は、 STAT コマンドの出力の中に class 情報を表示しません。 そうでない場合には、 class 情報を表示します。

rateget class rate
    class に対する get (RETR) 最大転送速度のスロットルを毎秒 rate バイトに設定します。 rate が 0 である場合には、スロットルは無効になります。 class が “none” であるかまたは引数が指定されない場合には、無効になります。

    オプションのサフィックスを付加して、 rate の解釈を以下のように変更できます。
    b   変更はありません。 (デフォルト、省略可)
    k   キロ。引数を 1024 倍します。
    m   メガ。引数を 1048576 倍します。
    g   ギガ。引数を 1073741824 倍します。
    t   テラ。引数を 1099511627776 倍します。

rateput class rate
    class に対する put (STOR) 最大転送速度のスロットルを毎秒 rate バイトに設定します。 rate は rateget rate の場合と同様に構文解析されます。 class が “none” であるかまたは引数が指定されない場合には、無効になります。

sanenames class [off]
    class が “none” であるかまたは off が指定される場合には、 アップロードされるファイル名に ファイル名として正当な任意の文字を含めることができます。 そうでない場合には、 ‘’. で始まらず、かつ集合 “[-+,._A-Za-z0-9]” の要素である文字からだけ構成されるファイル名を許可します。

template class [refclass]
    refclass を class の ‘テンプレート’ として定義します。 以降のディレクティブで行われる refclass へのいかなる参照も class のメンバに適用されます。 共通の属性を共有すべき他のクラスを 不必要な重複なしに容易に定義できるため、 このようにしてテンプレートクラスを定義することは有用です。 1 度にただ 1 つのテンプレートを定義することが可能です。 refclass が指定されない場合には、 class に対するテンプレートは無効になります。

timeout class time
    無活動のタイムアウト時間を設定します。 (デフォルトは 15 分です。) これは 30 秒以下にはできず、また maxtimeout 値以上にもできません。 class が “none” であるかまたは time が指定されない場合には、デフォルトである 15 分に設定されます。

umask class umaskval
    umask に umaskval を設定します。 class が “none” であるかまたは umaskval が指定されない場合には、デフォルトである 027 に設定されます。

upload class [off]
    class が “none” であるかまたは off が指定された場合には、 修正コマンド CHMOD, DELE, MKD, RMD, RNFR, UMASK に加え、次のコマンドが無効になります : APPE, STOR, STOU 。 その他の場合には、これらのコマンドは有効になります。

デフォルト
以下のデフォルトを使用します。

    checkportcmd  all
    classtype     chroot CHROOT
    classtype     guest  GUEST
    classtype     real   REAL
    display       none
    limit         all    -1     # 無制限な数のコネクション
    maxtimeout    all    7200   # 2 時間
    modify        all
    motd          all    motd
    notify        none
    passive       all
    timeout       all    900    # 15 分
    umask         all    027
    upload        all
    modify        guest  off
    umask         guest  0707

関連ファイル
/etc/ftpd.conf
    このファイル。
/usr/share/examples/ftpd/ftpd.conf
    ftpd.conf のサンプルファイル。

関連項目
ftpchroot(5), ftpusers(5), ftpd(8)

歴史
ftpd.conf の機能は、Simon Burge の業績に基づき、Luke Mewburn が NetBSD 1.3 および以降のリリースに実装しました。