FTPD(8)

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

書式
ftpd [ -d ] [ -v ] [ -l ] [ -t timeout ] [ -T maxtimeout ] [ -a ] [ -A ] [ -L ] [ -i ] [ -I ] [ -o ] [ -p ctrlport ] [ -P dataport ] [ -q ] [ -Q ] [ -r rootdir ] [ -s ] [ -S ] [ -u umask ] [ -V ] [ -w ] [ -W ] [ -X ]

説明
ftpd はインターネットファイル転送プロトコルサーバプロセスである。 サーバはTCP プロトコルを使用し、``ftp'' サービス仕様書 で指定されたポートの接続を待つ。 services(5) を参照。

-V オプションは著作権とバージョン情報を出力し、終了する。

-d もしくは -v オプションを指定した場合、 syslog にデバッグ情報を記述する。

-l オプションを指定した場合、 各々の ftp セションが syslog に記録される。

ftp サーバは接続してから 15 分後に動作していないセションをタイムアウトにする。 -t オプションを指定した場合、 動作していない時のタイムアウト期間を timeout 秒で設定する。 クライアントは違うタイムアウト期間をも要求することができる。 最大期間は -t オプションで指定した場合、 timeout 秒を設定することを許可する。 デフォルト制限は 2 時間である。

-a オプションが指定された場合、 ftpaccess(5) の設定ファイルの使用が可能である。

-A オプションが指定された場合、 ftpaccess(5) の設定ファイルの使用は不可能である。 これはデフォルトである。

-L オプションが指定された場合、 ftpd(8) サーバに送信されたコマンドは syslog に記録される。 -L オプションは ftpaccess(5) ファイルの設定より優先される。 -L フラグが使用されると、ftp サーバが起動すると同時に コマンドのログへの記録はデフォルトの設定になる。 これはすべてのユーザコマンドを記録し、 ユーザが偶然にもコマンドにユーザ名の かわりにパスワードを入力した場合、 syslog を経由してパスワードが記録される。

-i オプションが指定された場合、 ftpd(8) サーバにより受信したファイルを xferlog(5) に記録する。 -i オプションは ftpaccess(5) ファイルの使用よりも優先する。

-I オプションはクライアントのユーザ名を決定しようとするための RFC931 (AUTH/ident) の使用を無効にする。

-o オプションが指定された場合、 ftpd(8) サーバが送信したファイルは xferlog(5) に記録される。 -o オプションは ftpaccess(5) ファイルの使用より優先させる。 -X オプションが指定された場合、 -i 及び -o オプションで作成された出力は xferlog ではなく、syslog を経由して記録される、 そこで、いくつかのホストからの出力をひとつの中央ログホストに 集約することができる。

-u オプションが指定された場合、デフォルト umask は umask に設定される。

-W オプションが指定された場合、ユーザのログインが wtmp ファイルに記録されなくなる。デフォルト はすべてのログインとログアウトを記録する。

-s 及び -S オプションはスタンドアローンオペレーションモードで デーモンを位置付ける。 -S オプションはバックグラウンドでデーモンを実行し、 システムの初期化中 (例 rc.local) の起動スクリプトで役立つ。 -s オプションはデーモンをフォアグラウンドに出して init から実行させる時に役立つ。(例、/etc/inittab)

-p 及び -P オプションはデーモンが使用するポート番号を受け付ける。 通常、デーモンは /etc/services から "ftp" と "ftp-data" を探すことにより ポート番号を決定する。 もし "ftp-data" が /etc/services になくて、 -P オプションが指定されなかった場合、 デーモンは制御接続ポートのちょうど前のポートを使用する。 -p オプションはデーモンをスタンドアローンとして実行する場合のみ 使用可能である。

-q 及び -Q オプションはデーモンが PID ファイルを使用するかどうかを決定する。 これらのファイルはそれぞれのアクセスクラスで現在のユーザの数を 決定するための指示的な制限により要求される。 PID ファイルの使用を無効にすると、ユーザ制限が無効になる。デフォルトは (-q) PID ファイルを使用する。 アクセス許可が PID の使用を妨げるときに一般ユーザとしてサーバでテストする時に -Q を指定する。同時ユーザ数の制限を強いられるのを望まない、大きく、 ビジーなサイトをも PID ファイルを無効にすることを検討可能である。 -r オプションはデーモンに対し指定されたルートディレクトリへロードされると すぐに chroot(2) するように指示する。 これはデーモンを経由して不正進入された場合、破壊される可能性のあるファイルを制限することにより システムのセキュリティを向上させる。設定は anonymous FTP とほぼ同様に、 システムにより異なる、必要とされる追加ファイルがある。

ftp サーバは現在次の ftp 要求をサポートしている。 大文字と小文字の区別はしない。

リクエスト	説明
ABOR	前のコマンドを中止する
ACCT	アカウントを指定する (無視される)
ALLO	ストレージを割り当てる (意味はない)
APPE	ファイルに追加する
CDUP	現在の作業ディレクトリの親に変更する
CWD		作業ディレクトリを変更する
DELE	ファイルを削除する
HELP	ヘルプ情報を送出する
LIST	ディレクトリ内のファイルのリストを送出する (``ls -lgA'')
MKD		ディレクトリを作成する
MDTM	ファイルの最終更新時間を表示する
MODE	データの転送 mode を指定する
NLST	ディレクトリ内のファイルリスト名を送出する
NOOP	なにもしない
PASS	パスワードを指定する
PASV	サーバ - サーバの転送を準備する
PORT	指定したデータの接続ポート
PWD		現在の作業ディレクトリを出力する
QUIT	セションを終了する
REST	未完了の転送を再度開始する
RETR	ファイルを取得する
RMD		ディレクトリを削除する
RNFR	リネームされるファイル名を指定する
RNTO	リネームするファイル名を指定する
SITE	非標準コマンド (次節を参照)
SIZE	ファイルサイズを返す
STAT	サーバの状態を返す
STOR	ファイルを蓄積する
STOU	一意名でファイルを蓄積する
STRU	データ転送の structure を指定する
SYST	サーバシステムのオペレーションシステムの種類を表示する
TYPE	データ転送の type を指定する
USER	ユーザ名を指定する
XCUP	現在の作業ディレクトリの親に変更する (重要ではない)
XCWD	作業ディレクトリを変更する (重要ではない)
XMKD	ディレクトリを作成する (重要ではない)
XPWD	現在の作業の作業ディレクトリを表示する (重要ではない)
XRMD	ディレクトリを削除する (重要ではない)

次の標準ではない、もしくは UNIX 独自のコマンドが SITE 要求により サポートされている。

リクエスト	説明
UMASK	umask を変更する。例 SITE UMASK 002
IDLE	idle-timer を設定する。例 SITE IDLE 60
CHMOD	ファイルのモードを変更する。例 SITE CHMOD 755 filename
HELP	ヘルプ情報を出力する。例 SITE HELP
NEWER	特定の日付より新しいファイルをリストする。
MINFO	SITE NEWER に似ているが、追加情報を出力する。
GROUP	特定のグループのアクセスを要求する。例 SITE GROUP foo
GPASS	特定のグループのアクセスパスワードを出力する。例 SITE GPASS bar
EXEC	プログラムを実行する。例 SITE EXEC program params

インターネット RFC 959 で指定された残りの ftp 要求は認識されるが、 実装はされていない。 MDTM 及び SIZE は RFC 959 では指定されないが、次に更新される FTP RFC には あらわれるだろう。

FTP サーバは ABOR コマンドがインターネット RFC 959 に記述されるように コマンド Telnet ストリームの Telnet "Synch" シグナル及び Telnet "割り込みプロセス" (IP) シグナルによって前置きされる時にのみ 実行中のファイル転送を中断する。 Telnet IP と Synch の前置きの後に STAT コマンドが データ転送中に受信した場合、転送状態が返される。

ftpd は csh(1) によって使用される ``globbing'' 規則に従ってファイル名を解釈する。 これはユーザがメタ文字 ``*?[]{}~'' を利用することを許可する。

Ftpd は 4 つの規則によりユーザを認証する。

1)  ユーザ名がパスワードデータベース /etc/passwd もしくはオペレーティングシステムに適切なものでなければならず、 パスワードはヌル文字であってはならない。この場合、パスワードは すべてのファイル操作するまえにクライアントによって行わなければ ならない。

2)  ユーザ名は /etc/ftpusers ファイルに存在してはならない。

3)  ユーザは getusershell(3) により返される標準シェルを持っていなければならない。

4)  ユーザ名が ``anonymous'' または ``ftp'' の場合、anonymous ftp アカウントは パスワードファイル（ユーザ ``ftp'' ）に存在していなければならない。 この場合、ユーザは指定するどんなパスワードでもログインすることを 許可される。（規則によりこれはクライアントのホスト名が与えられる）

最後の場合では、 ftpd はクライアントのアクセス特権を制限するために特別な評価をする。 サーバは chroot(2) コマンドを ``ftp'' ユーザのホームディレクトリに実行する。 システムセキュリティが侵害されないようにするために、 ``ftp'' サブツリーは注意して構築することを推奨する; 次の規則が推奨される。

~ftp)
    スーパーユーザによりホームディレクトリを作成し 誰からも書き込まれないようにする。

~ftp/bin)
    スーパーユーザによりこのディレクトリを作成し 誰からも書き込まれないようにする。プログラム ls(1) は list コマンドをサポートするために存在しなければならない。 このプログラムはモード 111 であるべきである。

~ftp/etc)
    スーパーユーザによりこのディレクトリを作成し 誰からも書き込まれないようにする。このファイルは passwd(5) 及び group(5) は ls コマンドが番号の代わりに所有者を表示するように存在しなければならない。 オペレーティングシステム次第で、その他必要なファイルがあることが あります。 getpwent(3) ライブラリルーティンのマニュアルページを調べてください。 passwd のパスワードフィールドは使用されず、本物の暗号化されたパスワードが 含まれるべきではない。これらのファイルはモード 444 でスーパーユーザに 所有されるべきである。パスワードファイルとしてシステムの /etc/passwd ファイルを使用したり、システムの /etc/group ファイルを group ファイルとして ~ftp/etc ディレクトリで使用するべきではない。

BSD/OS システム専用の認証メカニズム
ftpd によって使用される認証メカニズムは、ユーザの class と一致する /etc/login.conf ファイル （login.conf(5) を参照)の ``auth-ftp'' エントリによって決定される。 classに ``auth-ftp'' エントリが存在しない場合、通常の ``auth'' エントリが 代わりに使用される。 代わりの認証メカニズムはコロン (``:'') を追加し、次に認証スタイルを 追加することにより指定することが可能である。例えば ``joe:skey'' のようになる。

一般的な FTP 拡張

ユーザがファイル名 (RETRIEVE コマンドを使用するとき) を指定する場合の FTP サーバへのいくつかの拡張がある:

 実ファイル名   指定ファイル名      動作
 -------------  ------------------  -----------------------------------
 <filename>.Z   <filename>          転送前にファイルを解凍する
 <filename>     <filename>.Z        転送前に<filename>を圧縮する
 <filename>     <filename>.tar      転送前に<filename>を tar する
 <filename>     <filename>.tar.Z    転送前に<filename>を tar して圧縮する

また、FTP サーバは正式な電子メールアドレスをチェックし、 チェックが通らなかったらユーザに警告する。 ユーザの FTP クライアントが「長い応答文」（つまり、複数行の応答）で 応答しなくなってしまう場合は、パスワードの最初の文字にダッシュを 使用するとサーバの lreply() 関数を無効にする。 FTP サーバはすべてのファイルの送信と受信を記録することもでき、 各々のファイル転送で発生する次の情報を保持する。

Mon Dec  3 18:52:41 1990 1 wuarchive.wustl.edu 568881 /files.lst.Z a _ o a chris@wugate.wustl.edu ftp 0 *
  %.24s %d %s %d %s %c %s %c %c %s %s %d %s
    1   2  3  4  5  6  7  8  9  10 11 12 13
  1 DDD MMM dd hh:mm:ss YYYY 形式の現在時刻
  2 秒単位の転送時間
  3 リモートホスト名
  4 バイト単位のファイルサイズ
  5 ファイル名
  6 転送の種類 (a>scii, b>inary)
  7 特別の動作のフラグ (必要に応じて連結する):
        C   ファイルは圧縮された
        U   ファイルは解凍された
        T   ファイルは tar された
        _   なにもされなかった
  8 ファイルはユーザに送信された (o>utgoing),
  　またはユーザから受信した (i>ncoming)
  9 匿名でアクセスされた (r>eal, a>nonymous, g>uest) -- 主に FTP のため
 10 ローカルユーザ名または、ゲストであれば、与えられた ID 文字列
    (anonymous FTP password)
 11 サービス名 ('ftp', その他)
 12 認証メソッド (bitmask)
        0   なし
        1   RFC931 認証
 13 認証されたユーザ ID (可能な場合、そうでなければ '*')

関連項目
ftp(1), getusershell(3), syslogd(8), ftpaccess(5), xferlog(5), umask(2)

バグ
anonymous アカウントは本質的に危険であり 可能であれば避けるべきである。

サーバは特権のあるポート番号でソケットを作成するために スーパーユーザとして実行しなければならない。アドレスを ソケットにバインドする時にのみスーパーユーザに復帰し、 ログインした有効なユーザ ID を保持する。可能性のある セキュリティホールは可能な限り調査したが、完全でない可能性 がある。