EN JA
FTPD(8)
FTPD(8) FreeBSD System Manager's Manual FTPD(8)

名称

ftpdインターネットファイル転送プロトコルサーバ

書式

ftpd [ -468ADdEhMmOoRrSUvW][ -l [ -l]][ -a address][ -P port][ -p file][ -T maxtimeout][ -t timeout][ -u umask]

解説

ftpd ユーティリティは、インターネットファイル転送プロトコルサーバプロセスです。このサーバは、 TCP プロトコルを用いて、 -P オプションで指定されたポートもしくは“ftp”サービスに割り当てられたポートを listen() します。“ftp”サービスについては、 services(5) を参照して下さい。

利用可能なオプションは以下の通りです:

-4
-D が指定されている場合、IPv4 接続を AF_INET ソケット経由で受け付けます。
-6
-D が指定されている場合、 AF_INET6 ソケット経由の接続を受け付けます。
-8
トランスペアレント UTF-8 モードを有効にします。 RFC 2640 準拠のクライアンドは、サーバによって使用される文字エンコードが、オプションで唯一の影響がある、UTF-8 であると伝えられます。

このオプションは、サーバファイル名のための任意のエンコード変換を有効にしません。それよりむしろ、サーバのファイルの名前が UTF-8 でエンコードされていることを意味しています。 FTP によってアップロードされたファイルに関して、クライアントのローカルエンコードから UTF-8 にそれらの名前を変換することは、 RFC 2640 準拠のクライアントの義務です。 FTP コマンド名と ftpd メッセージ自体は、UTF-8 の部分集合である、ASCII に常にエンコードされます。したがって、サーバ側の変換の必要が全くありません。

-A
匿名 ftp アクセスのみ許可します。
-a
-D オプションが指定されている場合、 address で指定されたアドレスに対する接続のみを許可します。
-D
このオプションがセットされると、 ftpd は制御端末を切り離してデーモンとなり、 FTP ポートへの接続要求を待ち、子プロセスを生成して接続要求に対応します。この方式は、 ftpdinetd(8) から起動するよりオーバヘッドが少ないため、処理量の多いサーバで負荷を低減するのに役立ちます。
-d
syslog の LOG_FTP のファシリティ (facility) を用いてデバッグ情報を出力します。
-E
EPSV コマンドを無効化します。古いファイアウォールの後ろにサーバがある場合に有用です。
-h
サーバソフトウェアバージョンやホスト名といったホスト固有情報をサーバメッセージ中に表示しないようにします。
-l
ftp(1) セッションの成功と失敗は、 LOG_FTP の機能で syslog を使用してログ記録されます。このオプションが 2 度指定されるなら、検索 (取得)、格納 (置く)、追加、削除、ディレクトリの作成、ディレクトリの削除、と名前の変更の操作、およびそれらのファイル名引数もまたログに記録されます。デフォルトでは、 syslogd(8) はこれらを /var/log/xferlog にログ記録します。
-M
匿名ユーザによるディレクトリ作成を禁止します。
-m
ファイルシステムのパーミッションが許す限りにおいて、匿名ユーザによる既存のファイルの上書きや修正を許します。デフォルトでは、匿名ユーザは既存のファイルを修正できず、特に、アップロードされるファイルは一意な名前で作成されます。
-O
匿名ユーザのみに対し、サーバを書き込み専用モードにします。匿名ユーザに対しては、RETR が無効化され、匿名ダウンロードを禁止します。本オプションは、 -o も設定されている場合には、効果がありません。
-o
サーバを書き込み専用モードにします。 RETR が無効化され、ダウンロードを禁止します。
-P
-D 指定時には、デフォルトの“ftp”ポートの代りに、数値またはサービス名で指定される port での接続を受け付けます。
-p
-D が指定されるとき、デーモンのプロセス ID をデフォルト pid ファイル、 /var/run/ftpd.pid の代わりに file 書き込みます。
-R
このオプションがセットされると、 ftpd は、ユーザ操作のセキュリティチェックや PORT 要求の制限に関して古き良き時代の振る舞いに戻ります。現在では、 ftpd はリモートユーザのホストの非特権ポートに向けられた PORT コマンドだけを用います (これは、FTP プロトコルの仕様に違反していますが、いくつかのセキュリティホールを閉じることができます)。
-r
サーバを、読み込み専用モードにします。ローカルファイルを修正し得る全コマンドは、無効化されます。
-S
このオプションがセットされると、 ftpd は匿名 (anonymous) によるファイルダウンロードの全てについてのログを、ファイル /var/log/ftpd が存在する場合に限り、このファイルに残します。
-T
クライアントは異なったタイムアウト秒数を要求することもできます。 -T オプションにより、 タイムアウト までの最大待ち時間を設定できます。デフォルトは、2 時間です。
-t
何も操作しないで放置した場合のタイムアウト時間を timeout 秒に設定します (デフォルトは、15 分)。
-U
IP_PORTRANGE_HIGH の範囲の代りに IP_PORTRANGE_DEFAULT の範囲のデータポートを使用するよう、ftpd に指示します。更なる情報については、 ip(4) を参照してください。

FreeBSD 5.0 以上では、実際はなにもしないことに注意してください。なぜなら、どちらのポート範囲もデフォルトで等価だからです。

-u
デフォルトのファイル生成マスクを umask にします。この数値は、8 進数値であることを期待されます。詳細は、 umask(2) を参照してください。このオプションに対し、 login.conf(5) の設定が優先します。
-v
-d と同じ意味です。
-W
ユーザアカウンティングデータベースに FTP セッションのログを記録しません。

ファイル /var/run/nologin は、ftp アクセスを拒否するのに使うことができます。このファイルが存在する場合、 ftpd はそのファイルの内容を表示して終了します。 /etc/ftpwelcome ファイルが存在する場合、 ftpd は、“ready”メッセージを表示する前にその内容を表示します。もし /etc/ftpmotd ファイルが存在する場合、ログイン成功後に ftpd はその内容を出力します。使用される motd ファイルはログイン環境に対して相対であることに注意してください。つまり、匿名ユーザの場合には、 ~ftp/etc に存在することを意味します。

この ftp サーバは、現在、以下の ftp リクエストをサポートしています。リクエストの文字の大文字小文字の区別は無視されます。印 [RW] が付いているリクエストは、 -r が指定されると無効化されます。

リクエスト 説明
ABOR 前のコマンドを中断します
ACCT アカウント (無視される) を指定します
ALLO (目的のない) 記憶域を割り付けます
APPE ファイルに追加します [RW]
CDUP 現在の作業ディレクトリの親に変更します
CWD 作業ディレクトリを変更します
DELE ファイルを削除します [RW]
EPRT データ接続ポートを指定します, マルチプロトコル
EPSV サーバからサーバへの転送の準備をします
FEAT サーバの拡張機能で情報を得ます
HELP help 情報を与えます
LIST ディレクトリでリストされたファイルを与えます (“ ls -lA”)
LPRT データ接続ポートを指定します, マルチプロトコル
LPSV サーバからサーバへの転送の準備をします, マルチプロトコル
MDTM ファイルの最後の更新時刻を表示します
MKD ディレクトリを作成します [RW]
MODE データ転送 モードを指定します
NLST ディレクトリのファイルの名前リストを与えます
NOOP 何もしません
PASS パスワードを指定します
PASV サーバからサーバへの転送の準備をします
PORT データ接続ポートを指定します
PWD 現在の作業ディレクトリを印刷 (表示) します
QUIT セッションを終了します
REST 不完全な転送を再開します
RETR ファイルを検索して取得します
RMD ディレクトリを削除します [RW]
RNFR 名前を変更する元のファイル名を指定します [RW]
RNTO 名前を変更した後のファイル名を指定します [RW]
SITE 非標準コマンド (次のセクション参照)
SIZE ファイルのサイズを返します
STAT サーバの状態を返します
STOR ファイルを格納します [RW]
STOU ユニークな名前でファイルを格納します [RW]
STRU データ転送 構造体を指定します
SYST サーバシステムのオペレーティングシステムのタイプを表示します
TYPE データ転送 タイプを指定します
USER ユーザ名を指定します
XCUP 現在の作業ディレクトリの親に変更します (非推奨)
XCWD 作業ディレクトリを変更します (非推奨)
XMKD ディレクトリを作成します (非推奨) [RW]
XPWD 現在の作業ディレクトリを印刷 (表示) します (非推奨)
XRMD ディレクトリを削除します (非推奨) [RW]

以下に示した非標準コマンドあるいは UNIX に特有のコマンドが、SITE リクエストでサポートされています。

リクエスト 説明
UMASK umask を変更します、例えば、``SITE UMASK 002''
IDLE アイドルタイマを設定します、例えば、``SITE IDLE 60''
CHMOD ファイルのモードを変更します [RW]、例えば、``SITE CHMOD 755 filename''
MD5 ファイル MD5 チェックサムを報告します、例えば、``SITE MD5 filename''
HELP help 情報を与えます

注: 匿名ログインの場合、SITE リクエストは無効化されています。

Internet RFC 959 で規定されている ftp リクエストのうちの、これ以外のものは解釈はされますがインプリメントされていません。 MDTM および SIZE は、RFC 959 では規定されていませんが、次に改訂される FTP RFC には登場するでしょう。サービス拒否攻撃の可能性を除去するために、現在の転送タイプが ASCII の場合には、 10240 バイトより大きなファイルに対する SIZE リクエストは拒否されます。

ftp サーバがアクティブなファイル転送を中断するのは、ABOR コマンドの前に、 Telnet "Interrupt Process" (IP) シグナルと Telnet "Synch"シグナルが Telnet ストリーム内にある場合だけです。これは、Internet RFC 959 に記述されています。もし、データの転送中に STAT コマンドを受けとり、その前に Telnet IP と Synch があった場合、転送ステータスが返されます。

ftpd ユーティリティは、 csh(1) で使われている“ファイル名置換” (globbing) を解釈します。これにより、ユーザはメタキャラクタ“ *?[]{}~”を利用できます。

ftpd ユーティリティは、6 つのルールに従ってユーザの認証を行います。

  1. ログイン名はパスワードデータベースになければならず、空のパスワードであってはいけません。この場合、あらゆるファイルの操作に先だって、クライアント側からパスワードが提供されていなければなりません。ユーザが OPIE のキーを持っているなら、 USER コマンドが成功した際の応答には、OPIE チャレンジを含めて送られます。クライアントは、それに対して PASS コマンドを使って応答する際に、通常のパスワードか OPIE のワンタイムパスワードのどちらをつけて応答するかを選択できます。サーバはどちらのパスワードを受け取ったかを自動的に判定し、それに応じて認証を試みます。 OPIE の認証に関する詳細は、 opie(4) を参照して下さい。
  2. ログイン名はファイル /etc/ftpusers に載っていてはいけません。
  3. ログイン名はファイル /etc/ftpusers で指定されているグループのメンバであってはいけません。このファイルでグループ名として解釈されるエントリの先頭にはアットマーク‘ @’が付きます。
  4. ユーザは、 getusershell(3) が返す標準のシェルを持っていなければなりません。
  5. ユーザ名がファイル /etc/ftpchroot に載っているか、そのファイルにあるグループエントリ (つまり‘ @’で始まるエントリ) のメンバである場合、アカウント“anonymous”や“ftp”と同様、 chroot(2) によって、そのセッションのルートディレクトリがこのファイルによって指定されるディレクトリかユーザのログインディレクトリに変ります (次の項目を参照して下さい)。このファイルの書式の詳細は、 ftpchroot(5) を参照してください。この機能は、 login.conf(5) でブール型フラグ "ftp-chroot"をオンにしても有効になります。しかし、ユーザは依然、パスワードを与える必要があります。この特徴は、完全に匿名 (anonymous) なアカウントと完全な特権のあるアカウントの間での妥協的な利用のためのものです。このアカウントは匿名アカウントで設定するのと同様に設定されていなければなりません。
  6. もしユーザ名が“anonymous”または“ftp”の場合は、匿名の ftp アカウントがパスワードファイル (ユーザ“ftp”) で提供されていなければなりません。この場合、ユーザはどのようなパスワードでもログインを許可されます (慣習としてはユーザの email アドレスをパスワードとして用いることになっています)。 -S オプションがセットされていると、全ての転送操作もログ記録されます。

最後のケースの場合、 ftpd は特別な手段でクライアントのアクセス権を制限します。サーバは、“ftp”ユーザのホームディレクトリへ chroot(2) します。“ftp”ユーザのホームディレクトリパスに /./ セパレータが含まれる特殊な場合、左側を chroot(2) 先のディレクトリ名、右側を以降のカレントディレクトリとして ftpd は使用します。典型的な使用例は、 /usr/local/ftp/./pub です。システムのセキュリティが侵害されないために、“ftp”サブツリーは、以下の規則に従って慎重に構築することを推奨します。

~ftp
ホームディレクトリは、“root”の所有とし、誰も書き込みできないようにします。
~ftp/etc
このディレクトリは、“root”の所有とし、誰も書き込みできないようにします (モード 555)。 ls(1) が所有者を数字でなく名前で表示できるようにするために、ファイル pwd.db ( passwd(5) 参照) 及び group(5) が必要です。ファイル passwd(5) 中のパスワードは使用されませんので、本当のパスワードを入れてはいけません。ファイル ftpmotd が存在すると、ログイン成功後、その内容が表示されます。このファイルのモードは、444 とすべきです。
~ftp/pub
本ディレクトリおよびそれ以下のサブディレクトリは、ここにファイルを置くことに対して責任のあるユーザおよびグループにより所有されるべきであり、彼等によってのみ書き込み可能であるべきです (モード 755 または 775)。“ftp”またはそのグループが所有したり書き込み可能であるべきでは ありません。 そのようにしてしまうと、ゲストユーザが、望まないファイルでディスクを一杯にできてしまいます。

システムに複数の IP アドレスがある場合、 ftpd は仮想ホストの概念をサポートします。仮想ホストは、複数の匿名 ftp 領域それぞれを別々のインターネットアドレスに割り当てる機能を提供します。ファイル /etc/ftphosts は各仮想ホストに関連した情報を保持します。各ホストはそれぞれの行で定義され、各行は空白で区切ったいくつかのフィールドからなります:

hostname
仮想ホストのホスト名あるいは IP アドレス。
user
システムのパスワードファイル中のユーザレコードを含みます。普通の匿名 ftp と同様に、このユーザのアクセス UID, GID およびグループによって匿名 ftp 領域のファイルアクセス権が決まります。匿名 ftp 領域 (ログイン時にユーザが chroot するディレクトリ) は、そのアカウントに対するホームディレクトリとして決定されます。他の ftp アカウントのユーザ ID およびグループも、標準 ftp ユーザと同じであって構いません。
statfile
全てのファイル転送のログが記録されるファイル。デフォルトでは、 /var/log/ftpd です。
welcome
サーバがプロンプトを出す前に表示される welcome メッセージ。デフォルトでは、 /etc/ftpwelcome です。
motd
このファイル内容はユーザがログインした後に表示されます。デフォルトでは、 /etc/ftpmotd です。

文字 '#' で開始する行は無視されますので、コメントを含むことが可能です。

プライマリ IP アドレスあるいはホスト名に対する仮想ホストを定義すると、そのアドレスへの ftp ログインのデフォルト値が変更されます。 'user', 'statfile', 'welcome', 'motd' の各フィールドは、デフォルト値を用いる場合、ブランクのままもしくはハイフン一つ '-' としても構いません。

いかなる匿名ログインの設定についても言えることですが、設定と保守には十分に注意を払い、セキュリティ上の問題をきたさないよう防御しなければなりません。

ftpd ユーティリティは、リモートからのファイル一覧表示要求に対応するための内部サポートを持ち、 chroot された環境でもそれ以外でも /bin/ls を実行しなくなります。 ~/bin/ls の実行形式ファイルは、chroot されたディレクトリになくてよく、 ~/bin ディレクトリも存在する必要はありません。

関連ファイル

/etc/ftpusers
歓迎されない/制限を受けるユーザのリスト。
/etc/ftpchroot
chroot される一般ユーザのリスト。
/etc/ftphosts
仮想ホストのための設定ファイル
/etc/ftpwelcome
welcome メッセージ。
/etc/ftpmotd
login 後の welcome メッセージ。
/var/run/ftpd.pid
デーモンモードのためのデフォルトの pid ファイル。
/var/run/nologin
内容を表示し、アクセスを拒否します。
/var/log/ftpd
匿名による転送のログファイル。
/var/log/xferlog
セッションログのデフォルトの置場。

歴史

ftpd ユーティリティは、 4.2BSD で登場しました。 IPv6 サポートは、WIDE Hydrangea IPv6 スタックキットで追加されました。

バグ

特権ポート番号を用いてソケットを作成するために、 ftpd はスーパユーザの権限で実行させて下さい。サーバはログインユーザの実効ユーザ ID を保持しておき、アドレスをソケットにバインドする場合にのみスーパユーザの権限を使います。考えられるセキュリティホールについてはかなり詳細にわたって調べ込みをおこないましたが、それでも不完全かもしれません。
January 21, 2010 FreeBSD