Solaris のシステム管理 (ネットワークサービス)

第 28 章 FTP サーバーの管理 (手順)

この章では、次の表に示す FTP サーバーを設定し、管理するための作業について説明します。

FTP サーバーの管理 (作業マップ)

表 28–1 作業マップ : FTP サーバーの管理

作業 

説明 

参照先 

FTP サーバーへのアクセスの構成 

/etc/ftpd ディレクトリに置かれた ftpaccessftpusersftphosts の各ファイルを使用して、FTP サーバーへのアクセスを確立または制限する

「ユーザーログインの制限を設定する方法」

「無効なログインの試行回数を制御する方法」

「特定のユーザーの FTP サーバーへのアクセスを拒否する方法」

「デフォルト FTP サーバーへのアクセスを制限する方法」

「FTP サーバークラスの定義方法」

FTP サーバーのログインの設定 

実ユーザー、ゲストユーザー、匿名ユーザーのログインアカウントを設定する 

「実 FTP ユーザーの設定方法」

「ゲスト FTP ユーザーの設定方法」

「匿名 FTP ユーザーの設定方法」

/etc/shells ファイルの作成方法」

メッセージファイルをカスタマイズする 

/etc/ftpd/ftpaccess ファイルを編集して、特定のイベントに関連して FTP サーバーが FTP クライアントにメッセージを返すように構成する

「メッセージファイルのカスタマイズ方法」

「ユーザーに送信するメッセージの作成方法」

「README オプションの構成方法」

FTP サーバー上のファイルへのアクセスを構成する 

/etc/ftpd/ftpaccess ファイルを使用して、特定のコマンドの実行、FTP サーバーからのファイルのダウンロード、FTP サーバーへのファイルのアップロードを許可するユーザーのクラスを指定する

「ダイアルアップネットワークに対する DA 検出の構成方法」

「FTP サーバー上のアップロードとダウンロードの制御」

限定された仮想ホスティングまたは完全な仮想ホスティングを有効化する 

/etc/ftpd/ftpaccess ファイルを使用して、FTP サーバーが同一マシン上の複数ドメインをサポートするように構成する

「限定仮想ホスティングを有効にする方法」

「完全仮想ホスティングを有効にする方法」

FTP サーバーを起動する 

FTP サーバーが nowait モード、スタンドアロンモードまたはフォアグラウンドモードで起動するようにサービスプロパティーを変更する

「SMF を使用して FTP サーバーを起動する方法」

「FTP サーバーをバックグラウンドで起動する方法」

「FTP サーバーをフォアグラウンドで起動する方法」

FTP サーバーを停止する 

/etc/ftpd/ftpaccess ファイルを使用し、ftpshut を実行して FTP サーバーを停止する

「FTP サーバーの停止」

一般的な FTP サーバーの問題をトラブルシューティングする 

syslogd を検査し、greeting textlog commands を使用して FTP サーバー上の問題をデバッグする

syslogd 内の FTP サーバーのメッセージを検査する方法」

greeting text を使用して ftpaccess を検査する方法」

「FTP ユーザーにより実行されたコマンドの検査」

FTP サーバーへのアクセスの制御

/etc/ftpd ディレクトリに置かれた構成ファイルを使用して FTP サーバーへのアクセスを制御します。次に構成ファイルを示します。

ProcedureFTP サーバークラスの定義方法

ftpaccess を使用する場合、FTP サーバーにログインするには、ユーザーはクラスのメンバーである必要があります。class 指令を ftpaccess に追加するには、特定のホストからアクセスを許可されているユーザーの class 名と typelist を指定します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. ftpaccess ファイルに匿名ユーザー、ゲストユーザー、実ユーザーのエントリを追加します。


    class class typelist addrglob[addrglob...]
    class

    FTP ユーザーの定義に使用するキーワード

    class

    class キーワードを使用して定義する名前。各ログインは、定義されているクラスのリストと比較される。ログインしたユーザーは、一致した最初のクラスのメンバーとみなされる

    typelist

    3 種類のユーザー (anonymousguestreal) に一致するキーワードからなる、コンマで区切られたリスト

    addrglob

    展開されたドメイン名または展開された数値アドレス。addrglob は、スラッシュ ('/') で始まるファイル名にすることもできる。 address:netmask または address/cidr という形のアドレス展開を追加できる

    次に、展開されたアドレスの例を示す

    • 数値の IPv4 アドレス: 10.1.2.3

    • 展開されたドメイン名 *.provider.com

    • 展開された数値の IPv4 アドレス 10.1.2.*

    • 数値の IPv4 アドレス : ネットマスク 10.1.2.0:255.255.255.0

    • 数値の IPv4 アドレス/CIDR 10.1.2.0/24

    • 数値の IPv6 アドレス : 2000::56:789:21ff:fe8f:ba98

    • 数値の IPv6 アドレス/CIDR: 2000::56:789:21ff:fe8f:ba98/120


例 28–1 FTP サーバークラスの定義


class  local  real,guest,anonymous *.provider.com
class  remote real,guest,anonymous *

この例では、local クラスを、*.provider.com からログインする realguest、または anonymous のいずれかの種類のユーザーとして定義します。最後の行では、remote を、*.provider.com 以外からログインするユーザーとして定義します。


Procedureユーザーログインの制限を設定する方法

ftpaccess ファイルに設定された指令により、特定のクラスのユーザーが同時にログインできる数を制限できます。各ログインの制限には、クラス名、UUCP スタイルの曜日リスト、制限を超過した場合に表示するメッセージファイルが含まれます。

ユーザーログインの制限を設定するには、次の手順を実行します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 次のエントリを ftpaccess ファイルに追加します。


    limit class n times [message-file]
    limit

    定義されたクラスの特定時刻の同時ログイン数を、指定したユーザー数に制限するキーワード

    class

    class キーワードを使用して定義する名前。各ログインは、定義されているクラスのリストと比較される。ログインしたユーザーは、一致した最初のクラスのメンバーとみなされる

    n

    ユーザー数

    times

    クラスが接続可能な曜日と 1 日の時間帯。任意の曜日を指定する場合は Any を指定する

    message-file

    ユーザーがアクセスを拒否された場合に表示されるメッセージファイル


例 28–2 ユーザーログインの制限の設定


limit   anon     50  Wk0800-1800		/etc/ftpd/ftpmsg.deny
limit   anon    100  Any				/etc/ftpd/ftpmsg.deny
limit   guest   100  Any				/etc/ftpd/ftpmsg.deny

前述の例の最初の行では、毎週勤務時間中のクラス anon のユーザーの同時ログイン数が 50 に制限されています。2 行目では、勤務時間外の anon のユーザーの同時ログイン数を 100 に制限しています。最後の行では、常時 guest ユーザーの同時ログイン数が 100 に制限されています。日時パラメータの指定方法の詳細は、ftpaccess(4) のマニュアルページを参照してください。

前述の例では、そのほかに、指定したログイン制限数に達した場合に /etc/ftpd/ftpmsg.deny ファイルの内容が返されることを示しています。この場合、ftpmsg.deny は存在するものと仮定しています。/usr/sbin/ftpcount コマンドを使用して、特定の時刻にログインしている各クラスのユーザーの数とログイン制限を表示する方法については、ftpcount(1) のマニュアルページを参照してください。

ユーザーは、その時刻の指定ログイン制限数に達していなければ、FTP サーバーへのログインを許可されます。匿名ユーザーは、ユーザー ftp としてログインします。実ユーザーは、自分自身としてログインします。ゲストユーザーは、アクセス特権を制限する chroot 環境を持つ実ユーザーとしてログインします。

/usr/sbin/ftpwho コマンドを使用して、FTP サーバーにログインするユーザーの識別情報を検査する方法については、ftpwho(1) のマニュアルページを参照してください。


Procedure無効なログインの試行回数を制御する方法

必要な情報を誤入力するなどの理由で FTP サーバーへのログインが失敗すると、通常はログインが繰り返されます。ユーザーは、特定回数連続してログインを試行できます。その回数を超えるとメッセージが syslog ファイルに記録されます。その時点でユーザーとの接続は切断されます。ログイン失敗時の試行回数を制限するには、次の手順を実行します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 次のエントリを ftpaccess ファイルに追加します。


    loginfails n
    
    loginfails

    FTP 接続が切断されるまでのログインに失敗できる回数を割り当てるキーワード

    n

    ログインに失敗できる回数


例 28–3 無効なログイン試行回数の制御


loginfails 10

この例では、ユーザーがログイン試行に 10 回失敗すると FTP サーバーから接続を切断されることを示します。


Procedure特定のユーザーの FTP サーバーへのアクセスを拒否する方法

/etc/ftpd/ftpusers には、FTP サーバーへのログインを拒否するユーザーの名前が列挙されています。ログインが試行されると、FTP サーバーは /etc/ftpd/ftpusers ファイルを検査して、そのユーザーからのアクセスを拒否するかどうかを判定します。ユーザーの名前がそのファイルにない場合は、次に /etc/ftpusers ファイルを検査します。

/etc/ftpusers の中にユーザー名に一致するものがあった場合、使用を差し控えるべきファイルで一致するユーザー名が見つかったことを示す syslogd メッセージが書き込まれます。また、このメッセージでは、/etc/ftpusers の代わりに /etc/ftpd/ftpusers を使用することを推薦します。


注 –

/etc/ftpusers ファイルのサポートは、本リリースでは推奨されていません。FTP サーバーをインストールするときに /etc/ftpusers ファイルがすでに存在している場合は、/etc/ftpd/ftpusers に移動されます。


詳細は、syslogd(1M)in.ftpd(1M)ftpusers(4) のマニュアルページを参照してください。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. FTP サーバーへのログインを拒否するユーザーのエントリを /etc/ftpd/ftpusers に追加します。


例 28–4 FTP サーバーへのアクセスを拒否する


root
daemon
bin
sys
adm
lp
uccp
nuucp
listen
nobody
noaccess
nobody4

この例では、ftpusers ファイルの通常のエントリが列挙されています。ユーザー名は /etc/passwd ファイルのエントリに一致します。通常このリストには、root、その他の管理に使用するユーザー、システムアプリケーションを示すユーザーが含まれます。

root エントリは、セキュリティー手段の 1 つとして ftpusers に追加されています。デフォルトのセキュリティーポリシーでは、root のリモートログインを拒否します。また、/etc/default/loginfile ファイルの CONSOLE エントリとして設定されているデフォルト値も同じポリシーに従っています。login(1) のマニュアルページを参照してください。


Procedureデフォルト FTP サーバーへのアクセスを制限する方法

これまでに説明した制御方法以外に、ftpaccess ファイルに明示的に文を追加して FTP サーバーへのアクセスを制限することができます。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 次のエントリを ftpaccess ファイルに追加します。

    1. デフォルトでは、すべてのユーザーはデフォルト (非仮想) FTP サーバーへのアクセスを許可されています。特定のユーザー (anonymous 以外) のアクセスを拒否するには、次のエントリを追加します。


      defaultserver deny username [username...]
      defaultserver

      アクセスの拒否または許可を設定する非仮想サーバーの識別に使用するキーワード

      username

      defaultserver へのアクセスを制限するユーザーのログイン名。

    2. deny 行に列挙されていないユーザーのアクセスを許可するには、次の行を追加します。


      defaultserver allow username [username...]
    3. 匿名ユーザーのアクセスを拒否するには、次のエントリを追加します。


      defaultserver private

例 28–5 デフォルト FTP サーバーへのアクセスの制限


defaultserver deny *
defaultserver allow username

この例では、FTP サーバーは、anon ユーザーと allow 行に列挙されているユーザー以外のユーザーのアクセスをすべて拒否するように設定されています。

また、ftphosts ファイルを使用して、複数のホストからの特定のログインアカウントのアクセスを拒否することができます。詳細は、ftphosts(4) のマニュアルページを参照してください。


FTP サーバーのログインの設定

FTP サーバーにアクセスするには、まずログインする必要があります。FTP サーバーは、「実ユーザー」、「ゲストユーザー」、「匿名ユーザー」の 3 種類のユーザーログインアカウントをサポートします。

Procedure実 FTP ユーザーの設定方法

実ユーザーの FTP サーバーへのアクセスを有効にするには、次の手順を実行します。

  1. ユーザーに、端末セッションの確立に使用可能なユーザー名とパスワードで設定されたアカウントがあることを確認します。

    詳細は、『Solaris のシステム管理 (基本編)』の第 4 章「ユーザーアカウントとグループの管理 (概要)」を参照してください。

  2. 実ユーザーが ftpaccess ファイルのクラスのメンバーであることを確認します。

    ftpaccess ファイルに定義されたユーザークラスについては、「FTP サーバークラスの定義方法」を参照してください。

  3. ユーザーのログインシェルが /etc/shells ファイルに列挙されていることを確認します。

Procedureゲスト FTP ユーザーの設定方法

ftpconfig スクリプトを使用して、すべての必要なシステムファイルをホームディレクトリにコピーします。ゲストユーザーとゲストのホームディレクトリがすでに存在する場合は、ftpconfig スクリプトは現在のシステムファイルでホームディレクトリ下の領域を更新します。

詳細は、ftpconfig(1M) のマニュアルページを参照してください。


注 –

匿名ユーザー用のユーザー名は anonymousftp ですが、FTP ゲスト用のユーザー名は固定されていません。実ユーザー名として使用できる名前であれば、どのような名前でも選択できます。


ゲストユーザーの FTP サーバーへのアクセスを有効にするには、次の手順を実行します。

  1. useradd スクリプトを使用して、ログインシェルが /bin/true、ホームディレクトリが /root-dir/./home-dir であるようなゲストユーザーアカウントを作成します。

    詳細は、useradd(1M) のマニュアルページと『Solaris のシステム管理 (基本編)』の第 4 章「ユーザーアカウントとグループの管理 (概要)」を参照してください。


    注 –

    この手順では、/home/guests/./guest1guest1 というユーザーのホームディレクトリの名前として使用されます。



    # /usr/sbin/useradd -m -c "Guest FTP" -d \
      /home/guests/./guest1 -s /bin/true guest1
    
  2. ゲストアカウントにパスワードを割り当てます。

  3. guestuser エントリを ftpaccess ファイルに追加します。


    guestuser guest1

    注 –

    さらに、ftpaccess ファイルで guestgroup 機能を使用して、複数のゲストユーザーを指定することができます。ftpaccess ファイルで guest-root 機能を使用すると、ゲストユーザーのホームディレクトリパスで /./ を指定する必要がなくなります。


  4. ftpaccess ファイルで、ゲストユーザーが class のメンバーであることを確認します。詳細は、「FTP サーバークラスの定義方法」を参照してください。

  5. ftpconfig スクリプトを使用して、chroot 領域の必要なファイルを作成します。


    /usr/sbin/ftpconfig -d /home/guests
    
  6. /bin/true/etc/shells ファイルに列挙されていることを確認します。/etc/shells ファイルの作成方法」を参照してください。


例 28–6 ゲスト FTP サーバーの設定

この例では、FTP 領域は /home/guests ディレクトリに設定されます。


# /usr/sbin/ftpconfig -d /home/guests
Updating directory /home/guests

Procedure匿名 FTP ユーザーの設定方法

ftpconfig スクリプトは、anonymous アカウントを作成し、ホームディレクトリに必要なファイルを作成します。

詳細は、ftpconfig(1M) のマニュアルページを参照してください。

匿名ユーザーの FTP サーバーへのアクセスを有効にするには、次の手順を実行します。

  1. ftpconfig スクリプトを使用して、匿名ユーザーアカウントを作成します。


    /usr/sbin/ftpconfig anonymous-ftp-directory
    
  2. ftpaccess ファイルで、匿名ユーザーが class に割り当てられていることを確認します。

    詳細は、「FTP サーバークラスの定義方法」を参照してください。


例 28–7 匿名 FTP ユーザーの設定

この例では、FTP 領域は /home/ftp ディレクトリに設定されます。


# /usr/sbin/ftpconfig /home/ftp
Creating user ftp
Updating directory /home/ftp

Procedure/etc/shells ファイルの作成方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. /etc/shells ファイルを作成します。

  3. /etc/shells を編集します。各行のシェルにフルパスを追加します。


例 28–8 /etc/shells ファイルの作成

次に、FTP ゲストユーザー用の /bin/true が含まれる /etc/shells ファイルの例を示します。


/sbin/sh 
/bin/csh 
/bin/jsh 
/bin/ksh 
/bin/remsh 
/bin/rksh 
/bin/rsh 
/bin/sh 
/usr/bin/csh 
/usr/bin/ksh 
/usr/bin/bash 
/usr/bin/tcsh
/usr/bin/zsh 
/bin/true

メッセージファイルのカスタマイズ

FTP サーバーを構成して、特定のイベントに関連するメッセージを FTP クライアントに返すことができます。ユーザーが FTP サーバーにログインするときに表示される開始メッセージを設定することができます。また、ユーザーが別のディレクトリに移動する場合にメッセージを表示することもできます。

メッセージファイルには、プレーンテキストだけでなく、1 つまたは複数のマジッククッキーを設定できます。マジッククッキーは、% (パーセント記号) と、そのあとに続く 1 文字から構成されます。クッキーをメッセージテキストに組み込む場合、メッセージファイルが呼び出された時点でクッキーに関連付けられた情報が画面に表示されます。

たとえば、メッセージテキストにクッキー %L が含まれているとします。


Welcome to %L! 

メッセージが表示されるとき、マジッククッキー %L は、ftpaccess ファイルの hostname 文で定義されたサーバー名で置き換えられます。サポートされているメッセージクッキーの完全なリストは、ftpaccess(4) のマニュアルページを参照してください。


注 –

ホスト名が ftpaccess ファイルに定義されていない場合、ローカルマシンのデフォルトホスト名が使用されます。


Procedureメッセージファイルのカスタマイズ方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. メッセージファイルを編集して、適宜マジッククッキーを追加します。

    使用できるクッキーのリストは、ftpaccess(4) のマニュアルページを参照してください。


例 28–9 メッセージファイルのカスタマイズ

次に、マジッククッキーを使用するメッセージファイルの例を示します。


Welcome to %L -- local time is %T.
 
You are number %N out of a maximum of %M.
All transfers are logged.
 
If your FTP client crashes or hangs shortly after login 
please try
using a dash (-) as the first character of your password. 
This will
turn off the informational messages that may be confusing 
your FTP
client.
 
Please send any comments to %E.

Procedureユーザーに送信するメッセージの作成方法

ユーザーがログインしたあと、システム関連またはアプリケーション関連のメッセージが画面に表示されます。ftpaccess ファイルには、関連付けられた message 文をトリガするイベントが列挙されています。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 次のエントリを ftpaccess ファイルに追加します。


    message message-file [when [class ...]]
    message

    ユーザーがログインしたとき、または作業ディレクトリを変更するコマンドを実行したときに表示されるメッセージファイルの指定に使用するキーワード

    message-file

    表示するメッセージファイルの名前

    when

    login または cwd=dir と設定されるパラメータ。例を参照すること

    class

    class を指定すると、メッセージの表示を特定のクラスのメンバーに限定できる


例 28–10 ユーザーに送信するメッセージの作成


message	/etc/ftpd/Welcome	login   anon guest
message	.message	cwd=*  

この例では、クラス anon または guest のユーザーがログインするときに /etc/ftpd/Welcome ファイルが表示されることを示します。2 行目では、すべてのユーザーに対して現在の作業ディレクトリにある .message ファイルが表示されることを示します。

メッセージファイルは、ゲストユーザーおよび匿名ユーザーの chroot ディレクトリからの相対位置に作成します。


ProcedureREADME オプションの構成方法

ディレクトリに最初に移動したとき、README ファイルを表示することができます。README オプションを構成するには、次のエントリを ftpaccess ファイルに追加します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 次のエントリを ftpaccess ファイルに追加します。


    readme message-file [when [class...]]
    readme

    ユーザーがログインするか、作業ディレクトリを変更するときに確認するメッセージファイルの指定に使用されるキーワード。メッセージファイルが存在する場合、ユーザーはその存在を示す通知と、ファイルの更新日付を受け取る

    message-file

    確認するメッセージファイルの名前

    when

    login または cwd=dir と設定されるパラメータ。例を参照すること

    class

    class を指定すると、メッセージの表示を特定のクラスのメンバーに限定できる


    注 –

    greeting キーワードと banner キーワードを使用して、ユーザーにメッセージを送信することもできます。詳細は、ftpaccess(4) のマニュアルページを参照してください。



例 28–11 README オプションの構成


readme  README*     login
readme  README*     cwd=*  

この例では、ログイン時、またはディレクトリ変更時に、README* に一致するファイルをすべて表示することを示します。この例で使用されている設定に基づいたログイン例を次に示します。


% ftp earth
Connected to earth.
220 earth FTP server ready.
Name (earth:rimmer): ftp
331 Guest login ok, send your complete e-mail address as password.
Password: 
230-
230-Welcome to earth -- local time is Thu Jul 15 16:13:24 
1999.
230-
230-You are number 1 out of a maximum of 10.
230-All transfers are logged.
230-
230-If your FTP client crashes or hangs shortly after login 
please try
230-using a dash (-) as the first character of your 
password.  This will
230-turn off the informational messages that may be 
confusing your FTP
230-client.
230-
230-Please send any comments to ftpadmin@earth.
230-
230 Guest login ok, access restrictions apply.
ftp> cd pub
250-Please read the file README
250-  it was last modified on Thu Jul 15 16:12:25 1999 - 0 
days ago
250 CWD command successful.
ftp> get README /tmp/README
200 PORT command successful.
150 Opening ASCII mode data connection for README (0 
bytes).
226 ASCII Transfer complete.
ftp> quit
221 Goodbye.
 

FTP サーバー上のファイルへのアクセスの制御

ここで説明する FTP サーバーのアクセス制御は、Solaris リリースで使用できる標準のファイルとディレクトリのアクセス制御を補足するものです。Solaris の標準コマンドを使用して、ファイルへのアクセス、ファイルの変更、またはファイルのアップロードが可能なユーザーを制限します。chmod(1)chown(1)chgrp(1) のマニュアルページを参照してください。

Procedureファイルアクセスコマンドの制御方法

ftpaccess ファイル内のアクセス権機能を使用してどの種類のユーザーにどのコマンドの実行を許可するかを指定するには、次の手順を実行します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 次のエントリを ftpaccess ファイルに追加します。


    command yes|no typelist
    
    command

    chmoddeleteoverwriterename、または umask のいずれか

    yes|no

    ユーザーにコマンドの発行を許可または拒否する

    typelist

    anonymousguest、および real のキーワードを任意に組み合わせてコンマで区切って並べたリスト


例 28–12 ファイルアクセスコマンドの制御方法

次に、FTP サーバー上のファイルアクセス機能に対して設定されているアクセス権の例を示します。


chmod no anonymous, guest
delete    no anonymous
overwrite no anonymous
rename    no anonymous
umask     no guest, anonymous

この例では、次のことが示されています。


FTP サーバー上のアップロードとダウンロードの制御

FTP サーバー上のディレクトリのアクセス権を設定することにより、FTP サーバーへのアップロードと FTP サーバーからのダウンロードを制御できます。デフォルトでは、匿名ユーザーはアップロードを実行できません。匿名ユーザーにアップロードを許可する場合は、充分な注意が必要です。

ProcedureFTP サーバーへのアップロードの制御方法

ftpaccess ファイルに指令を追加して、アップロードのアクセス権と、アップロード異常終了時に表示するエラーメッセージを指定します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 次のエントリを ftpaccess ファイルに追加します。

    ユーザーにファイルのアップロードを許可するには、次のエントリを追加します。


    upload [absolute|relative] [class=<classname>]... [-] root-dir \
    dirglob yes|no owner group mode [dirs|nodirs] [<d_mode>]
    
    path-filter typelist mesg allowed-charset {disallowed regexp...}
    
    upload

    ホームディレクトリ (chroot() の引数) として root-dir を持つユーザーに適用するキーワード。root-dir に “*” を指定して、任意のホームディレクトリを一致させることができます。

    absolute|relative

    root-dir ディレクトリパスを、絶対パスとして解釈するか、または現在の chroot ディレクトリからの相対パスとして解釈するかを指定するパラメータ。

    class

    任意個数の class=<classname> 制限の指定に使用するキーワード。制限が指定された場合、upload 節が有効になるのは、現在のユーザーが指定されたクラスのメンバーである場合に限定されます。

    root-dir

    ユーザーのルートディレクトリと匿名ユーザーのホームディレクトリ。

    dirglob

    ディレクトリ名に一致するパターン。アスタリスクを任意の場所に使用することも、単独で使用して任意のディレクトリを表すこともできます。

    yes|no

    FTP サーバーへのアップロードを許可または拒否する変数。

    owner

    dirnames にアップロードされたファイルの所有者。

    group

    dirnames にアップロードされたファイルに関連付けられているグループ。

    mode

    アップロードされたファイルのアクセス権の指定に使用するパラメータ。デフォルトモード 0440 の場合、匿名アカウントのユーザーはアップロードされたファイルを読み取れません。

    dirs|nodirs

    dirnames に列挙されたディレクトリに、ユーザーがサブディレクトリを作成することを許可または拒否するキーワード。

    d_mode

    新しく作成したディレクトリのアクセス権を決定するオプションモード。

    path-filter

    アップロードされたファイルの名前を制御するキーワード。

    typelist

    anonymousguest、および real のキーワードを任意に組み合わせてコンマで区切って並べたリスト。

    mesg

    regexp 条件に一致しない場合に表示されるメッセージファイル。

    allowed-charset {disallowed regexp...}

    ファイル名で使用できる、または使用できない英数字。


例 28–13 FTP サーバーへのアップロードの制御


upload /export/home/ftp /incoming yes ftpadm ftpadmin 0440 nodirs
path-filter anonymous /etc/ftpd/filename.msg ^[-A-Za-z0-9._]*$ ^[.-]

この例では、次のことが示されています。

匿名ユーザーによるアップロードが許可されているディレクトリの所有者とアクセス権は、厳密に制御する必要があります。FTP 管理者は FTP サーバーにアップロードされるすべてのファイルの所有者である必要があります。匿名ユーザーにファイルのアップロードを許可する場合、FTP 管理者を作成する必要があります。ディレクトリの所有者はユーザー ftpadm、グループ ftpadm、アクセス権は 3773 である必要があります。

FTP サーバーにアップロードされるファイルのアクセスモードは 0440 である必要があります。モードを 0440 にすると、匿名アカウントのユーザーはアップロードされたファイルを読み取れません。この制限により、サーバーが第三者によってファイル配布の場所として使用されるのを防ぎます。

アップロードされたファイルを配布可能にするために、FTP 管理者はそれらのファイルを公開ディレクトリに移動することができます。


ProcedureFTP サーバーに対するダウンロードの制御方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 次のエントリを ftpaccess ファイルに追加して、ユーザーがファイルを読み取れないようにします。


    noretrieve [absolute|relative] [class=classname]... [-] filename ...
    
    noretrieve

    特定のファイル (複数可) の読み取りの拒否に使用するキーワード

    absolute|relative

    root-dir ディレクトリパスを、絶対パスとして解釈するか、または現在の chroot ディレクトリからの相対パスとして解釈するかを指定するパラメータ。

    class

    noretrieve 制限を適用するユーザーの class=<classname> の指定に使用するキーワード

    filename

    ユーザーによる読み取りを拒否するファイルの名前


例 28–14 FTP サーバーへのダウンロードの制御


noretrieve /etc/passwd

この例では、すべてのユーザーが /etc/passwd の読み取りを拒否されます。


仮想ホスティング

仮想ホスティングにより、FTP サーバーは同一マシン上の複数ドメインをサポートできます。各仮想ホストには、独立した論理インタフェースと IP アドレスが必要です。

FTP サーバーは、「限定」と「完全」の 2 種類の 仮想ホスティングをサポートします。限定仮想ホスティングでは、すべての仮想ホストが同じ構成ファイルを使用します。完全仮想ホスティングでは、各仮想ホストは個別の構成ファイルを使用できます。


注 –

デフォルトでは、実ユーザーとゲストユーザーは、仮想ホストへのログインを拒否されます。次に示す ftpaccess 指令を設定すると、デフォルトを上書きできます。


To allow access to specific users:
virtual address allow username
To deny access to anonymous users:
virtual address private username

詳細は、ftpaccess(4) のマニュアルページを参照してください。

Procedure限定仮想ホスティングを有効にする方法

限定仮想ホスティングでは、仮想 FTP サーバーの部分的なサポートを提供します。限定仮想ホスティングのサポートを有効にするには、仮想ルートディレクトリを指定します。必要であれば、次に示す仮想ホストのパラメータを ftpaccess ファイルに設定することもできます。

ftpaccess ファイル内のすべての指令は、すべての仮想サーバーによりグローバルに共有されます。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 次のエントリを ftpaccess ファイルに追加します。


    virtual address root|banner|logfile path
    virtual address hostname|email string
    
    virtual

    仮想サーバー機能を有効にするために使用するキーワード

    address

    仮想サーバーの IP アドレス

    root

    仮想サーバーのルートディレクトリ

    banner

    仮想サーバーへの接続が確立したときに表示されるバナーファイル

    logfile

    仮想サーバーに対するファイル転送の記録

    path

    仮想サーバー上のディレクトリとファイルの場所の指定に使用する変数

    email

    メッセージファイルと HELP コマンドで使用される電子メールアドレス

    hostname

    グリーティングメッセージやステータスコマンドで表示されるホスト名

    string

    email パラメータまたは hostname パラメータの指定に使用する変数


    注 –

    hostname を仮想サーバーの address として使用することは可能ですが、それよりも IPv4 アドレスの使用を強く推奨します。hostname に一致するホストを見つけられるようにするには、FTP 接続を受信するときに DNS が使用可能になっている必要があります。IPv6 ホストの場合は、IPv6 アドレスよりもホスト名を使用します。



例 28–15 ftpaccess ファイルによる限定仮想ホスティングの有効化


virtual 10.1.2.3 root    /var/ftp/virtual/ftp-serv
virtual 10.1.2.3 banner  /var/ftp/virtual/ftp-serv/banner.msg
virtual 10.1.2.3 logfile /var/log/ftp/virtual/ftp-serv/xferlog

この例では、仮想 FTP サーバー上の root ディレクトリ、bannerlogfile の場所を設定します。



例 28–16 コマンド行での限定仮想ホスティングの有効化

ftpaddhost(1M) スクリプトを -l オプション付きで使用して、限定仮想ホストを構成できます。

次の例では、ftpaddhost-l -b -x オプションとともに実行して、テストバナーと、仮想ルート /var/ftp/virtual/10.1.2.3 の下にあるログファイル /var/ftp/virtual/10.1.2.3/xferlog を使用する限定仮想ホスティングを構成します。


# ftpaddhost -l -b -x /var/ftp/virtual/10.1.2.3/xferlog \
/var/ftp/virtual/10.1.2.3

Procedure完全仮想ホスティングを有効にする方法

完全仮想ホスティングでは、各仮想ドメインは個別の構成ファイルを使用できます。FTP サーバー上の仮想ホスティングの完全サポートを有効にするには、特定のドメインについて次に示す FTP 構成ファイルを作成または変更します。

詳細は、ftpaccess(4)ftpusers(4)ftpgroups(4)ftphosts(4)ftpconversions(4) のマニュアルページを参照してください。


注 –

構成ファイルの個別のバージョンが見つからない場合は、/etc/ftpd ディレクトリに置かれた構成ファイルのマスターバージョンを使用します。


  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 次のエントリを /etc/ftpd/ftpservers ファイルに追加します。


    address /config-file-dir
    
    address

    仮想サーバーの IP アドレス

    config-file-dir

    仮想ホスト用にカスタマイズされた構成ファイルが置かれるディレクトリ


    注 –

    hostname を仮想サーバーの address として使用することは可能ですが、それよりも IPv4 アドレスの使用を強く推奨します。hostname に一致するホストを見つけられるようにするには、FTP 接続を受信するときに DNS が使用可能になっている必要があります。IPv6 ホストの場合は、IPv6 アドレスよりもホスト名を使用します。


  3. 仮想ホスト用にカスタマイズされた FTP サーバー構成ファイルを作成するには、/etc/ftpd ディレクトリにある構成ファイルのマスターバージョンを /config-file-dir ディレクトリにコピーします。

    詳細は、ftpservers(4) のマニュアルページを参照してください。


例 28–17 ftpservers ファイルによる完全仮想ホスティングの有効化


#
# FTP Server virtual hosting configuration file
#

10.1.2.3 /net/inet/virtual/somedomain/
10.1.2.4 /net/inet/virtual/anotherdomain/

この例では、仮想サーバー上の 2 つの異なるドメインの IP アドレスを指定します。



例 28–18 コマンド行での完全仮想ホスティングの有効化

ftpaddhost(1M) スクリプトを -c オプション付きで使用して、完全仮想ホストを構成できます。

次の例では、ftpaddhost-c -b -x オプションとともに実行して、テストバナーと、仮想ルート /var/ftp/virtual/10.1.2.3 の下にあるログファイル /var/ftp/virtual/10.1.2.3/xferlog を使用する完全仮想ホスティングを構成します。


# ftpaddhost -c -b -x /var/ftp/virtual/10.1.2.3/xferlog \
/var/ftp/virtual/10.1.2.3

FTP サーバーの自動起動

FTP サーバーを起動するには、次の 3 つの方法があります。

スタンドアロンサーバーの応答時間は常に可能なかぎり最短であり、FTP サービス専用の大規模サーバー向けです。スタンドアロンサーバーは一切再起動する必要がないので、専用サーバーに適した短い接続待ち時間を実現します。スタンドアロンサーバーは、混雑していない時間帯も含めて、常に動作しており、永久に接続要求を待ちます。

ProcedureSMF を使用して FTP サーバーを起動する方法

デフォルトでは、SMF サービスは nowait モードで FTP サーバーを起動するように設定されています。サイトで処理する接続が多数になる場合、FTP サーバーをスタンドアロンモードで実行することもできます。その他のコマンド行オプションについては、in.ftpd(1M) のマニュアルページを参照してください。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. FTP サーバーの wait プロパティーを確認します。

    wait=FALSE の行は、サーバーが nowait モードで起動することを示します。


    # inetadm -l network/ftp
    SCOPE    NAME=VALUE
             name="ftp"
             endpoint_type="stream"
             proto="tcp6"
             isrpc=FALSE
             wait=FALSE
             exec="/usr/sbin/in.ftpd -a"
             user="root"
    default  bind_addr=""
    default  bind_fail_max=-1
    default  bind_fail_interval=-1
    default  max_con_rate=-1
    default  max_copies=-1
    default  con_rate_offline=-1
    default  failrate_cnt=40
    default  failrate_interval=60
    default  inherit_env=TRUE
    default  tcp_trace=FALSE
    default  tcp_wrappers=FALSE
  3. FTP サーバーを起動します。


    # svcadm enable network/ftp
    

ProcedureFTP サーバーをバックグラウンドで起動する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. FTP サーバーを無効にします。


    # svcadm disable network/ftp
    
  3. スタンドアロン FTP サーバーを起動します。


    # /usr/sbin/in.ftpd -a -S
    

    この行を FTP サーバーの起動スクリプトに追加します。システムの起動スクリプト作成についての詳細は、『Solaris のシステム管理 (基本編)』「実行制御スクリプトの使用」を参照してください。

ProcedureFTP サーバーをフォアグラウンドで起動する方法

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. FTP サーバーを無効にします。


    # svcadm disable network/ftp
    
  3. サービスを開始するためのエントリを inittab ファイルに追加します。

    次に、/etc/inittab 内の新しいエントリ例を示します。


    ftpd:3:respawn:/usr/sbin/in.ftpd -a -s
    
  4. init を使用し、/etc/inittab をもう一度確認します。

    このコマンドにより、FTP サービスが起動されます。


    # init q
    

FTP サーバーの停止

ftpshut(1M) コマンドは、特定の時刻に FTP サーバーを停止します。

ftpshut を実行する場合、コマンド行オプションでシステム停止時刻を指定するファイルを作成します。この時刻になると、それ以上の新しい接続は受け付けられなくなり、既存の接続は切断されます。この停止時刻の情報に基づいて、サーバーが停止することがユーザーに通知されます。ftpshut により作成されるファイルの場所は、ftpaccess ファイルの shutdown 指令によって指定します。

ProcedureFTP サーバーの停止方法

ftpshut を実行し、ftpaccess ファイルに shutdown 指令を追加するには、次の手順を実行します。

  1. スーパーユーザーになるか、同等の役割を引き受けます。

    役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』「RBAC の構成 (作業マップ)」を参照してください。

  2. 次のエントリを ftpaccess ファイルに追加します。


    shutdown path
    
    shutdown

    FTP サーバーの停止時刻が予定されているかどうかを定期的に検査するファイルへの path の指定に使用するキーワード

    path

    ftpshut コマンドが作成したファイルの場所

  3. ftpshut コマンドを実行します。


    ftpshut [ -V ] [ -l min] [ -d min] time [warning-message...]
    ftpshut

    FTP サーバーが停止することをユーザーに通知する手順を提供するコマンド

    -V

    著作権情報とバージョン情報を表示したあと、接続を切断するように指定するオプション

    -l

    FTP サーバーへの新しい接続を拒否する時間の調整に使用されるフラグ

    -d

    FTP サーバーへの既存の接続を切断する時間の調整に使用されるフラグ

    time

    停止時刻として now を指定すると即時停止する。未来における停止時刻を指定するには、「+number」または「HHMM」のどちらかの形式で指定する

    [warning-message...]

    停止通知メッセージ

  4. ftprestart コマンドを使用して、FTP サーバーを停止後に再起動します。

    詳細は、ftpshut(1M)ftpaccess(4)ftprestart(1M) のマニュアルページを参照してください。

FTP サーバーのデバッグ

ここでは、FTP サーバーに関する問題をデバッグする方法についていくつか説明します。

Proceduresyslogd 内の FTP サーバーのメッセージを検査する方法

FTP サーバーは、/etc/syslog.conf ファイルでデーモンメッセージの出力先として指定された場所に、デバッグに役立つメッセージを書き込みます。FTP サーバーに問題が発生した場合、まずこのファイルで関連するメッセージを検査します。

FTP サーバーメッセージは、機能デーモンにより制御されます。FTP サーバーから /var/adm/message にメッセージを送信し、syslogd にその構成ファイルを再読み取りさせるには、次の手順を実行します。

  1. 次のようなエントリを /etc/syslog.conf ファイルに追加します。


    daemon.info /var/adm/message
  2. syslogd にシグナルを送信して、その構成を再読み取りさせます。


    # svcadm refresh system/system-log
    

    この操作により、FTP サーバーから有益な情報を含むメッセージが /var/adm/messages に書き込まれます。

Proceduregreeting text を使用して ftpaccess を検査する方法

greeting text 機能を使用して、適切な内容の ftpaccess ファイルが使用されていることを検査するには、次の手順を実行します。

  1. 次の指令を ftpaccess ファイルに追加します。


    greeting text message
    
  2. FTP サーバーに接続します。

  3. メッセージが表示されない場合、次の手順を実行します。

    1. ftpaccess ファイルが正しい場所に置かれていることを確認します。strings(1) コマンドを使用して、FTP サーバーバイナリからファイルの場所を取得します。


      # strings /usr/sbin/in.ftpd | grep "^/.*ftpaccess"
    2. 仮想ホスティングが構成されているかどうか ftpservers ファイルを検査します。

      詳細は、ftpaccess(4)ftpservers(4)strings(1)syslog.conf(4)pgrep(1) のマニュアルページを参照してください。

ProcedureFTP ユーザーにより実行されたコマンドの検査

FTP ユーザーがどのコマンドを実行したかを確認するには、ftpaccesslog commands ロギングを使用します。

  1. 次の指令を ftpaccess ファイルに追加し、typelist で指定されたユーザーによるコマンドを個別に記録します。


    log commands typelist
    
  2. /etc/syslog.conf で指定した場所に書き込まれたメッセージを検査します。

多忙なサイトにおける構成についてのヒント

次に、多忙な FTP サイトのパフォーマンスを向上させる上でのヒントをいくつか挙げます。

  1. 常に多数の同時接続をサポートしているサイトでは、FTP サーバーをスタンドアロンモードで稼働させることをお薦めします。「FTP サーバーの自動起動」を参照してください。

  2. vmstat などのシステムユーティリティーを使用し、FTP サーバーのホストに当たるシステムを監視してください。システムで低リソース状態が続く場合は、許可する同時接続数を制限してください (「ユーザーログインの制限を設定する方法」を参照)。システム監視の詳細は、『Solaris のシステム管理 (上級編)』の第 13 章「システムパフォーマンスの監視 (手順)」を参照してください。

  3. 接続制限を行う場合は、ftpaccess ファイル内の limit-time 機能と timeout idle 機能を使用し、ユーザーが接続を独占しないように設定してください。接続制限を行わない場合は、in.ftpd-Q オプションを指定してください。

  4. /var/adm/wtmpx 内の ftp ログイン / ログアウト記録が不要な場合は、in.ftpd-W オプションを指定してください。

  5. FTP サーバーのホストに当たるシステムの負荷を減らすには、ftpaccess ファイル内の recvbuf 機能と sendbuf 機能を使用して転送バッファーサイズを増やしてください。バッファーサイズを大きくした場合は、必要に応じて、ftpaccess ファイル内の timeout data 機能を使用し、データ処理のタイムアウト値を大きくしてください。

  6. FTP サーバーは、さまざまなデータベース (hosts、passwd、group、group、services など) から読み取りを行います。検索速度が遅いと、FTP サーバーのログインで大きな遅延が発生する可能性があります。nsswitch.conffiles ソースが初めに来るように設定すると、検索時間を最短に抑えることができます。詳細は、nsswitch.conf(4) のマニュアルページを参照してください。

  7. デフォルトでは、FTP サーバーはリモートホストの名前を検索します。この検索に時間がかかり、ログインに相当な遅延が発生する可能性があります。この検索は、ftpaccess ファイル内の rhostlookup 機能を使用して抑止できます。しかし、リモートホストの名前検索が行われないと、ftpaccess ファイル内のほかの機能が使用される場合や、ftphosts ファイル内のエントリの照合が行われる場合には IP アドレスの突き合わせしか行われないことに注意してください。リモートホストの IP アドレスはメッセージ内でも使用されるほか、%R マジッククッキーの代用としても使用されます。詳細は、ftpaccess(4) のマニュアルページに挙げられた rhostlookup 機能の説明を参照してください。

  8. FTP サーバーへのログイン時には、割り当て情報の取得も大きな遅延を引き起こす可能性があります。このため、割り当てマジッククッキーを使用する場合は、ftpaccess ファイル内で quota-info 機能だけを使用するようにしてください。割り当てマジッククッキーの一覧は、ftpaccess(4) のマニュアルページを参照してください。