AccessGrantMsg

Syntax: AccessGrantMsg message
Default: Dependent on login type
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 0.99.0pl5 and later

通常、認証後直ちに FTP クライアントに 230 レスポンスメッセージが送信されます。標準的なメッセージはユーザがログインしたか、または anonymous アクセスが認められたことを示すものです。この message は AccessGrantMsg directive でカスタマイズされます。メッセージの引数では、magic cookie '%u' がログインの間にクライアントによって指定されたユーザ名に置き換えられます。例:

AccessGrantMsg "Guest access granted for %u."


Allow

Syntax: Allow ["from"] "all"|"none"|host|network[,host|network[,...]]
Default: Allow from all
Context: <Limit>
Compatibility: 0.99.0pl6 and later

Allow directive はホストやネットワークのアクセスで、コマンドや操作が制限されることを明確にするために <Limit> の中で使われます。Allow は普通、高度な(あるいは無防備な)アクセス制御を実現するために、OrderDeny を組み合わせて使います。Allow は最初の引数として; from をとります。from の使用はまったく表面的なことです。残りの引数は許可されたアクセスを明らかにするホストとネットワークを示すためのものです。all は、全てのホストのアクセスを許可するために使われます(優先度が低いことを除いては、AllowAll directive と似ています)。また、none はアクセスを許可されたホストやネットワークが存在しないことを示すために使われます(ですが、これは暗に許可されたアクセスは妨げません)。もし allnone が使われていれば、ホストやネットワークは指定されません。

ホストとネットワークのアドレスは名前か数字によって指定されます。セキュリティ上の理由から、全てのアドレスの情報は数字で示すことが推奨されています。名前だけに頼ると、attack や spoofing に対して無防備な DNS サーバに大きく依存することになります。ネットワーク全体を指定する場合には、数字をピリオドで終わらせます(すなわち、10.0.0 のサブネット全体なら 10.0.0. )。

例:

<Limit LOGIN>
Order Allow,Deny
Allow from 128.44.26.,128.44.26.,myhost.mydomain.edu,.trusted-domain.org
Deny from all
</Limit>


AllowAll

Syntax: AllowAll
Default: Default is to implicitly AllowAll, but not explicitly
Context: <Directory>, <Anonymous>, <Limit>, .ftpaccess
Compatibility: 0.99.0 and later

AllowAll directive は <Directory><Anonymous><Limit> に対するアクセスを明白に許可します。proftpd はデフォルトで特定のオブジェクトへのアクセスを許可し、デフォルトでは暗に許可しています。AllowAll は明白に許可して、高次の拒否 directive より優先します。


AllowForeignAddress

Syntax: AllowForeignAddress on|off
Default: AllowForeignAddress off
Context: server config, <VirtualHost&, <Anonymous>, <Global>
Compatibility: 1.1.7 and later

普通、proftpd は自身のアドレス(ftp コントロールの接続のソースアドレス)とは違うアドレスから ftp PORT コマンドを使うクライアントを拒否します。同じように、低い番号のポート(< 1024)を指定した場合にも退けます。どちらの場合にも、クライアントは "Invalid port" エラーを送信され、メッセージは "address mismatch" か "bounce attack" が syslog に出ます。この directive を可能にすることにより、proftpd はクライアントのアドレスと一致しない、関係のないアドレスとの接続をクライアントに許可します。これは、実際の接続に自分自身を含まない二つの FTP サーバ間で、ファイルを転送するクライアントを許可します。一般には、この種のことを許可するセキュリティ方法は賢くありません。

AllowForeignAddress は、アドレスの接続だけに作用します; tcp ポートではなく。PORT コマンドには低い番号のポートを使うクライアントを許可する方法がありません。


AllowGroup

Syntax: AllowGroup group-expression
Default: None
Context: <Limit>
Compatibility: 1.1.1 and later

AllowGroup は、それが適用されている <Limit> の中で特別に許可される group-expression を指定します。group-expressionDefaultRoot で使われているものと同じフォーマットで、アクセスを許可されたグループと"そうでない"グループをコンマで区切ったものです(プレフィックスとして`!'がグループ名に付きます)。表記はプール演算"と"リストとして解析され、表記にある全ての要素は割り当てを許可するために、論理的に真であることを評価しなければなりません。

See Also: DenyGroup, DenyUser, AllowUser


AllowUser

Syntax: AllowUser user-expression
Default: None
Context: <Limit>
Compatibility: 1.1.7 and later

AllowUser は <Limit> のコンテクスト内部で特別にアクセスを許可される user-expression を指定します。user-expressionAllowGroup で使われるものと記述が類似しています。アクセスを許可されたユーザと"そうでない"ユーザをコンマで区切ったものです(プレフィックスとして`!'がユーザ名に付きます)。表記はプール演算"と"リストとして解析され、表記にある全ての要素は割り当てを許可するために、論理的に真であることを評価しなければなりません。

See also: DenyUser, DenyGroup, AllowGroup


AllowOverwrite

Syntax: AllowOverwrite on|off
Default: AllowOverwrite off
Context: server config, <VirtualHost>, <Anonymous>, <Directory>, <Global>, .ftpaccess
Compatibility: 0.99.0 and later

AllowOverwrite directive は既に存在するファイルに上書きするファイル転送を許可します。デフォルトでは、ftp クライアントは上書きできません。


AnonRequirePassword

Syntax: AnonRequirePassword on|off
Default: AnonRequirePassword off
Context: <Anonymous>
Compatibility: 0.99.0 and later

普通、anonymous FTP のログインはクライアントに対して認証を要求しません。つまり、通常行われる、クリアテキストとして送信されたパスワードがhash 化されて、システムに存在するパスワードと一致するということをしません。代わりに、anonymous ログインはパスワードのプロンプトで e-mail アドレスの入力を要求します。AnonRequirePassword directive を可能にすると、anonymous ログインに対しても、anonymous デーモンが走っているユーザのパスワードと一致する、正当なパスワードの入力を要求します。これは、"guest" アカウントを作るときに使われます。普通の anonymous ログインのように機能しますが(従って、クライアントからは "chrooted" のファイルシステムは保護されます)、サーバのホストシステムに存在する正当なパスワードを要求します。

"guest" アカウントの設定例:

<Anonymous ~roger>
User roger
Group other
UserAlias proftpd roger
AnonRequirePassword on
# Deny write operations to all directories, underneath root-dir
# Default is to allow, so we don't need a <Limit> for read operations.
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
# Deny all read/write operations in incoming. Because these are command-group
# limits, we can explicitly permit certain operations which will take precedance
# over our group limit.
<Directory incoming>
<Limit READ WRITE>
DenyAll
</Limit>
# The only command allowed in incoming is STOR (transfer file from client to server)
<Limit STOR>
AllowAll
</Limit>
</Directory>
</Anonymous>


AllowRetrieveRestart

Syntax: AllowRetrieveRestart on|off
Default: AllowRetrieveRestart on
Context: server config, <VirtualHost>, <Anonymous>, <Directory>, <Global>, .ftpaccess
Compatibility: 0.99.0 and later

AllowRetrieveRestart directive は FTP REST コマンドによって、ファイル転送の読み出しの"再開"をクライアントに許可、あるいは拒否します。デフォルトでは可能になっていて、既に保存されたデータを失うことなしに、クライアントは中断されたファイル転送を再開します。


AllowStoreRestart

Syntax: AllowStoreRestart on|off
Default: AllowStoreRestart off
Context: server config, <VirtualHost>, <Anonymous>, <Directory>, <Global>, .ftpaccess
Compatibility: 0.99.0 and later

AllowStoreRestart directive は、保存ファイルの転送(クライアントからサーバに送られたもの)の"再開をすること"をクライアントに許可、あるいは拒否します。デフォルトでは(REST コマンドによって)再開は、サーバにファイルが送信されると許可されません。 再開される anonymous ftp の "incoming" の転送は不許可にするべきです。そうしないと、クライアントのせいで、先に保存されたファイル(クライアント所有でなくても)が壊れたり、サイズが大きくなったりするでしょう


<Anonymous>

Syntax: <Anonymous root-directory>
Default: None
Context: server config,<VirtualHost>
Compatibility: 0.99.0 and later

Anonymous 設定は anonymous FTP を作成するために使われるもので、</Anonymous> directive と組み合わせることによって終了します。root ディレクトリのパラメータはデーモンが最初に移動するディレクトリを指定して、ログインの後直ちにそこへ chroot します。一度 chroot 操作が成功すると、高次のディレクトリは走っている子のデーモンにアクセスできません(このようにユーザにログインします)。デフォルトで proftpd は、リモートクライアントが現在走っているユーザとしてログインを試そうとすると、anonymous ログインであると仮定します; カレントのユーザが root で、anonymous ログインが <Anonymous> の記述に存在するにも関わらず許可されない場合。カレントのユーザとは異なるユーザのログインは、anonymous になります。UserGroup directive を見てください。さらに、UserGroup directive が <Anonymous> の記述にあれば、デーモンは常に chroot() する前に、指定された uid/gid に切り替わります。

普通、anonymous ログインはパスワードによる認証を要求されませんが、通常のパスワード(ログされる)に代わって正しい e-mail アドレスの入力を求められます。もしこれが与えられた <Anonymous> 設定で望ましくないなら、AnonRequirePassword directive で無効にすることができます。

注: Chroot() した anonymous ディレクトリはそこに追加のシステムファイルを必要とせずなにか特別なディレクトリ構造も必要としません。これは、proftpd が chroot する前に、可能な限りのシステム情報を獲得するように作られているからです。そして、通常の操作に必要とされるファイルを開きっぱなしにして、新しい root ディレクトリの外に常駐させます。

典型的な anonymous FTP 設定の例:

<Anonymous /home/ftp>
User ftp # After anonymous login, daemon runs as user ftp.
Group ftp # After anonymous login, daemon runs as group ftp.
UserAlias anonymous ftp # Client login as 'anonymous' is aliased to 'ftp'.
# Deny write operations to all directories, underneath root-dir
# Default is to allow, so we don't need a <Limit> for read operations.
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
<Directory incoming>
<Limit READ WRITE>
DenyAll
</Limit>
<Limit STOR>
AllowAll
</Limit>
</Directory>
</Anonymous>


AnonymousGroup

Syntax: AnonymousGroup group-expression
Default: None
Context: server config, <VirtualHost>, <Global>
Compatibility: 1.1.3 and later

AnonymousGroup directive は anonymous ログインを考慮した、すべての一致するユーザに対して group-expression を指定します。group-expression の引数は、ユーザがメンバーでなければならないグループ(あるいはグループ名に`!'のプレフィックスが付いている場合には、非メンバー)の boolean logically ANDed リストです。group-expressions の情報については DefaultRoot directive を見てください。

もし認証ユーザが AnonymousGroup directive と一致して、要求される正当なパスワードを持っていなければ、特殊な動的 anonymous 設定が作られて、デフォルトの root ディレクトリとして、ユーザのホームディレクトリを使います。もし DefaultRoot directive もユーザに適用されると、このディレクトリがユーザのホームディレクトリの代わりに使われます。

AnonymousGroup を使うときには、十分な注意が必要です。不適切な設定は、全世界に対してユーザのホームディレクトリをフルの read/write アクセスを解放することになります。


AuthAliasOnly

Syntax: AuthAliasOnly on|off
Default: AuthAliasOnly off
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 1.1.3 and later

AuthAliasOnly は "aliase" されたログインに対する認証だけを制限します。すなわち、そのユーザ名は UserAlias directive によって真の userid に"マップされた"クライアントによって与えられます。AuthAliasOnly が特にコンテクストで `on' になっていると、proftpd はコンテクスト全体に対する non-aliase のログインを全て無視します。もし AuthAliasOnly が `on' になっている有効なコンテクストがないと、proftpd はクライアントのログインを拒否して、syslog に適当なメッセージを書きます。


AuthGroupFile

Syntax: AuthGroupFile path
Default: None
Context: server config, <VirtualHost>, <Global>
Compatibility: 1.0.3/1.1.1 and later

AuthGroupFile はシステムの /etc/group ファイルと同じフォーマットを持つ、代理の groups ファイルを指定します。もし指定されていれば、認証と、グループの directory/access コントロール操作の照合をしている間に使われます。path の引数は指定したファイルに対するフルパスです。AuthGroupFile は VirtualHost ベースで設定できるので、virtual FTP サーバはそれぞれ自身の認証データベースを持っています(大抵、AuthUserFile と共に使われます)。

このファイルは Anonymous や DefaultRoot ログインによる chroot() ディレクトリに置く必要はありません。クライアントの接続の間に開かれる恐れがあるからです。


AuthUserFile

Syntax: AuthUserFile path
Default: None
Context: server config,<VirtualHost>, <Global>
Compatibility: 1.0.3/1.1.1 and later

AuthUserFile はシステムの /etc/passwd ファイルと同じフォーマットを持つ、代理の passwd ファイルを指定します。もし指定されていれば、認証とユーザの directory/access コントロール操作の照合の間に使われます。path 引数は指定されたファイルに対するフルパスです。AuthUserFile は VirtualHost ベースで設定できるので、virtual FTP サーバはそれぞれ自身の認証データベースを持っています(大抵、AuthUserFile と共に使われます)。

このファイルは Anonymous や DefaultRoot ログインによる chroot() ディレクトリに置く必要はありません。クライアントの接続の間に開かれる恐れがあるからです。


Bind

Syntax: Bind address
Default: None
Context: server config, <VirtualHost>
Compatibility: 1.1.6 and later

Bind directive はメインか、VirtualHost の設定で向かう追加の IP アドレスを許可します。様々な Bind directive がアドレスにバインドするように使われます。address 引数は FQDN か IP アドレスのどちらかです。Bind によって追加されたアドレスに向かう Incoming の接続は、directive を含むコンテクストによって提供されます。さらに、SocketBindTighton になっていれば、特定の聞きに行く接続がそれぞれの追加アドレスのために作られます。


DefaultRoot

Syntax: DefaultRoot directory [group-expression]
Default: DefaultRoot /
Context: server config, <VirtualHost>, <Global>
Compatibility: 0.99.0pl7 and later

DefaultRoot directive は ユーザがログインしたときのデフォルト root ディレクトリを設定します。もし DefaultRoot が"/"以外のディレクトリに設定されていれば、chroot がクライアント認証の後直ちに行われます。これは、ホストのシステムファイル領域からクライアントを隔離するために使われます。指定された root ディレクトリは、/ で始まるものでなければなりません。または、クライアントがホームディレクトリに chroot して閉じ込められていることを示す '~' を使うことができます。もし、DefaultRoot directive がユーザのホームディレクトリにログインするアクセスを拒否するディレクトリを指定すると、ログイン後のユーザのカレントディレクトリは、通常のホームディレクトリの代わりに DefaultRoot になります。DefaultRoot は <Anonymous> 設定の記述では使われませんが、それは <Anonymous> directive が Anonymous ログインに使われる root ディレクトリを含んでいるからです。

'~' はログイン後、認証したユーザのホームディレクトリに置き換わります。デフォルト root は "~/anon-ftp" のように、ホームディレクトリのサブディレクトリになるかもしれないことに注意してください。

オプションの group-expression 引数は unix group、groups や groups のサブネットに対して DefaultRoot directive を制限するために使われます。expression のフォーマットは: [!]group-name1[,[!]group-name2[,...]] です。expression は論理 boolean AND で解析されます。expression のそれぞれの member は、DefaultRoot directive が割り当てるために、論理的に TRUE でなければなりません。'!'は group membership を打ち消すために使われます。

DefaultRoot を使うときには注意が必要です。chroot の"拘束" は一般的なシステムセキュリティを実行する方法として使うべきではありません。ユーザが拘束を "抜け出す" 可能性があるからです。

DefaultRoot の設定例:

ServerName "A test ProFTPD Server"
ServerType inetd
User ftp
Group ftp
#
# This causes proftpd to perform a chroot into the authenticating user's directory immediately after login.
# Once this happens, the user is unable to "see" higher level directories.
# Because a group-expression is included, only users who are a member of
# the group 'users' and NOT a member of 'staff' will have their default
# root directory set to '~'.
DefaultRoot ~ users,!staff
...


DefaultServer

Syntax: DefaultServer on|off
Default: DefaultServer off
Context: server config,<VirtualHost>
Compatibility: 0.99.0pl6 and later

DefaultServer directive は、incoming の接続がホストのプライマリ IP アドレスや、<VirtualHost> 設定の記述で指定されたアドレスの一つのどちらにも向いていない場合、サーバの設定がデフォルトで使われるようにコントロールします。普通、そのような "unknown" の接続は "no server available to service your request" というメッセージが出て、切断されます。DefaultServer がプライマリサーバの設定か、virtual サーバに対して on になっていると、全ての unknown な行き先の接続はデフォルトサーバによって受け取られます。単一サーバの設定はデフォルトに設定されます。


DeferWelcome

Syntax: DeferWelcome on|off
Default: DeferWelcome off
Context: server config, <VirtualHost>, <Global>
Compatibility: 0.99.0 and later

クライアントが認証を終了するまでに、DeferWelcome directive は、ServerName とアドレスを新しい接続に対して転送するのえを遅らせるために、マスターかvirtual server を設定します。もし可能なら、welcome メッセージは普通のものになり、デーモンがアクティブに走っているホストについての情報は何も与えません。これは、信用のない networks/host から可能になる "probing" の量を制限する、セキュリティ意識のある管理者によって使われます。


Deny

Syntax: Deny ["from"] "all"|"none"|host|network[,host|network[,...]]
Default: None
Context: <Limit>
Compatibility: 0.99.0pl6 and later

Deny directive は <Limit> のコンテクストを与えられたアクセスを拒否するホストやネットワークのリストを作成するために使われます。allnone は、それぞれ、全てのホストがアクセスを拒否されるか、拒否されるホストがないことを示すために使われます。Deny のシンタックスと慣用法についての情報はここを見てください: AllowOrder


DenyAll

Syntax: DenyAll
Default: None
Context: <Directory>, <Anonymous>, <Limit>, .ftpaccess
Compatibility: 0.99.0 and later

DenyAll directive は "order deny,allow <cr> deny from all" の組み合わせに似ています。ただし、構文解析のときに高次の前例がある場合を除きます。anonymous ftp や limit block で、ディレクトリへのアクセスを完全に拒否する方法として便利です。上位に付いているので、普通の Order/Deny directive と混合してはいけません。DenyAll directive は AllowAll を使うことにより、低次のディレクトリで無効になります。DenyAll と AllowAll は相互排他です。


DenyGroup

Syntax: DenyGroup group-expression
Default: None
Context: <Limit>
Compatibility: 1.1.1 and later

DenyGroup は、割り当てられている <Limit> のコンテクストで特別に拒否されている group-expression を指定します。group-expressionDefaultRoot で使われるものと同じフォーマットを持っています。それ故、アクセスを拒否される、コンマで区切られた、グループや、グループ"ではない"(グループ名の前に`!'が付いているもの)リストを含んでいます。expression は、boolean "と" リストとして解析され、expression の全ての要素は拒否を割り当てるために、論理的に真でなければなりません。

See Also: AllowGroup, AllowUser, DenyUser


DenyUser

Syntax: DenyUser user-expression
Default: None
Context: <Limit>
Compatibility: 1.1.7 and later

DenyUser は、割り当てられた <Limit> のコンテクストで明確に拒否される user-expression を指定します。user-expression はコンマで区切られた、ユーザや、ユーザ"ではない"(ユーザ名の前に`!'が付いているもの)リストです。expression は boolean "と" リストとして解析されます。expression の全ての要素は拒否を割り当てるために、論理的に真でなければなりません。

参照: AllowUser, DenyGroup, AllowGroup


<Directory>

Syntax: <Directory pathname>
Default: None
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 0.99.0 and later

この directive は、指定されたディレクトリと、そのサブディレクトリにだけ割り当てられる設定の directive です。記述は </Directory> で終わります。ディレクトリ毎の設定は "最も近似の" 一致をするアルゴリズムについては、run-time の間に可能になります。これは該当するファイルやディレクトリの実際のパス名と近似一致する <Directory> directive を意味します。ディレクトリ毎の設定は、近似一致する<Directory>に遭遇するまで、全てのサブディレクトリによって引き継がれます。これはオリジナルのディレクトリ毎の設定が近似一致と置き換わる時点です。これは <Limit> が近似一致に到達するまで、全てのサブディレクトリによって引き継がれる<Limit> </Limit>に対しては、割り当てられないことに注意してください。

Example:
<Directory /users/robroy/private>
HideNoAccess
</Directory>

後続のスラッシュとワイルドカード("/*")はディレクトリに付加され、実際のディレクトリ自身に対してではなく、コンテンツ(とそのサブディレクトリ)に対してだけ設定を割り当てるように指定します。ワイルドカードの一致はワイルドカードのない<Directory>設定より優先します。<Directory> の記述はネスト化されません(パス名を基にして run-time に自動的にネスト化されます)。パス名は常に絶対パスでなければならず(<Anonymous>内部を除く)、シンボリックリンクをリファレンスしません。<Anonymous> 記述にあるパス名は相対パスで、anonymous の root ディレクトリを基にしています。

[ProFTPD 1.1.3 とそれ以降での注意]
パス名は '~' で始まり、~ の後にはユーザ名を指定しません。そして、defer(保留) モードになります。保留モードでは、ディレクトリのコンテクストはハッシュ化されず、ブート時に設定ツリーに分類されますが、むしろこのハッシュ化は '~' 文字がユーザのホームディレクトリに置き換わる、ユーザ認証まで、保留します。その理由からこれは、全てのユーザほーむディレクトリやサブディレクトリに割り当てる <Directory> 全体を許可します。

Example:
<Directory ~/anon-ftp>
<Limit WRITE>
DenyAll
</Limit READ>
</Directory>


DirFakeGroup

Syntax: DirFakeGroup On|Off [groupname]
Default: DirFakeGroup Off
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 1.1.5

DirFakeGroup とその対になる directive である、DirFakeUser はディレクトリリストにあるファイルの真のグループと所有者ユーザを隠すために使われます。もし単純に On になっていれば、DirFakeGroup は 'ftp' グループの全てのファイルを表示します。DirFakeGroup と DirFakeUserの両方は、完全に表面的なものです; 指定されたグループ名とユーザ名がシステム上に存在する必要はなく、どんな方法であれ、directive はパーミッションや所有権、アクセス制御に影響しません。


DirFakeMode

Syntax: DirFakeMode octal-mode
Default: None
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 1.1.6

DirFakeMode directive はディレクトリの表示にある全てのファイルとディレクトリを表示するモード(あるいはパーミッション)を設定します。もし"read"パーミッションがこの directive によって指定されていれば、パーミッションの各部分(user, group, other)には、ディレクトリに対する"execute"パーミッションが追加されます。例えば:

DirFakeMode 0640

Will result in:

-rw-r----- ... arbitrary.file
drwxr-x--- ... arbitrary.directory

DirFakeUserDirFakeGroup と同様に、"fake" パーミッションは単なる表面的なもので、実際のパーミッションやアクセス制御にはなんら影響がありません。


DirFakeUser

Syntax: DirFakeUser On|Off [username]
Default: DirFakeUser Off
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 1.1.5

DirFakeGroup を見てください


DisplayFirstChdir

Syntax: DisplayFirstChdir filename
Default: None
Context: server config, <VirtualHost>, <Anonymous>, <Directory>, <Global>
Compatibility: 0.99.0 and later, magic cookies only in 0.99.0pl10 and later

DisplayFirstChdir directive は、初めて与えられたセッション毎(CWD 経由)のディレクトリに移動したユーザに表示させる ascii テキストのファイル名を設定します。もし proftpd がディレクトリで、前の CWD から、その最終変更時間が変わっていることを探知すれば、そのファイルが表示されます。ファイル名が相対パスなら、ユーザが移動した新しいディレクトリで捜します。anonymous ftp にログインの場合(<Anonymous> を参照)、ファイルが chroot() のファイルシステム空間内部に存在しなければなりません。 もしファイルが見つからなかったり、アクセスできないと、エラーは生じず、ログもされず、クライアントに表示もされません。

DisplayFirstChdir と DisplayLogin は、以下の"magic cookies"をサポートしています(0.99.0pl10 とそれ以降)。ユーザに対して表示する前にそれぞれの文字列に置き換わります。

%T   Current Time
%F   Available space on file system
%C   Current working directory
%R   Remote host name
%L   Local host name
%u   Username reported by ident protocol
%U   Username originally used in login
%M   Max number of connections
%N   Current number of connections
%E   Server admin's e-mail address

DisplayLogin

Syntax: DisplayLogin filename
Default: None
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 0.99.0 and later

DisplayLogin directive は、ユーザの最初のログインで表示される ascii のテキストファイル名を設定します。ファイル名は相対パスか、または絶対パスです。相対パスの場合、ファイルはユーザのログイン直後のディレクトリで検索されます(unix ユーザログインの場合はホームディレクトリ、anonymous ログインの場合は anonymous-root ディレクトリ)。anonymous ログインの場合、ファイルは chroot() のファイルシステム空間内部に存在しなければなりません。ファイルが見つからないか、アクセスできないと、エラーは生じず、ログもされず、クライアントに表示もされません。

DisplayLogin は DisplayFirstChdir のように、同じ "magic cookies" をサポートします。


ExtendedLog

Syntax: filename [[command-classes] format-nickname]
Default: None
Context: server config, <VirtualHost>, <Anonymous> <Global>
Compatibility: 1.1.6pl1 and later

ExtendedLog directive は全体的か、または、VirtualHost 毎のログファイルのカスタマイズを可能にします。filename の引数には、proftpd 起動時にアペンドされるログファイルに対する絶対パス名が書かれていなければなりません。様々なログファイル(異なるコマンドクラスとフォーマットの可能性のある)が作られます。

任意で、command-classes の引数はコマンドタイプのログをコントロールすることができます。もしコマンドクラスが指定されていなければ、proftpd はデフォルトで全てのコマンドをログします。command-classes はコンマで区切られた(空白があってはいけません!)、ログするコマンドのリストです。以下が有効なクラスです:

もし format-nickname 引数が割り当てられると、ExtendedLog はあらかじめ定義されたログフォーマットを使います(LogFormat によって作られます)。そうでなければ、"%h %l %u %t \"%r\" %s %b" のデフォルトのフォーマットが使われます。

例えば、/var/log/ftp.log (デフォルトフォーマットを使用) に対する全ての読み書きをログするためには:

ExtendedLog /var/log/ftp.log read,write

参照: LogFormat, TransferLog


<Global>

Syntax: <Global>
Default: None
Context: server config, <VirtualHost>
Compatibility: 1.1.6 and later

Global 設定は、メインサーバの設定と、全ての VirtualHost の設定に広く適用される設定 directive のセットです。Global の記述では、他の directive はまったく使われません。

さらに、様々な <Global> の記述が作られます。runtime では、Global の記述は最終的にそれぞれのサーバ設定に一緒にマージされます。Global の記述は </Global> directive で終了します。


Group

Syntax: Group groupid
Default: None
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 0.99.0 and later

Group directive はサーバのデーモンが普通に走るグループを設定します。詳しくは、User を見てください。


GroupOwner

Syntax: GroupOwner groupid
Default: None
Context: <Anonymous>, <Directory>, .ftpaccess
Compatibility: 0.99.0 and later

GroupOwner directive は、GroupOwner が割り当てられているコンテクスト内部で、新しく作られる全てのディレクトリやファイルを所有するグループを設定します。GroupOwner はホスト OS/file システムのパラダイムを無効にはしないことに注意してください。もし現在のユーザが指定されたグループのメンバーでなければ、新しいファイルとディレクトリは GroupOwner グループには chown() されません。もしこうなると、ファイル STOR (クライアントからサーバへのファイル転送) と MKD (mkdir) 操作は普通にうまくいきますが、新しいディレクトリのエントリは、望んだグループの代わりにカレントユーザのデフォルトグループの所有になります(warning のメッセージがログされます)。


GroupPassword

Syntax: GroupPassword groupid hashed-password
Default: None
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 0.99.0pl5 and later

GroupPassword directive は、単一のパスワードを使って認証するように指定されたグループの全てのユーザの特別な "group" を作ります。group/password は、GroupPassword が割り得てられるコンテクスト内部でだけ有効です。hashed-password 引数は、標準の unix crypt() ライブラリを使った、クリアテキストのパスワードです。もしグループのメンバーシップが注意深く扱われない場合には、セキュリティ上深刻な問題になるので、GroupPassword の使用には大きな注意が必要です。

参照: UserPassword


HideGroup

Syntax: HideGroup groupid
Default: None
Context: <Directory>, <Anonymous>
Compatibility: 0.99.0 and later

HideGroup directive は、グループが、認証されたユーザのカレントログインのプライマリグループでない限り、指定されたグループの所有するグループエントリを全て隠す、<Directory> か <Anonymous> の記述を設定します。普通、隠されたディレクトリとファイルは LIST や NLST コマンドでは見えず、他の FTP コマンドによって操作されます(CWD, DELE, RETR, 等)。これは、IgnoreHidden directive によって変更されます。

参照: HideUser, HideNoAccess, IgnoreHidden


HideNoAccess

Syntax: HideNoAccess
Default: None
Context: <Directory>,<Anonymous>
Compatibility: 0.99.0 and later

HideNoAccess directive は、認証されたユーザがアクセス権を持っていない、カレントログインでのディレクトリ表示にあるディレクトリのエントリを全て隠す、<Directory><Anonymous> の記述を設定します。通常の Unix-style のパーミッションが常に適用されるので、ユーザが HideNoAccess の割り当てられたディレクトリのエントリを見ることができなくても、やみくもにファイルシステムのオブジェクトを操作しようとすると、"Permission denied" のエラーメッセージを受け取ることになります。ディレクトリやファイルは、HideNoAccess と共に IgnoreHidden を割り当てることにより、全ての FTP コマンドで完全に見えなくなります。

参照: HideUser, HideGroup, IgnoreHidden


HideUser

Syntax: HideUser userid
Default: None
Context: <Directory>, <Anonymous>
Compatibility: 0.99.0 and later

HideUser directive は、所有ユーザが、カレントでログインしている認証されたユーザでない限り、指定されたユーザの所有するディレクトリのエントリを全て隠す、<Directory> か <Anonymous> の記述を設定します。通常、隠されたファイルとディレクトリは LIST や NLST のコマンドでは見れませんが、他の FTP コマンド(CWD, DELE, RETR, 等)で操作することは可能です。これは、IgnoreHidden directive によって変更されます。

参照: HideGroup, HideNoAccess, IgnoreHidden


IdentLookups

Syntax: IdentLookups on|off
Default: IdentLookups on
Context: server config, <VirtualHost>, <Global>
Compatibility: 1.1.5 and later

普通、クライアントが proftpd に接続すると、リモートユーザ名を確認するために ident プロトコル(RFC1413)が使われます。これは IdentLookups directive によるコントロールを可能にします。


IgnoreHidden

Syntax: IgnoreHidden on|off
Default: IgnoreHidden off
Context: <Limit>
Compatibility: 0.99.0 and later

通常、HideNoAccessHideUserHideGroup に隠されたファイルは、たとえディレクトリ表示に表れなくても、FTP コマンドによる操作が可能です(Unix ファイルのパーミッションがアクセスを許可しているものとします)。さらに、ファイルシステムのパーミッションがアクセスを拒否している場合でも、proftpd はクライアントに "Permission denied" のエラーを返します。これは、もし実際には動かなくても、要求されたオブジェクトが存在することを意味します。 IgnoreHidden は制限された FTP コマンドのセットのために、隠されたディレクトリのエントリを完全に無視する <Limit> を設定します。これは、クライアントが隠されたファイルやディレクトリに対して制限されたコマンドを使おうとしたときに、"No such file or directory" のようなエラーを返します。


<Limit>

Syntax: <Limit command|command-group [command2 ..]>
Default: None
Context: server config, <VirtualHost>, <Directory>, <Anonymous>, <Global>, .ftpaccess
Compatibility: 0.99.0 and later

Limit 設定は与えられたコンテクスト内部で、一つかそれ以上の FTP コマンドにアクセス制限をかけるために使います。Limits は下向きに流れるので、サーバ設定のコンテクストにある Limit の設定は、設定に存在する <Directory><Anonymous> の記述に割り当てられます; "lower" <Limit> の記述によって無効にされるまで。いくらでも command パラメータが、<Limit> のコンテクストの割り当てに対して、指定されます。command は有効な FTP コマンドですが、普通は以下のうちの一つです:

その他に、以下の command-groups が認められています。本当のコマンドりも優先度が低く、本当のコマンドの制限は常に command-group の代わりに割り当てられることを意味します。

最終的に、特別なコマンドはログインのアクセスをコントロールするために使われます:

<Limit> コマンドの制限は file/directory アクセスのパーミッションと混同してはいけません。limits は特定のディレクトリでのコマンドを制限するために使われますが、生来の operating/file システムのファイルのパーミッションを無効にはしません。

参照: IgnoreHidden


LogFormat

Syntax: LogFormat nickname "format-string"
Default: LogFormat default "%h %l %u %t \"%r\" %s %b"
Context: server config
Compatibility: 1.1.6pl1 and later

LogFormat directive は ExtendedLog を使ってカスタムのログフォーマットの作成を可能にします。一度作成されると、そのフォーマットが、指定された nickname によってリファレンスされます。

format-string の引数は、大文字、数字、記号の組み合わせになります。特に % は、メタシーケンスを開始するために使われます(以下参照)。文字として % を挿入したいなら、%% を使います。以下のメタシーケンスが有効で、ログのときに、指示されたものに置き換えます。

%b   リクエストに対して送信されたバイト数
%f   保存、もしくは読み出されたファイル名
%{FOOBAR}e   環境変数が FOOBAR のコンテンツ
%h   リモートホスト名
%a   リモート IP アドレス
%l   リモートユーザ名 (認証から)
%p   ローカルサーバのポート番号
%v   ローカルサーバ名
%P   ローカルサーバのプロセス id (pid)
%r   クライアントから受け取ったフルのコマンドライン
%t   現在のローカルタイム
%{format}t   フォーマットされた現在のローカルタイム (strftime(3) format)
%T   ファイルの送受信にかかった時間(秒)
%s   Numeric FTP レスポンスコード (ステータス)
%u   ローカルで認証された userid

参照: ExtendedLog, TransferLog


LsDefaultOptions

Syntax: LsDefaultOptions "options string"
Default: None
Context: server config, <VirtualHost>, <Global>
Compatibility: 1.1.6 and later

普通、ディレクトリ表示(NLST, LIST, STAT)を伴う FTP コマンドは、表示されるファイルと表示するフォーマットを決定する、クライアントによる引数(オプション)を使います。LsDefaultOptions directive の使用は、デフォルトのディレクトリ表示を変更することができますが、これは特定のオプションが常に存在することを示します。例えば、ディレクトリ表示で、".dotfiles"を常に強制的に表示するには:

LsDefaultOptions "-a"


MaxClients

Syntax: MaxClients number|none message
Default: MaxClients none
Context: server config, <Anonymous>, <VirtualHost>, <Global>
Compatibility: 0.99.0 and later

MaxClients directive は、サーバか anonymous アカウントにログされる、認証クライアントの最大数を設定します。一旦この制限一杯になると、それ以上の認証を試みるクライアントは切断されます。

特に none という値は、該当する設定コンテクストからの全ての最大接続制限を外すようにします。さらに、オプションの message 引数は、最大値を超えたときのクライアントに対してメッセージ表示するために使います; 直に切断してしまう前に。message 引数は、設定された最大値に置き換える "%m" に対して解析します。もし message が適用されていないと、システムで使われるデフォルトメッセージが使われます。

例:

MaxClients 5 "Sorry, the maximum number of allowed users are already connected (%m)"

結果:

530 Sorry, the maximum number of allowed users are already connected (5)


MaxClientsPerHost

Syntax: MaxClientsPerHost number|none message
Default: MaxClientsPerHost none
Context: server config, <Anonymous>, <VirtualHost>, <Global>
Compatibility: 1.1.7 and later

MaxClientsPerHost directive はホスト毎に接続を許可されたクライアントの最台数を設定します。オプションの引数である message は最大値を超えたときのクライアントにメッセージを表示するために使われます。もし message が適用されていないと、システムのデフォルトメッセージが使われます。

例:

MaxClientsPerHost 1 "Sorry, you may not connect more than one time."

結果:

530 Sorry, you may not connect more than one time.


MaxInstances

Syntax: MaxInstances number
Default: MaxInstances none
Context: server config
Compatibility: 1.1.6pl1

MaxInstances directive は スタンドアローンモードで親の proftpd プロセスによって生じる子プロセスの最大数を設定します。この directive は inetd モードでサーバが走っていても、影響ありません。

それぞれの proftpd 子プロセスはクライアントの接続を表すので、この directive は許可された同じ接続の最台数をコントロールします。設定された制限を超えた接続は syslog に記録され、切断されます。MaxInstances directive は、望まない拒否サービスアタックを防ぐために使われます (ftp ポートに対する繰り返しの接続は proftpd に fork-bomb を起こさせます)。デフォルトでは、一度走った子プロセスの数には制限がありません。


MaxLoginAttempts

Syntax: MaxLoginAttempts number
Default: MaxLoginAttempts 3
Context: server config, <VirtualHost>, <Global>
Compatibility: 0.99.0 and later

MaxLoginAttempts directive は、クライアントが接続の間にサーバに対して認証を試みる最大回数を設定します。回数がこの値を超えると、ユーザは接続を切断され、割り当てられたメッセージが syslog を通じてログされます。


Order

Syntax: Order allow,deny|deny,allow
Default: Order allow,deny
Context: <Limit>
Compatibility: 0.99.0pl6 and later

Order directive は<Limit> の記述で、AllowDeny directive がチェックされる順番を設定します。Allow directive は許可、Deny directive は制限なので、チェックされる順番はセキュリティ機能を大きく変更します。

デフォルトの設定で allow,deny が使われると、"allowed" アクセスのパーミッションが最初にチェックされます。 もし Allow directive が <Limit> の記述に対してアクセスを許可すると、アクセスは許可されて、Deny directive はチェックされません。もし Allow がアクセスを認めないと、Deny directive がチェックされます。なんらかの Deny directive が割り当てられていれば、アクセスは拒否されます。それ以外のアクセスは許可されます。

deny,allow が使われると、"deny" アクセス制限が最初にチェックされます。もし制限が割り当てられると、アクセスは直ちに拒否されます。もし拒否されるものがなければ、Allow パーミッションがチェックされます。Allow がアクセスを許可していれば、記述全体に対するアクセスが許可されます; それ以外のアクセスは拒否されます。

以下は、Allow/Deny アクセスをチェックするときのステップを示しています:

Order allow,deny

  1. Allow directive をチェックします。もし一つかそれ以上が割り当てていれば、割り当てて終了します: ALLOW
  2. Deny directive をチェックします。もし一つかそれ以上が割り当てていれば、割り当てて終了します: DENY
  3. デフォルトでは暗黙に ALLOW で終了します

Order deny,allow

  1. Deny directive をチェックします。もし一つかそれ以上が割り当てていれば、割り当てて終了します: DENY
  2. Allow directive をチェックします。もし一つかそれ以上が割り当てていれば、割り当てて終了します: ALLOW
  3. デフォルトでは暗黙に DENY で終了します

PathAllowFilter

Syntax: PathAllowFilter regular-expression
Default: None
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 1.1.7 and later

PathAllowFilter は全ての新しいアップロードされた(保存された)ファイルと一致しなければならない正規表現の設定を許可します。正規表現はクライアントによって指定されたパス名全体に対して割り当てられ、適当な regex を作成する場合には注意が必要です。regex に失敗したパスは、クライアントに返される"Forbidden filename"エラーと一致します。

もし regular-expression 引数に空白が含まれるなら、クウォートで囲まれなければなりません。

例:

# Only allow filenames containing alphanumeric characters
PathAllowFilter ".*/[a-zA-Z0-9]+$"


PathDenyFilter

Syntax: PathDenyFilter regular-expression
Default: None
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 1.1.7 and later

PathAllowFilter と似て、PathDenyFilter はアップロードされたパス名と一致してはいけない正規表現を指定します。もし regex が一致すると、"Forbidden filename"エラーがクライアントに返されます。これは特に、禁じている .ftpaccess や .htaccess のファイルに対しては使い易いです。

例:

# We don't want .ftpaccess or .htaccess files to be uploaded
PathDenyFilter "(\.ftpaccess)|(\.htaccess)$"


PersistentPasswd

Syntax: PersistentPasswd on|off
Default: Platform dependent
Context: server config
Compatibility: 1.1.5 and later

PersistentPasswd directive は proftpd の認証と、 user/group のルックアップ、ネームマップの処理を制御します。On にセットすると、proftpd はシステムの /etc/passwd、/etc/group (あるいは /etc/shadow も)ファイルを開いて、chroot() ログインの間、開いておきます(/etc/shadow は、セキュリティ上の理由から開いたままにはなりません)。いくつかのプラットフォームでは、libc 機能が chroot() 内部からアクセスできないので、このオプションを on にしなければなりません。設定時に、設定の記述はこもサポートが必要かどうかを検出して、デフォルトにします。しかし、その検出は失敗することがあるので、機能を手動で on|off に設定しなければなりません。anonymous の chroot ログインでディレクトリ表示をしたときに user や group を見ることができなければ、directive を on にしなければなりません。AuthUserFileAuthGroupFile directive の使用は、user や group データベースファイルを開いておくサポートを部分的なものにします; PersistentPasswd の設定とは関係なく。

注: NIS や NIS+ のユーザはおそらく、proftpd が検出した設定のデフォルトとは関係なくこの機能を off にしたいことでしょう。この機能を off にしないと NIS/NIS+ のマップが動きません。


Port

Syntax: Port port-number
Default: Port 21
Context: server config, <VirtualHost>
Compatibility: 0.99.0 and later

Port directive は standalone モードで走っている間、proftpd が聞く tcp ポート番号を設定します。inetd モードでサーバを走らせている時に使っても、効果はありません(ServerType を参照)。directive はマスターのサーバとして同じ IP アドレスでバーチャルサーバを走らせるために <VirtualHost> と一緒に使われますが、異なるポートを聞きに行きます。


RequireValidShell

Syntax: RequireValidShell on|off
Default: RequireValidShell on
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 0.99.0 and later

RequireValidShell directive は /etc/shells に shell binary が記載されていないログインを許可、または拒否する virtual host や anonymous ログインのサーバを設定します。デフォルトでは、ユーザのデフォルト shell が /etc/shells に記載されていなければ、proftpd はログインを拒否します。もし /etc/shells が見つからなければ、全てのデフォルト shell が有効であると仮定されます。


RootLogin

Syntax: RootLoginl on|off
Default: RootLogin off
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 1.1.5 and later

普通、proftpd は通常の環境下では root のログインを拒否します。もしクライアントが正当なパスワードを使って root としてログインを試そうとすると、専用のセキュリティメッセージが syslog に送られます。RootLogin directive が On になると、root ユーザは他のユーザと同じように認証されます(アクセスを拒否するアクセス制御がないものと仮定します); しかし、root ログインのセキュリティメッセージはまだ syslog に出ます。 はっきり言って、この directive を使うときには非常に大きな注意が必要です。


ScoreboardPath

Syntax: ScoreboardPath path
Default: ScoreboardPath /var/run
Context: server config
Compatibility: 1.1.6 and later

ScoreboardPath directive は proftpd run-time scoreboard ファイル(proftpd-*)が保存されるディレクトリを設定します。これらのファイルは他のユーティリティ(ftpwho、ftpcount 等)と同様に、 MaxClients を適切に動かすために必要です。


ServerAdmin

Syntax: ServerAdmin "admin-email-address"
Default: ServerAdmin root@[ServerName]
Context: server config, <VirtualHost>
Compatibility: 0.99.0pl10 and later

ServerAdmin directive はサーバや virtualhost の管理者メールアドレスを設定します。このアドレスは magic cookie の入れ替えで表示されます(DisplayLoginDisplayFirstChdir を参照)。


ServerName

Syntax: ServerName "name"
Default: ServerName "ProFTPD Server [version]"
Context: server config, <VirtualHost>
Compatibility: 0.99.0 and later

ServerName directive はサーバ(あるいは、もし directive が <VirtualHost> の記述にあれば、virtual server)に接続しているユーザに表示される文字列を設定します

参照: <VirtualHost>


ServerType

Syntax: ServerType type-identifier
Default: ServerType standalone
Context: server config
Compatibility: 0.99.0 and later

ServerType directive はサーバデーモンの操作モードを設定します。type-identifier は二つの値のうちの一つです:


ShowSymlinks

Syntax: ShowSymlinks on|off
Default: (versions previous to 1.1.5) Off for anonymous logins, On for normal logins
Default: (versions 1.1.5 and beyond) ShowSymlinks On
Context:
server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility:
0.99.0pl6 and later

シンボリックリンク(もしホストの OS とファイルシステムでサポートされていれば)は、ディレクトリ表示で示されるか(リンクのターゲットを含む)、quot;隠される" ( proftpd が symlink リファレンスを取り消すようになっていて、ターゲットのパーミッションと所有者を伝える)かのどちらかです。デフォルトでは、普通のユーザがログインしたときに全てのシンボリックリンクを見せて、anonymous のセッションでは隠します。もしシンボリックリンクがなにかの理由(パーミッションの問題、ターゲットが存在しない、等)でリファレンスを取り消しが出来なくて、ShowSymlink が off ならば、proftpd は実際のリンクになっている所有者とパーミッションで 'l'(リンク) タイプのディレクトリエントリとしてリンクを表示します。

ProFTPD versions 1.1.5 とそれ以上では、ShowSymlinks に関してデフォルトでは、ShowSymlinks off に設定されていなければ、シンボリックリンクが常に表示されるように変更されています。


SocketBindTight

Syntax: SocketBindTight on|off
Default: SocketBindTight off
Context: server config
Compatibility: 0.99.0pl6 and later

SocketBindTight directive は proftpd が standalone モードで、どのように初期 tcp のソケットを作ってバインドするのかを制御します(ServerType を見てください)。directive は inetd モードでサーバを走らせることには影響しません。なぜなら、聞くソケットは必要ないか、作られないからです。SocketBindTight が off に設定されると(デフォルト)、サーバが聞かなければならないそれぞれのポートに対して、単一の聞くソケットが作られます。<VirtualHost> の設定で使われているいくつかの IP アドレスとは関係ありません。もしたくさんの virtualserver が設定されていても、大概マスターのプロセスデーモンに対して比較的少ないファイル descriptor で済む利点があります。SocketBindTight が on に設定されていれば、聞くソケットが作られて、マスターサーバと、設定された virtualserver に対して指定された IP アドレスに対して向かいます。これは管理者が、proftpd (一つの IP アドレス)と他のデーモン(異なる IP アドレス)の両方に使われる特定にポートを持ちたい場合に役に立ちます。欠点は、たくさんの virtualserver がサポートされるなら、相当多くのファイル descriptor が必要とされることです。

例: 二つのサーバは個々の IP アドレス 10.0.0.1、10.0.0.2 について設定されます(一つがマスターで一つが virtual)。10.0.0.1 のサーバは 21 番で走り、10.0.0.2 は 2001 番で走ります。

SocketBindTight off #default
# proftpd creates two sockets, both bound to ALL available addresses.
# one socket listens on port 21, the other on 2001. Because each socket is
# bound to all available addresses, no other daemon or user process will be
# allowed to bind to ports 21 or 2001.
...
SocketBindTight on
# proftpd creates two sockets again, however one is bound to 10.0.0.1, port 21
# and the other to 10.0.0.2, port 2001. Because these sockets are "tightly"
# bound to IP addresses, port 21 can be reused on any address OTHER than
# 10.0.0.1, and visa-versa with 10.0.0.2, port 2001.

SocketBindTight を on に設定することによる一つの影響は、バウンドするアドレスがない接続は "500 Sorry, no server available to handle request on xxx.xxx.xxx.xxx." という標準的なメッセージではなくて、"connection refused"というメッセージになることです。これは特定の address/port のペアに対してバウンドするソケットがないせいです。これを美的に望むか望まないかは、環境によるかもしれません。


SyslogFacility

Syntax: SyslogFacility facility-level
Default: None
Context: server config
Compatibility: 1.1.6 and later

Proftpd で、Unixのsyslogのメカニズムを使用し、"facilities."と呼ばれる幾つかの一般的なログメッセージの分類によって、ログをとることが可能です。普通は、一般的なオペレーションに関するメッセージが DAEMON facility によってログが取られるのに対して、全ての認証に関連したメッセージは、AUTHPRIV (もしくは AUTH) facility でログが取られます [安全を配慮して、要求しない限り見えない様になっています。] SyslogFacility は、全てのロギングメッセージをデフォルトと異なるfacilityに設定する事できます。この機能が使用されると、全てのログは、authentication(安全)と他のものとの両方の facility で指定することが可能になります。

facility-level の書式は以下のようになります : AUTH (or AUTHPRIV), CRON, DAEMON, KERN, LPR, MAIL, NEWS, USER, UUCP, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6 or LOCAL7.

参照: SystemLog


SystemLog

Syntax: SystemLog filename|NONE
Default: None
Context: server config
Compatibility: 1.1.6pl1 and later

SystemLog は、proftpdのシスログ機能を無効にして、かわりに全てのログをfilenameで指定して吐き出します。filenameは絶対パスで指定しなければなりません。この指定の仕方をすると、SyslogFacilityで指定した全ての設定を無効にします。

追加して、特別なキーワードであるNONEは、全てのsyslogスタイルのログを完全に無効にします。


tcpBackLog

Syntax: tcpBackLog backlog-size
Default: tcpBackLog 5
Context: server config
Compatibility: 0.99.0 and later

tcpBackLog directive は standalone モードでの接続を聞くときに、tcp "backlog queue" を制御します(ServerType を参照)。inetd モードのサーバには作用しません。カーネル内部の tcp/ip スタックによって tcp 接続が確立すると、実際の接続の確立と、ユーザプログラムによる接続の受信の間にはちょっとした時間差があります。この待ち時間は、いくつかの要因 (hardware, system load, etc) によって大きく変動します。この間 tcp の接続が受信されないのは、以前に"聞いた"ポートが新しい接続で埋まっているからです。接続が混んでいる場合、リクエストをハンドルできるときでさえも、外部から接続してくるクライアントには "connection refused" というメッセージが時々(あるいはしょっちゅう!)返されることになります。これを解決するために、最新の tcp/ip スタックは待ち時間の間の backlog-size 接続をハンドルするために、単に必要なリソースをあらかじめ割り当てておく "backlog queue" を実装しています。より大きな backlog キューでは、より多くの接続が非常に短い時間で確立されます。もちろん、見返りとしてカーネルメモリ、他のカーネルリソースを食います。

一般的には、たくさんの virtual host(<VirtualHost> を参照)を持つか、非常に頻繁なシステムのロードがない限りは、tcpBackLog directive を使う必要はありません。リモートのクライアントから "connection refused" のメッセージを聞いたり、気になりはじめたら、この値をちょっと高く設定してみてください。


tcpReceiveWindow

Syntax: tcpReceiveWindow window-size
Default: tcpReceiveWindow 8192
Context: server config, <VirtualHost>
Compatibility: 0.99.0 and later

tcpReceiveWindow directive は、全てのデータ接続 tcp が受け取る ウィンドウサイズ(8 ビット)を設定します。クライアントから受け取ったファイルがデータ接続を超えるときにだけ使われます。普通、与えられた tcp/ip の実行は比較的小さな受信 ウィンドウサイズを使います("turnaround" の承認が要求される前に tcp 層で受け取られる 8 ビット)。比較的高い latency を持っている高速デジタル転送線を超えた大きなデータの転送をするとき、小さな受信ウィンドウはスループットに劇的に影響します。これは、承認を受け取って、送信を続けるためのリモートのエンドポイントを待つために、ときどき転送を停止する必要があるからです。例えば、100 ms latency の T1 では(フルの 1.544Mbps endpoint-to-endpoint スループットだと仮定する)、4k の受信バッファはスループットを劇的に減らします。デフォルト値である 8192 (8k) 8 ビットが、一般的なネットワーク設定では妥当です。

さらに、proftpd は受信/送信 ウィンドウサイズと一致する内部バッファを割り当てます; 受信/送信パフォーマンスを最大にするためです(時間を短縮するためには、proftpd からカーネルの tcp/ip スタックに転送されなければなりません)。もちろん、カーネル、ユーザスペースのメモリを食います。proftpd がメモリ容量ギリギリのホスト(そして、低いバンド幅の接続)で走っていれば、tcpReceiveWindow と tcpSendWindow サイズの両方を減らすのが賢明です。


tcpSendWindow

Syntax: tcpSendWindow window-size
Default: tcpSendWindow 8192
Context: server config, <VirtualHost>
Compatibility: 0.99.0 and later

tcpSendWindow directive は、全てのデータ接続の tcp 送信 ウィンドウサイズ(8 ビット)を設定します。これは接続で、サーバからクライアントへファイルを送信するときにだけ使われます。受信/送信 ウィンドウサイズの記述の詳細については、tcpReceiveWindow を見てください。


TimeoutIdle

Syntax: TimeoutIdle seconds
Default: TimeoutIdle 600
Context: server config
Compatibility: 0.99.0 and later

TimeoutIdle は、コントロール・データどちらかの接続のデータを全く受け取らないまま、proftpdが最大何秒間クライアントと接続していられるかを指定します。どちらかの種類のデータが受け取られると、タイムアウトまでの時間はリセットされます。TimeoutIdle を 0 に設定すると、この機能は完全に無効になります。(クライアントは、データを発信することなしに、接続しつづけることが可能です)(遠隔ネットワークがインターネットから切断したなどの、)確実に切断したわけではないTCPコネクションを切断することは、手動でkillするまで消すことの出来ない(少なくとも常識的な期間のうちに)子プロセスを発生させてしまうので、一般的にいって、よくない考え方です。

参照: TimeoutLogin, TimeoutNoTransfer


TimeoutLogin

Syntax: TimeoutLogin seconds
Default: TimeoutLogin 300
Context: server config
Compatibility: 0.99.0 and later

TimeoutLogin は、認証に最大何秒間費やせるかを指定します。この時間制限は、クライアントがデータを発信してもリセットされることはありません、そして、クライアントがUSER/PASSのセットを発信したときのみリセットされます。

参照: TimeoutIdle, TimeoutNoTransfer


TimeoutNoTransfer

Syntax: TimeoutNoTransfer seconds
Default: TimeoutNoTransfer 600
Context: server config
Compatibility: 0.99.0 and later

TimeoutNoTransfer は認証の後に、データ接続を発生させるコマンドを発行することなく、最大何秒間接続していられるかを指定します。(例えば、ファイル転送や、ディレクトリ内のファイルのリストを取得する ことです。)

参照: TimeoutIdle, TimeoutLogin


TimeoutStalled

Syntax: TimeoutStalled seconds
Default: TimeoutStalled 0
Context: server config
Compatibility: 1.1.6 and later

TimeoutStalled で、proftpdサーバーとFTPクライアントの間に actual なデータ転送がないまま、最大何秒間コネクションを維持していられるかを指定します。(i.e. "stalled"). もし、seconds0 であるならば、データ転送は全く制限されません。(デフォルトはこの設定です)


TransferLog

Syntax: TransferLog filename|NONE
Default: TransferLog /var/log/xferlog
Context: server config, <Anonymous>, <VirtualHost>, <Global>
Compatiblity: 1.1.4 and later

TransferLog は、"wu-ftpd スタイル"のファイル転送ログの絶対パスを指定します。それぞれのAnonymousVirtualHostに対して、別々のログを作成することが可能です。

さらに、NONEという特殊な指定をすることによって、指定されたディレクトリに対してのみは、ログをとらないことが可能になります。(バージョン1.1.7以降で有効です).

参照: ExtendedLog, LogFormat


Umask

Syntax: Umask octal-mask
Default: None
Context: server config, <Anonymous>, <VirtualHost>, <Directory>, <Global>, .ftpaccess
Compatibility: 0.99.0 and later

Umask は与えられた記述の中で、新しく作られたファイルとディレクトリのパーミッションへ割り当てるマスクを設定します。デフォルトで Umask は、"ディレクトリ毎の" Umask 設定によって無効にされない限り、サーバ設定の <VirtualHost><Anonymous> で使われます。割り当てられる引数は 0xxx フォーマットの 8 ビット数でなければなりません。umask について詳しくは OS のドキュメントや man ページを参考にしてください。


UseFtpUsers

Syntax: UseFtpUsers on|off
Default: UseFtpUsers on
Context: server config, <Anonymous>, <VirtualHost>, <Global>
Compatibility: 0.99.0 and later

今までのFTPサーバーは、一般的にクライアントからの認証要求があった際に、特別なファイル(一般的には /etc/ftpusers です)をチェックしていました。もしそのファイルの中にユーザー名が存在したら、FTPのアクセスは拒否されます。互換的な目的で、proftpd もデフォルトではこのファイルを認証の際にチェックします。UseFtpUsers で設定することで、この /etc/ftpusers の働きを無効に出来ます。


UseReverseDNS

Syntax: UseReverseDNS on|off
Default: UseReverseDNS on
Context: server config
Compatibility: 1.1.7 and later

普通、外から入って来るアクティブモードのデータ接続と、外へ出て行く受動的なモードのデータ接続は、リモートホストの IP アドレスで行われる逆引き DNS ルックアップを持っています。chroot 環境では(<Anonymous>DefaultRoot のような)、/etc/hosts ファイルはチェックされず、DNS 経由でのみ解析が可能です。もしなんらかの理由で DNS が役に立たなかったり、設定が不適切だったりすると、libc リゾルバコードがタイムアウトになるまで proftpd blocking ("stalling") になります。この directive を無効にすると、データ接続の IP アドレス逆引きルックアップをさせません。


User

Syntax: User userid
Default: None
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 0.99.0 and later

User directive は proftpd のデーモンを通常走らせるユーザを設定します。デフォルトで proftpd は、ほとんどの最も信頼できるネットワーク設定では root として走りますが、これは望ましくありません。Group directive と共に使われる User directive は、起動後出来るだけ素早くデーモンを指定されたユーザに切り替えるようにします。unix 系列のいくつかでは、デーモンはスーパーユーザのアクセスを要求するタスクを行うために、時々 root に戻ります。一度タスクが完了すると root 特権は放棄されて、サーバは指定されたユーザとグループで走り続けます。<VirtualServer> に割り当てられたときに、proftpd は virtualserver のアドレスやポートに向かう接続では、指定されたユーザとグループのままで走ります。もし User か Group のどちらかが <Anonymous> に割り当てられると、proftpd は ユーザが指定した userid でログインしようとすると anonymous ログインになります。これはログイン後に対応する uid/gid にスイッチするのと同様です。

注: 権限のある unix ユーザが認証されてログインしたときに、全ての以前の特権は放棄されて、デーモンはユーザの uid/gid にスイッチし、再び root や他のなんらかの user/group にスイッチすることはありません。


UserAlias

Syntax: UserAlias login-user userid
Default: None
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 0.99.0 and later

UserAlias directive はクライアント(login-user)によって、本当のシステムの userid (userid)に対して送信されたログイン名からマッピングを作ります。もしエイリアスとしてユーザがログすれば、認証はシステムの実際のユーザとしてログインしたかのように行われます。この directive は anonymous ログインを動かす様々なログイン名を許可するために <Anonymous> の記述でしばしば使われます。 注: もしlogin-userパラメータがシステムの userid と同じだと、システムの userid はもはや proftpd では認識されません。


UserPassword

Syntax: UserPassword userid hashed-password
Default: None
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 0.99.0pl5 and later

UserPassword は、特定のユーザーに対して/etc/passwd(または /etc/shadow)ファイルのパスワード以外のパスワードを上書きで指定できます。上書きの設定は、UserPasswordが適用されている部分に対してのみ有効です。hashed-passwordは、クリアーテキストのパスワードをunix の標準的なcrypt()した状態のものを扱います。クリアーテキストのパスワードを使用しないでください。これは、アノニマスFTPサイトで、複数のログイン方法を可能にするために、UserAlias と併用すると便利です。

参照: GroupPassword


<VirtualHost>

Syntax: <VirtualHost address>
Default: None
Context: server config
Compatibility: 0.99.0 and later

VirtualHost の設定の記述は特定のホスト名や IP アドレスに割り当てる、独立した設定 directive のセットを作るために使われます。物理的に同じマシンで一つかそれ以上の "virtual" server を走らせるために、システムレベルの IP エイリアスとダミーのネットワークインターフェースと共にしばしば使われます。記述は </VirtualHost> directive で終了します。VirtualHost の記述で Port directive を利用することにより、マスターのサーバと同じアドレスを使う virtualserver を作ることが可能になります。しかし、tcp ポートは別れています(ServerType inetd とは両立しません)。

proftpd を起動したときに、virtualserver の接続は ServerType の設定によって、二通りのうちの一つがハンドルされます:

デーモンが standalone モードにときに接続を聞くために使う方法により、プロセス毎のファイル descriptor の数を超えた、非常にたくさんの virtualserver をサポートすることが可能です。これは、単一のファイル descriptor がそれぞれの設定されたポートに聞くために使われるせいで、監視されるアドレスの数とは関係ありません。 カーネルがクライアントの接続を拒絶する("Connection refused")のを避けるために、重いサーバでは tcpBackLog の値を大きくする必要があるかもしれません。


WtmpLog

Syntax: WtmpLog on|off|NONE
Default: WtmpLog on
Context: server config, <VirtualHost>, <Anonymous>, <Global>
Compatibility: 1.1.7 and later

WtmpLog directive は、ホストのシステム wtmp ファイル(`last' のようなコマンドによって使われる)の proftpd ログを制御します。デフォルトでは、全ての接続が wtmp 経由でログされます。