ftpd デーモン

目的

インターネット FTP プロトコルにサーバー機能を持たせます。

構文

注: ftpd デーモンは、通常、 inetd デーモンによって始動されます。また、SRC コマンドを使用してコマンド・ラインから制御することもできます。

/usr/sbin/ftpd [ -d ] [ -D DataConnTimeOut ] [-e][ -f ] [ -ff ] [ -k ] [ -l] [ -U ] [ -t TimeOut ] [ -T MaxTimeOut ] [ -s ] [ -u OctalVal ] [-q [-C]] [-c] [-H]

説明

/usr/sbin/ftpd デーモンは、 DARPA インターネット・ファイル転送プロトコル (FTP) サーバー・プロセスです。 ftpd デーモンは、伝送制御プロトコル (TCP) を使用して、/etc/services ファイル内の、ftp コマンド・サービス仕様で指定されたポート上で listen します。

ftpd デーモンの変更は、System Management Interface Tool (SMIT) またはシステム・リソース・コントローラー (SRC) を使用して、/etc/inetd.conf ファイルまたは /etc/services ファイルを編集することによって行うことができます。 ftpd をコマンド・ラインに入力することはお勧めしません。/etc/inetd.conf ファイル内で コメントが解除されていれば ftpd デーモンはデフォルトで始動します。

inetd デーモンは、/etc/inetd.conf ファイルと /etc/services ファイルから情報を取り出します。

/etc/inetd.conf または /etc/services ファイルを変更する場合は、refresh -s inetd または kill -1InetdPID コマンドを実行して、inetd デーモンにその構成ファイルへの変更を通知します。

ftpd デーモンは、ファイル名を csh コマンドの規則に従って拡張します。このコマンドを使用すると、* (アスタリスク)、?(疑問符)、[ ] (左大括弧と右大括弧)、{ } (左中括弧と右中括弧)、~ (ティルド) のようなメタキャラクターを使用できます。

ftpaccess.ctl File

/etc/ftpaccess.ctl ファイルでは、allow:deny:readonly:writeonly:readwrite:useronly:grouponly: herald: および/または motd: で始まる行が 検索されます。 その他の行は無視されます。ファイルが無い場合には、すべてのホストに対して FTP アクセスが許可されます。 allow: および deny: 行は、ホストのアクセスを制限します。readonly: writeonly: および readwrite: 行は、 FTP の読み取り (get) および書き込み (put) を制限します。 useronly: および grouponly: 行は、無名ユーザーを定義します。 herald: および motd: 行は、ログイン前およびログイン後の複数行メッセージに関する指定を行います。

/etc/ftpaccess.ctl 内のすべての行の構文は、次のフォームです。
keyword: value, value, ...
キーワードごとに 1 つ以上の値を指定することができます。同じキーワードのものを複数行指定できます。/etc/ftpaccess.ctl の行 は 1024 文字までに制限されています。1024 を超える文字は無視されます。
allow: および deny: 行の構文は、次のようになります。
allow: host, host, ...
deny: host, host, ...
allow: 行が指定されている場合、 すべての allow: 行にリストされているホストのみが FTP アクセスを許可されます。他のすべてのホストは FTP アクセスを拒否されます。allow: 行が無い場合には、deny: 行に指定されている ホストを除くすべてのホストが FTP アクセスを許可されます。ホストは、ホスト名または IP アドレスのいずれかで指定します。
readonly:、writeonly:、readwrite: 行の構文は、 次のようになります。

readonly: dirname, dirname, ...
writeonly: dirname, dirname, ...
readwrite: dirname, dirname, ...
readonly: 行は 読み取り専用ディレクトリーをリストし、writeonly: 行は書き込み専用 ディレクトリーをリストします。書き込み専用ディレクトリーでは読み取りアクセスは拒否され、 読み取り専用ディレクトリーでは書き込みアクセスは拒否されます。readwrite: 行が指定されている場合を除いて、他のすべてのディレクトリー はアクセスを認可されます。readwrite: 行が指定されていると、readwrite: 行および/または readonly: 行にリスト されているディレクトリーのみが読み取りのアクセスを認可されます。 同様に、readwrite: 行および/または writeonly: 行にリストされているディレクトリーのみが書き込みのアクセスを認可されます。また、これらの行に「ALL」あるいは「NONE」という値を指定できます。
useronly:puseronly: grouponly:、および pgrouponly: 行の構文は、次のようになります。

useronly: username, username, ...
puseronly: username, username, ...
grouponly: groupname, groupname, ...
pgrouponly: groupname, groupname, ...
username は /etc/passwd にあり、groupname は /etc/group にあります。useronly: および puseronly: 行は、無名ユーザーを 定義します。grouponly: および pgrouponly: 行は 、無名ユーザーのグループを定義します。これらの無名ユーザーは、ftp 操作が各自のホーム・ディレクトリーに限定されているという点でユーザー「anonymous」に似ています。useronly: および grouponly: 行は、パスワードで保護されない無名ユーザーを定義します。これはユーザー「anonymous」に似ています。puseronly: および pgrouponly: 行は、パスワードで保護される無名ユーザーを定義します。
注: puseronly: および pgrouponly: のユーザーの場合は 、パスワードを作成し、ログインを使用不可にする必要があります。
herald: および motd: 行の構文は、次のようになります。
herald: path
motd: on|off
パスは、ログイン前に表示される複数行の herald が入っているファイルの絶対パス名です。motd: 行の値が 'on' である場合は、$HOME/motd ファイルに、ログイン後に表示される複数行のメッセージが入っています。ユーザーが定義済み無名ユーザーである場合は、/etc/motd ファイルに、ログイン後に表示される複数行のメッセージが入っています。(/etc/motd は、無名ユーザーの chroot が実行されるホーム・ディレクトリーです。) motd: 行のデフォルトは off です。

標準オペレーティング・システムの認証メソッドが現行認証メソッドである場合

ftpd デーモンは、クライアント・プロセスを認証してからでないと、クライアント・プロセス用にファイルを転送できません。ftpd デーモンは次の規則に従ってクライアント・プロセスを認証します。
  • ユーザーは、パスワード・データベース /etc/security/passwd に、 パスワードを入れておく必要があります。(ユーザーのパスワードが null でない場合、クライアント・プロセスでそのパスワードを指定しなければなりません。)
  • ユーザー名は、 /etc/ftpusers ファイル名に存在するものは、 無効です。
  • ユーザーの login shell は、/etc/security/login.cfg ファイルのシェル属性に存在するものでなければなりません。
  • ユーザー名が anonymousftp または /etc/ftpaccess.ctl ファイルに定義されている無名ユーザーである場合は、 無名の FTP アカウントをパスワード・ファイルに定義する必要があります。この場合、クライアント・プロセスはどのパスワードでもログインできます。 規則では、パスワードにはクライアント・ホストの名前を使います。ftpd デーモンは特別措置を講じてクライアント・プロセスが無名のアカウントへアクセスするのを制限します。

Kerberos 5 が現行認証メソッドである場合

以下の条件がすべて満たされた場合にのみ、ftpd デーモンはアクセスを認めます。

  • ftp クライアントのローカル・ユーザーに、現行 DCE 認証がある。
  • ローカルおよびリモートの両システムが、 AUTH コマンドをサポートしている。
  • リモート・システムが DCE 認証を、 リモート・アカウントにアクセスするのに十分なものとして受け入れる。詳しくは、kvalid_user 機能のセクションを参照してください。

トランスポート層セキュリティーのサポート

ftpd デーモンは、RFC 4217 で定義されているトランスポート層セキュリティー (TLS) をサポートします。TLS は、クライアントとサーバー間で安全な通信を行うための暗号プロトコルです。

このインプリメンテーションの主な目的は、暗号化を使用して制御とデータ接続を保護するためです。クライアントは、他の方法で認証されなければなりません。サポートされている方法は、標準認証メソッドのみです。

TLS セッションを開始するための要求を受信すると、ftpd デーモンは /etc/ftpd.cnf ファイルの読み取りを行い、TLS セッションのセットアップに使用される以下の構成パラメーターをロードします。

項目 説明
CRL_PATH CRL_PATH パラメーターは、証明書取り消しリスト・ファイルへのパスを提供します。このファイルは PEM フォーマットでなければなりません。これを指定すると、クライアントが提供するデジタル証明書が証明書取り消しリストと照合されます。ftp クライアントがデジタル証明書を使用していない場合は、接続が失敗します。クライアントがデジタル証明書を提供している一方で、その証明書が取り消されている場合は、TLS セッションが失敗します。このパラメーターを指定しない場合は、クライアントはデジタル証明書を提供する必要はありません。
CA_PATH CA_PATH パラメーターは、認証局ファイルへのパスを提供します。このファイルは PEM フォーマットでなければなりません。これを指定すると、クライアント証明書が認証局と照合されます。クライアントがデジタル証明書を提供しない場合は、接続が失敗します。クライアントがデジタル証明書を提供している一方で、その証明書がセキュリティー機関によって署名されていない場合は、TLS セッションが失敗します。このパラメーターを指定しない場合は、クライアントはデジタル証明書を提供する必要はありません。
CIPHER_LIST CIPHER_LIST パラメーターを指定すると、このリストが TLS セッション中に使用されます。これを指定しないと、デフォルトの暗号リストが使用されます。
DEPTH CA_PATH 構成パラメーターを指定すると、デジタル証明書階層内の ftp クライアントが提供する証明書を検証するために DEPTH 値が使用されます。これを指定しないと、デフォルト値の 9 が使用されます。
CERTIFICATE CERTIFICATE パラメーターは、PEM フォーマットの有効なデジタル証明書チェーン・ファイルへのパスを提供します。このファイルは TLS セッションで使用されます。このパラメーターは、TLS セッションを開始するために指定する必要があります。このパラメーターを指定しないと、ftpd サーバーはすべての TLS 要求を拒否します。
CERTIFICATE_PRIVATE_KEY CERTIFICATE_PRIVATE_KEY パラメーターは、PEM フォーマットの証明書の秘密鍵へのパスを提供します。これは TLS セッション中に使用されます。このパラメーターは、TLS セッションを開始するために指定する必要があります。このパラメーターを指定しないと、ftpd サーバーはすべての TLS 要求を拒否します。
DH_PARAMETERS_DIR DH_PARAMETERS_DIR パラメーターは、PEM フォーマットの Diffie Helman パラメーターを含むディレクトリーへのパスを提供します。 このディレクトリーには、PEM フォーマットの Diffie Helman パラメーターを含むファイルが複数入ります。ftpd デーモンは、必要に応じて、使用するパラメーターを検索します。

TLS をサポートするには、AIX® Web Download Pack Programs Web サイトから最新バージョンの OpenSSL ツールをインストールする必要があります。

ファイル転送プロトコル・サブツリーのガイドライン

無名 FTP ユーザーの処理では、サーバーは FTP ユーザー・アカウントのホーム・ディレクトリーで chroot コマンドを実行します。セキュリティーを強化するために、FTP サブツリーの構成時に次の規則を実行します。

項目 説明
~ftp ホーム・ディレクトリーを root の所有とし、モードを r-xr-xr-x (555) にする。
~ftp/bin このディレクトリーを root ユーザーの所有とし、他のユーザーからの書き込みができないようにする。リスト・コマンドをサポートするために、このディレクトリー内には ls プログラムがなければなりません。また、このプログラムはモード 111 を持つ必要があります。
~ftp/etc このディレクトリーを root ユーザーの所有とし、他のユーザーからの書き込みができないようにする。
~ftp/pub このディレクトリーのモードを 777 とし、FTP の所有とします。ユーザーはこのディレクトリー内の無名のアカウントを介してアクセス可能になるようなファイルを配置します。
注: シェル・スクリプト /usr/samples/tcpip/anon.ftp は、 上記の規則に従って無名 FTP アカウントをセットアップします。
/etc/ftpaccess.ctl に定義されている無名 FTP ユーザー を処理する場合、サーバーは FTP ユーザー・アカウントのホーム・ディレクトリーで chroot コマンドを実行します。セキュリティーを強化するために、ユーザーのサブツリーの構成時に 次の規則を実行します。
~user
ホーム・ディレクトリーを root の所有とし、モードを r-xr-xr-x (555) にする。
~user/bin
このディレクトリーを root ユーザーの所有とし、他のユーザーからの書き込みができないようにする。 リスト・コマンドをサポートするために、このディレクトリー内には ls プログラムがなければなりません。また、このプログラムはモード 111 を持つ必要があります。
~user/etc
このディレクトリーを root ユーザーの所有とし、他のユーザーからの書き込みができないようにする。
~user/pub
このディレクトリーのモードを 777 とし、ユーザーの所有とする。ユーザーはこのディレクトリー内の無名のアカウントを介してアクセス可能になるようなファイルを配置します。
注: シェル・スクリプト /usr/samples/tcpip/anon.users.ftp は、 上記の規則に従って無名 FTP アカウントをセットアップします。

サーバーは特権ポート番号付きのソケットを作成するために、root ユーザーとして実行されなければなりません。サーバーはログイン済みの実効ユーザー ID を保持し、ソケットにアドレスをバインドするときだけ root ユーザーに変わります。

サポートされるファイル転送プロトコル要求

ftpd デーモンは現在次の FTP 要求をサポートしています。

項目 説明
ABOR 前のコマンドを終了させる。
ACCT アカウントを指定する (無視される)。
ADAT 認証/セキュリティー・データを指定します。
ALLO 保存域を割り当てる (中は空白)。
APPE ファイルに追加する。
AUTH 認証/セキュリティー・メカニズムを指定します。
CCC コマンド・チャネル・クリアを指定します。
CDUP 現在の作業ディレクトリーの親ディレクトリーに変更する。
CWD 作業ディレクトリーを変更する。
DELE ファイルを削除する。
ENC プライバシー保護コマンドを指定します。
HELP ヘルプ情報を提供する。
項目 説明
LIST ディレクトリーにリスト・ファイルを提供する (ls -lA コマンドと同じ)。
MKD ディレクトリーを作成する。
MDTM ファイルを最後に変更した時刻を明示する。
MIC 保全性保護コマンドを指定します。
MODE データ転送モードを指定する。
NLST ディレクトリーにリスト・ファイルを提供する (ls コマンドと同じ)。
NOOP 何もしない。
PASS パスワードを指定する。
PASV サーバーからサーバーへの転送の準備をする。
PBSZ 保護バッファー・サイズを指定します。
PORT データ接続ポートを指定する。
PROT データ・チャネル保護レベルを指定します。
PWD 現在の作業ディレクトリーを印刷する。
QUIT セッションを終了する。
RETR ファイルを検索する。
RMD ディレクトリーを除去する。
RNFR 改名前のファイル名を指定する。
RNTO 改名後のファイル名を指定する。
SITE
SITE 要求では、次の非標準コマンドまたは UNIX 固有コマンドがサポートされます。
UMASK
umask を変更する (SITE UMASK 002)。
IDLE
アイドル時間を設定する (SITE IDLE 60)。
CHMOD
ファイルのモードを変更する (SITE CHMOD 755 FileName)。
HELP
ヘルプ情報を提供する (SITE HELP)。
SIZE 現行ファイルのサイズを戻す。
STAT サーバーの状況を戻す。
STOR ファイルを格納する。
STOU 固有のファイル名を使用してファイルを格納する。
STRU データ転送の構造をファイル構造として指定する。
SYST サーバー・システムのオペレーティング・システム・タイプを明示する。
TYPE データ転送タイプを Type パラメーターで指定する。
USER ユーザー名を指定する。
XCUP 現在の作業ディレクトリーの親ディレクトリーに変更する (通常は使用しない)。
XCWD 現行ディレクトリーを変更する (通常は使用しない)。
XMKD ディレクトリーを作成する (通常は使用しない)。
XPWD 現在の作業ディレクトリーを表示する (通常は使用しない)。
XRMD ディレクトリーを除去する (通常は使用しない)。

インターネット RFC 959 に定義された残りの FTP 要求は、認識されますが実行はされません。MDTM および SIZE 要求は RFC 959 で指定されていませんが、次の改訂版 FTP RFC に登場する予定です。

STAT 要求がデータ転送中に受信されて、Telnet IP シグナルおよび SYNCH シグナルの後に来る場合には、転送状況は再実行されます。

ftpd デーモンは System Management Interface Tool (SMIT) を使うか、または /etc/inetd.conf ファイルを変更して制御します。ftpd をコマンド・ラインに入力することはお勧めしません。

システム・リソース・コントローラーによる ftpd デーモンの操作

ftpd デーモンは、inetd デーモンのサブサーバーです。ftpd デーモンは tcpip SRC サブシステム・グループのメンバーです。このデーモンは、/etc/inetd.conf ファイルのデフォルトで使用可能になり、以下の SRC コマンドで操作できます。

項目 説明
startsrc サブシステム、サブシステム・グループ、またはサブサーバーを始動します。
stopsrc サブシステム、サブシステムのグループ、またはサブサーバーを停止します。
lssrc サブシステム、サブシステムのグループ、 あるいはサブサーバーのトレースの状況を取得します。

フラグ

項目 説明
-C send_file コマンドを使用して送信される 発信ファイルをネットワーク・バッファー・キャッシュ (NBC) に入れなければならないことを 指定します。このフラグは、-q フラグが指定されていなければ指定できません。このフラグは、ファイルがバイナリー・モードで保護されずに送信される場合にのみ適用されます。
-c ホスト名のリバース・ルックアップを抑制します。
-d
ftpd デーモンの動作についてのデバッグ情報を syslogd デーモンに送信します。-d フラグを指定する場合には、/etc/syslog.conf ファイルを編集して次のエントリーを追加する必要があります。
daemon.debug FileName
注: syslogd デーモンの debug レベルには、info レベルのメッセージが含まれます。

/etc/syslog.conf ファイルを編集しないと、メッセージはなにも生成されません。/etc/syslog.conf ファイルを変更した後、 refresh -s syslogd コマンドまたは、 kill-1SyslogdPID コマンドを実行して、 syslogd デーモンに、構成ファイルに加えた変更内容を通知してください。 デバッグ・レベルの詳細については、/etc/syslog.conf ファイルを参照してください。

-D DataConnTimeOut

ftpd デーモンがデータ接続を保持する最大秒数を指定します。デフォルト値は 300 秒です。待機時間を無限にする場合にはこの値を 0 に指定します。DataConnTimeOut パラメーターの値は 0 から MAXINT までの範囲で指定できます。

-e TLS 対応のクライアントのみがサーバーとの接続を確立できるようにします。
-f クライアントがサーバーに特定ポートに戻る接続を要求した場合は、 特権ポートの確認を使用不可にします。デフォルトでは、ftpd ではクライアントは、 セキュリティー上の用心から特権ポートへの接続を要求することはできません。
-ff クライアントがサーバーに、特定のクライアント・ポートに戻る接続を要求した場合は、 特権ポートと、制御接続に使用されるアドレスと一致する IP アドレスの、 両方の確認を使用不可にします。このフラグを使用すると、クライアントがサーバーに、 代替ホストまたは代替インターフェースにデータを送信するよう要求できるようになります。デフォルトでは、ftpd はこのアクションを、 セキュリティー上の用心から許可しません。
-H FILE_RenameFS_Rmdir、および FILE_Unlink の各イベントの監査ロギングをオンにします (これらのイベントが root ユーザーに対して有効にされている場合)。
-k データ転送ソケット上の sys/socket.h ファイルに定義された SO_KEEPALIVE オプションを設定して、イベント TCP/IP がハングした場合にデータ転送が タイムアウトになるようにします。アイドル状態の間隔時間は、 no コマンドの、 tcp_keepidle オプションと、 tcp_keepintvl オプションで指定された、 システム全体に関する値に依存します。このフラグがないと、ftpd データ転送はタイムアウトになりません。
-l ftpd デーモンの動作についてのロギング情報を syslogd デーモンに送信します。-l フラグを指定した場合、/etc/syslog.conf ファイルを編集して、次のエントリーを追加しなければなりません。
daemon.info FileName

/etc/syslog.conf ファイルを編集しないと、メッセージはなにも生成されません。/etc/syslog.conf ファイルを変更した後、 refresh -s syslogd コマンドまたは、 kill-1SyslogdPID コマンドを実行して、 syslogd デーモンに、構成ファイルに加えた変更内容を通知してください。 デバッグ・レベルの詳細については、/etc/syslog.conf ファイルを参照してください。

-q ネットワーク上のファイルの送信に send_file サブルーチンを使用しなければならないことを指定します。このフラグは、ファイルがバイナリー・モードで保護されずに送信される場合にのみ適用されます。
-t TimeOut TimeOut 変数で指定された秒数後にアクティブでないセッションをログアウトします。デフォルトのリミットは 15 分 (900 秒) です。タイムアウトはデータ接続と制御接続の両方に適用されます。
-T MaxTimeOut MaxTimeOut 変数で指定された最大秒数後にアクティブでないクライアント・セッションをログアウトします。デフォルトのリミットは 2 時間 (7200 秒) です。
-s ソケット・レベルのデバッグをオンにします。
-u OctalVal ftpd デーモンの umask を設定します。OctalVal 変数は、umask を定義する 8 進数として指定しなければなりません。デフォルトの umask は 027 という 8 進数で、これは rw-r--- というファイル許可になります。
-U 転送中にファイルをアンロックしたままにします。このフラグが /usr/sbin/ftpd と 一緒に指定されている場合には、転送中でもファイルをオープンできます。

セキュリティー

ftpd デーモンは、サービス名が ftp の PAM 使用可能なアプリケーションです。認証に PAM を使用するようにシステム全体の構成を設定するには、root ユーザーとして /etc/security/login.cfgusw スタンザにある auth_type 属性の値を PAM_AUTH に変更します。

PAM が使用可能であるときに使用される認証メカニズムは、/etc/pam.conf ftp サービスに対する構成によって決まります。ftpd デーモンは、authaccount、および session モジュール・タイプに対して /etc/pam.conf エントリーを必要とします。下記に、ftp サービスのための /etc/pam.conf に推奨される構成をリストします。
#
# AIX ftp configuration
#
ftp auth      required     /usr/lib/security/pam_aix

ftp account   required     /usr/lib/security/pam_aix

ftp session   required     /usr/lib/security/pam_aix

注: ftpd デーモンの引数は、SMIT を使用することによって、 または /etc/inetd.conf ファイルを編集することによって指定できます。
  1. ftpd デーモンを始動するには、次のように入力します。
    startsrc -t ftp
    -t フラグを指定して startsrc コマンドを実行すると、ftpd サブサーバーが始動されます。サブサーバーを指定するには、-t フラグを使用しなければなりません。このフラグを使用しないと、コマンドは正常に実行されません。
  2. ftpd デーモンを停止するには、通常、次のように入力します。
    stopsrc -t ftp
    -t フラグを指定して stopsrc コマンドを実行すると、ftpd サブサーバーが停止されます。stopsrc コマンドを使用すると、保留中のすべての接続を始められ、既存の接続をすべて完了させ、新たな接続が始められるのを防ぐことができます。サブサーバーを指定するには、-t フラグを使用しなければなりません。このフラグを使用しないと、コマンドは正常に実行されません。
  3. ftpd デーモンとすべての ftpd 接続を強制的に停止させるには、次のように入力します。
    
    stopsrc -f -t ftp
    -t フラグと -f フラグを指定して stopsrc コマンドを実行すると、ftpd サブサーバーが強制的に停止されます。また、保留中のすべての接続と既存の接続が即座に終了します。
  4. ftpd デーモンについての簡略状況報告を表示するには、次のように入力します。
    
    lssrc -t ftp
    -t フラグを指定した lssrc コマンドは、デーモンの名前、プロセス ID、および状態 (アクティブまたは非アクティブ) を戻します。サブサーバーを指定するには、-t フラグを使用しなければなりません。 このフラグを使用しないと、コマンドは正常に実行されません。

ファイル

項目 説明
/etc/locks/ftpd インターロックおよびプロセス ID (PID) ストレージが入っています。
/etc/group グループ用のパスワードが入っています。
/etc/passwd ユーザー用のパスワードが入っています。
/etc/security/login.cfg ログインおよびユーザー認証のための構成情報が入っています。
/etc/security/passwd 暗号化されたパスワードが入っています。
/etc/syslog.conf syslogd デーモンの構成情報が入っています。
/usr/samples/tcpip/anon.ftp 無名の FTP アカウントを設定するためのシェル・スクリプト例が入っています。このファイルにはその使い方の説明も入っています。
/etc/ftpd.cnf TLS サポート用の構成パラメーターが入っています。