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

パート VI リモートシステムの利用 (トピック)

このパートでは、Solaris 環境で FTP サーバーを管理し、リモートシステムにアクセスする方法について説明します。

第 27 章 リモートシステムの利用 (概要)

この章では、リモートファイルの利用について説明します。

FTP サーバーとは

FTP サーバーは wu-ftpd に基づいています。ワシントン大学 (セントルイス) で開発された wu-ftpd は、インターネット上での大量データの配布に幅広く使用され、大規模な FTP サイトではよく使われる規格です。ライセンス条項については、/var/sadm/pkg/SUNWftpu/install/copyright から利用できるドキュメントを参照してください。

リモートシステムとは

この章では、リモートシステムとは、物理ネットワークによってローカルシステムに接続され、TCP/IP 通信用に構成されたワークステーションまたはサーバーであると想定します。

Solaris リリースのシステム上では、TCP/IP は起動時に自動的に構成されます。詳細については、『Solaris のシステム管理 (IP サービス)』を参照してください。

Solaris 10 リリース FTP サービスの変更点

Solaris 10 リリースでは、FTP サーバーの機能強化、ftpcount ftpwhoftp コマンドの変更など、いくつかの点で FTP サービスの変更が行われています。

FTP サーバーの機能強化により、スケーラビリティーと転送のロギングが向上しました。これらのオプションの説明は、「多忙なサイトにおける構成についてのヒント」と、ftpaccess(4) のマニュアルページに挙げられています。次に、具体的な変更点を示します。

また、このリリースでは ftpcountftpwho-v オプションが追加されました。このオプションは、仮想ホスト ftpaccess ファイルに定義されている FTP サーバークラスのユーザー数とプロセス情報を表示するものです。詳細は、ftpcount(1)ftpwho(1) のマニュアルページを参照してください。

このリリースでは、FTP クライアントとサーバーは Kerberos をサポートするようになりました。詳細は、ftp(4) のマニュアルページと、『Solaris のシステム管理 (セキュリティサービス)』「Kerberos ユーザーコマンド」を参照してください。

ftp コマンドは変更されました。デフォルトでは、Solaris FTP サーバーに接続された Solaris FTP クライアントは、クライアントに対して ls コマンドが発行されるとディレクトリとプレーンファイルの一覧を表示します。FTP サーバーが Solaris OS で稼働していない場合は、ディレクトリは表示されない可能性があります。Solaris 以外の FTP サーバーに接続している場合に Solaris のデフォルト動作が起きるようにするには、Solaris クライアントごとに /etc/default/ftp ファイルを適宜編集します。個々のユーザーについてこの変更を行うには、FTP_LS_SENDS_NLST 環境変数を yes に設定します。詳細は、ftp(4) のマニュアルページを参照してください。

ftpd デーモンは、サービス管理機能によって管理されます。このサービスに関する有効化、無効化、再起動などの管理アクションは svcadm コマンドを使用して実行できます。すべてのデーモンのサービスの状態は、svcs コマンドを使用して照会することができます。サービス管理機能の概要については、『Solaris のシステム管理 (基本編)』の第 18 章「サービスの管理 (概要)」を参照してください。

Solaris 9 の FTP サーバーの新機能

Solaris 9 リリースでは FTP サーバーに大幅な変更が加えられたため、Solaris 10 リリースでも引き続きこの節を残してあります。Solaris 9 の FTP サーバーは、Solaris 8 の FTP ソフトウェアとの互換性を保ちながら、新しい機能を提供してパフォーマンスの向上を図っています。

表 27–1 Solaris 9 の FTP サーバーの新機能

機能 

説明 

参照先 

タイプと場所によるユーザーの分類 

タイプとアドレスに基づいて、ユーザーのクラスを定義できる 

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

クラスごとの制限 

ftpaccess ファイルに設定されている制限に基づいて、同時にログインできる特定クラスのユーザー数を制御する

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

システム全体およびディレクトリ関連のメッセージ 

特定のイベントに対して指定されるメッセージを表示する 

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

ディレクトリごとのアップロード権 

ファイルおよびディレクトリの作成やアクセス権など、FTP サーバーへのアップロードを制御できる 

「FTP サーバーへのアップロードの制御方法」

ファイル名フィルタ 

アップロードしたファイルの名前に使用できる文字とその順序を指定できる 

「FTP サーバーへのアップロードの制御方法」

仮想ホストのサポート 

単一のマシンで複数のドメインをサポートするように FTP サーバーを構成できる 

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

コマンドのログ 

実ユーザー、ゲストユーザー、匿名ユーザーの各 FTP ユーザーが実行したコマンドのログを記録できる 

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

転送処理のログ 

実ユーザー、ゲストユーザー、匿名ユーザーの各 FTP ユーザーが実行した転送処理のログを記録できる 

ftpaccess(4)xferlog(4)in.ftpd(1M) のマニュアルページ

必要時の圧縮とアーカイブ 

必要に応じて、ftpconversions ファイルに指定されている変換方法で圧縮およびアーカイブができる

ftpconversions(4)ftpaccess(4)のマニュアルページ

次に、Solaris 8 よりも後のリリースではサポートされない Solaris 8 の機能を示します。

第 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) のマニュアルページを参照してください。

第 29 章 リモートシステムへのアクセス (手順)

本章では、リモートシステムにログインし、リモートシステムのファイルを操作するために必要なすべての作業について説明します。この章で説明する手順は次のとおりです。

リモートシステムへのアクセス (作業マップ)

この章では、次の表に示すリモートシステムにログインし、ファイルをコピーするための作業について説明します。

表 29–1 作業マップ : リモートシステムへのアクセス

作業 

説明 

参照先 

リモートシステムにログインする (rlogin)

 

  • .rhosts ファイルを削除する

  • rlogin コマンドを使用してリモートシステムにアクセスする

.rhosts ファイルを検索して削除する方法」

「リモートシステムが動作中かどうかを調べる方法」

「リモートシステムにログインしているユーザーを検索する方法」

「リモートシステムにログインする方法 (rlogin)」

「リモートシステムからログアウトする方法 (exit)」

リモートシステムにログインする (ftp)

 

  • ftp 接続のオープンとクローズを行う

  • リモートファイルから、およびリモートシステムに、ファイルをコピーする

ftp によりリモートシステムへ接続する方法」

「リモートシステムとの ftp 接続を終了する方法」

「リモートシステムからファイルをコピーする方法 (ftp)」

「ファイルをリモートシステムにコピーする方法 (ftp)」

rcp を使用してリモートファイルをコピーする

rcp コマンドを使用して、リモートシステムから、およびリモートシステムに、ファイルをコピーする

「ローカルシステムとリモートシステム間でファイルをコピーする方法 (rcp)」

リモートシステムへのログイン (rlogin)

rlogin コマンドを使用すると、リモートシステムにログインできます。ログインした後は、リモートファイルシステム内で移動し、その内容を (リモートシステムによる承認にしたがって) 操作したり、ファイルをコピーしたり、リモートコマンドを実行したりできます。

ログイン先のシステムがリモートドメインに属している場合は、必ずシステム名にドメイン名を追加してください。次の例では、SOLAR はリモートドメイン名です。

rlogin pluto.SOLAR

また、Control-d と入力すると、リモートログイン処理をいつでも中断できます。

リモートログイン (rlogin) の認証

rlogin 処理の認証 (ログインするユーザーの確認処理) は、リモートシステムまたはネットワーク環境で実行されます。

この 2 つの認証形式の主な違いは、要求される対話操作と、認証の確立方法にあります。リモートシステムがユーザーを認証しようとする場合に、/etc/hosts.equiv または .rhosts ファイルを設定していなければ、パスワードの入力を促すプロンプトが表示されます。ネットワークがユーザーを認証しようとする場合は、ユーザーはすでにネットワークに認識されているので、パスワードプロンプトは表示されません。

リモートシステムがユーザーを認証しようとする場合は、特に次のいずれかに該当する場合は、リモートシステム上のローカルファイル内の情報を使用した認証が行われます。

ネットワークによる認証は、次のどちらかの場合に利用されます。


注 –

通常は、ネットワークによる認証がシステムによる認証より優先されます。


/etc/hosts.equiv ファイル

/etc/hosts.equiv ファイルには、リモートシステムの「信頼されるホスト」が 1 行に 1 つずつ入っています。ユーザーがこのファイルに含まれるホストから (rlogin を使用して) リモートログインしようとする場合、リモートシステムがそのユーザーのパスワードエントリにアクセスできれば、ユーザーはパスワードを入力しなくてもログインできます。

典型的な hosts.equiv ファイルの構造は次のとおりです。


host1
host2 user_a
+@group1
-@group2

上記の host1 のエントリのように、hosts.equiv にホストに対して 1 つのエントリが記述されていれば、そのホストは信頼されているため、そのマシン上のユーザーも信頼できることを意味します。

この例の第 2 のエントリのようにユーザー名も含まれていると、その指定されたユーザーがアクセスしようとする場合にのみ、そのホストが信頼されます。

グループ名の先頭にプラス記号 (+) が付いている場合は、そのネットグループ内のすべてのマシンが信頼されていることを意味します。

グループ名の先頭にマイナス記号 (–) が付いている場合は、そのネットグループ内には信頼できるマシンがないことを意味します。

/etc/hosts.equiv ファイルを使用する場合のセキュリティーの問題

/etc/hosts.equiv ファイルにはセキュリティー上の問題があります。/etc/hosts.equiv ファイルをシステム上で管理する場合は、ネットワーク内で信頼されるホストのみを含めるようにしてください。別のネットワークに所属するホストまたは公共領域にあるマシンを追加しないでください。たとえば、端末室に置かれているホストは追加しないでください。

信頼できないホストを使用すると、重大なセキュリティー上の問題が発生する可能性があります。/etc/hosts.equiv ファイルを正しく構成されたファイルと置き換えるか、ファイルを削除してください。

/etc/hosts.equiv ファイルに + のみの 1 行しか入っていない場合は、認識されているすべてのホストが信頼されることを示します。

.rhosts ファイル

.rhosts ファイルは、/etc/hosts.equiv ファイルに対応するユーザー用のファイルです。このファイルには、通常、ホストとユーザーの組み合わせのリストが入っています。このファイルにホストとユーザーの組み合わせが含まれている場合、そのユーザーには、パスワードを入力しなくても、そのホストからリモートログインする許可が与えられます。

.rhosts ファイルはユーザーのホームディレクトリの一番上のレベルに置かれていなければなりません。サブディレクトリに置かれている .rhosts ファイルは参照されません。

ユーザーは、各自のホームディレクトリ内で .rhosts ファイルを作成できます。.rhosts ファイルを使用することによって、/etc/hosts.equiv ファイルを使用しなくても、異なるシステムのユーザー自身のアカウント間で信頼できるアクセスを行うことができます。

.rhosts ファイルを使用する場合のセキュリティーの問題

.rhosts ファイルにはセキュリティー上、重大な問題があります。/etc/hosts.equiv ファイルはシステム管理者の制御下にあり、効率よく管理できますが、だれでも .rhosts ファイルを作成して、システム管理者が知らないうちに自分が選んだユーザーにアクセス権を与えることができます。

すべてのユーザーのホームディレクトリが 1 台のサーバー上にあって、特定のユーザーだけがそのサーバーに対してスーパーユーザーのアクセス権を持っている場合、ユーザーが .rhosts ファイルを使用できないようにするためには、スーパーユーザーとして、空の .rhosts ファイルを各ユーザーのホームディレクトリに作成します。次に、このファイルのアクセス権を 000 に変更します。こうしておけば、スーパーユーザーでも、そのファイルを変更することが難しくなります。これにより、ユーザーが .rhosts を無責任に使用することによって生じるセキュリティー問題を防ぐことができます。ただし、ユーザーが自分のホームディレクトリへの実効パスを変更できる場合、この方法は何の解決にもなりません。

.rhosts ファイルを確実に管理する唯一の方法は、それを完全に使用できないようにすることです。詳細は、.rhosts ファイルを検索して削除する方法」を参照してください。システム管理者は、システムを頻繁にチェックして、このポリシーに対する違反を調べることができます。このポリシーに対する例外は、root アカウントです。ネットワークのバックアップや他のリモートサービスを実行するには、.rhosts ファイルが必要な場合があります。

リモートログインのリンク

システムが正しく構成されていれば、リモートログインをリンクできます。たとえば、earth 上のユーザーが jupiter にログインし、そこから pluto にログインします。

このユーザーは jupiter からログアウトして pluto に直接ログインすることもできますが、このリンク方法の方が便利です。

パスワードを入力せずにリモートログインをリンクするには、/etc/hosts.equiv または .rhosts ファイルを正しく設定しておく必要があります。

直接リモートログインと間接リモートログイン

rlogin コマンドにより、リモートシステムに直接的または間接的にログインできます。

直接リモートログインは、デフォルトユーザー名、すなわち現在ローカルシステムにログインしている個人のユーザー名を使用します。これは、最も一般的なリモートログイン形式です。

間接リモートログインは、リモートログイン処理中に別のユーザー名を入力することによって行います。これは、一時的に借りているワークステーションから行うタイプのリモートログインです。たとえば、ユーザーが同僚のオフィスにいるときに自分のホームディレクトリに置かれているファイルを確認する必要がある場合、同僚のシステムからリモートで自分のシステムにログインすることができます。この場合、自分のユーザー名を入力して間接リモートログインを実行することになります。

次の表は、直接ログインや間接ログインと認証方式の依存関係を示しています。

表 29–2 ログイン方式と認証方式 (rlogin) の依存関係

ログイン方式 

ユーザー名の提供 

認証 

パスワード 

直接 

システム 

ネットワーク 

なし 

 

 

システム 

必要 

間接 

ユーザー 

ネットワーク 

なし 

 

 

システム 

必要  

リモートログイン後の処理

リモートシステムにログインするときに、rlogin コマンドはホームディレクトリを見つけようとします。ホームディレクトリが見つからなければ、リモートシステムのルートディレクトリ (/) が割り当てられます。次に例を示します。


Unable to find home directory, logging in with / 

ただし、rlogin コマンドがホームディレクトリを見つけると、.cshrc ファイルと .login ファイルを生成します。したがって、リモートログイン後は、プロンプトが標準ログインプロンプトになり、現在のディレクトリはローカルにログインするときと同じになります。

たとえば、通常のプロンプトにシステム名と作業用ディレクトリが表示される場合と、ログイン時の作業用ディレクトリがホームディレクトリの場合、ログインプロンプトは次のようになります。


earth(/home/smith):

リモートシステムにログインすると、同じようなプロンプトが表示され、rlogin コマンドをどのディレクトリから入力したかに関係なく、作業用ディレクトリがホームディレクトリになります。


earth(/home/smith): rlogin pluto
.
.
.
pluto(/home/smith):

唯一の違いは、プロンプトの先頭にローカルシステムではなくリモートシステムの名前が表示されることです。リモートファイルシステムは、ホームディレクトリと並んで存在します。

/home ディレクトリに移動して ls を実行すると、次のように表示されます。


earth(home/smith): cd ..
earth(/home): ls
smith  jones

Procedure.rhosts ファイルを検索して削除する方法

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

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

  2. find(1) コマンドを使用し、.rhosts ファイルを検索して削除します。


    # find home-directories -name .rhosts -print -exec rm {} \;
    
    home-directories

    ユーザーのホームディレクトリがあるディレクトリへのパス。複数のパスを指定すると、複数のホームディレクトリを一度に検索できる

    -name .rhosts

    ここでは .rhosts を指定する

    -print

    現在のパス名を出力する

    -exec rm {} \;

    指定したファイル名に一致するファイルすべてに、rm コマンドを適用するように find コマンドに伝える

    find コマンドは、指定したディレクトリから始めて .rhosts というファイルを検索します。ファイルが見つかると、find はファイルのパスを画面上に表示し、ファイルを削除します。


例 29–1 .rhosts ファイルを検索して削除する

次の例では、/export/home ディレクトリ内で、すべてのユーザーのホームディレクトリ内の .rhosts ファイルを検索し削除します。


# find /export/home -name .rhosts -print | xargs -i -t rm {} \;

リモートシステムが動作中かどうかを調べる方法

ping コマンドを使用して、リモートシステムが動作中かどうかを調べます。


$ ping system-name | ip-address
system-name

リモートシステム名

ip-address

リモートシステムの IP アドレス

ping コマンドは、次の 3 つのメッセージのどれかを返します。

状態メッセージ 

意味 

system-name is alive

このシステムにはネットワーク経由でアクセスできる 

ping: unktawn host system-name

未知のシステム名 

ping: no answer from system-name

システムは認識されるが、現在は動作していない  

ping を実行した対象のシステムが別のドメイン内にある場合は、出力メッセージにルーティング情報も含まれることがありますが、これは無視してかまいません。

ping コマンドのタイムアウトは 20 秒です。つまり、20 秒以内に応答がなければ、第 3 のメッセージを返します。time-out 値を秒単位で入力すると、ping の待ち時間を増減させることができます。


$ ping system-name | ip-address time-out

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

リモートシステムにログインしているユーザーを検索する方法

rusers(1) コマンドを使用して、リモートシステムにログインしているユーザーを検索します。


$ rusers [-l] remote-system-name
rusers

(オプションなし) システム名と、root など現在ログインしているユーザー名を表示する

-l

各ユーザーの詳細な情報を表示する。 ユーザーのログインウィンドウ、ログイン日時、ログインしている時間、ユーザーのログイン元のリモートシステム名など


例 29–2 リモートシステムにログインしているユーザーを検索する

次の例は、rusers の短い形式の出力を示しています。


$ rusers pluto
pluto    smith  jones

次の例では、rusers の長い形式の出力は、2 人のユーザーがリモートシステム starbug にログインしていることを示します。第 1 のユーザーは 9 月 10 日にシステムコンソールからログインし、ログイン時間は 137 時間 15 分でした。第 2 のユーザーはリモートシステム mars から 9 月 14 日にログインしました。


$rusers -l starbug
root         starbug:console           Sep 10 16:13  137:15
rimmer       starbug:pts/0             Sep 14 14:37         (mars)

リモートシステムにログインする方法 (rlogin)

rlogin(1) コマンドを使用してリモートシステムにログインします。


$ rlogin [-l user-name] system-name
rlogin

(オプションなし) 現在のユーザー名を使用して、リモートシステムに直接ログインする

-l user-name

ユーザー名を入力して、リモートシステムに間接的にログインする

ネットワークがユーザーを認証しようとする場合には、パスワードを求めるプロンプトは表示されません。リモートシステムがユーザーを認証しようとする場合は、パスワードの入力を求めるプロンプトが表示されます。

処理が成功すると、rlogin コマンドは、そのシステムへの前回のリモートログイン、リモートシステム上で動作中のオペレーティングシステムのバージョン、ホームディレクトリに未処理のメールがあるかどうかに関して、簡潔な情報を表示します。


例 29–3 リモートシステムにログインする (rlogin)

次の例は、pluto へ直接リモートログインした出力結果を示しています。このユーザーはネットワークから認証されています。


$ rlogin starbug
Last login: Mon Jul 12 09:28:39 from venus
Sun Microsystems Inc.   SunOS 5.8       February 2000
starbug:

次の例は、pluto へ間接リモートログインした出力結果を示しています。この場合、ユーザーはリモートシステムから認証されています。


$ rlogin -l smith pluto
password: user-password
Last login: Mon Jul 12 11:51:58 from venus
Sun Microsystems Inc.   SunOS 5.8       February 2000
starbug: 

リモートシステムからログアウトする方法 (exit)

exit(1) コマンドを使用して、リモートシステムからログアウトします。


$ exit
 

例 29–4 リモートシステムからログアウトする (exit)

次の例は、ユーザー smith がシステム pluto からログアウトする様子を示しています。


$ exit
pluto% logout
Connection closed.
earth% 

リモートシステムへのログイン (ftp)

ftp コマンドは、インターネットのファイルトランスポートプロトコルへのユーザーインタフェースを提供します。このユーザーインタフェースはコマンドインタプリタと呼ばれ、リモートシステムにログインし、そのファイルシステムについて様々な処理を実行できるようにします。基本操作については次の表を参照してください。

rlogin および rcp と比較した場合に ftp が優れている最大のポイントは、ftp はリモートシステムでの UNIX の実行を要求しないことです。ただし、リモートシステムを TCP/IP 通信ができるように構成する必要はあります。逆に、rlogin の優れている点は、ftp よりも豊富なファイル操作コマンドを使用できることです。

リモートログインの認証 (ftp)

ftp によるリモートログインの認証は、次のいずれかの方法により確立できます。

重要な ftp コマンド

表 29–3 重要な ftp コマンド

コマンド 

説明 

ftp

ftp コマンドインタプリタにアクセスする

ftpremote-system

リモートシステムへの ftp 接続を確立する。詳細は、ftp によりリモートシステムへ接続する方法」を参照

open

コマンドインタプリタからリモートシステムにログインする 

close

リモートシステムからログアウトしてコマンドインタプリタに戻る 

bye

ftp コマンドインタプリタを終了する

help

すべての ftp コマンドを表示するか、コマンド名が指定されている場合は、コマンドの機能に関する簡単な説明を表示する

reset

リモートの ftp サーバーとコマンド応答シーケンスの同期をとり直す

ls

リモートの作業用ディレクトリの内容を表示する 

pwd

リモートの作業用ディレクトリ名を表示する 

cd

リモートの作業用ディレクトリを変更する 

lcd

ローカルの作業用ディレクトリを変更する 

mkdir

リモートシステム上でディレクトリを作成する 

rmdir

リモートシステム上でディレクトリを削除する 

get、mget

リモートの作業用ディレクトリからローカルの作業用ディレクトリに 1 つ以上のファイルをコピーする 

put、mput

ローカルの作業用ディレクトリからリモートの作業用ディレクトリに 1 つ以上のファイルをコピーする 

delete、mdelete

リモートの作業用ディレクトリから 1 つ以上のファイルを削除する 

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

Procedureftp によりリモートシステムへ接続する方法

  1. ftp 認証を持っていることを確認します。

    「リモートログインの認証 (ftp)」で説明しているように、ftp 認証を持っている必要があります。

  2. ftp コマンドを使用してリモートシステムへ接続します。


    $ ftp remote-system
    

    接続に成功すると、確認メッセージとプロンプトが表示されます。

  3. ユーザー名を入力します。


    Name (remote-system:user-name): user-name
    
  4. プロンプトが表示されたら、パスワードを入力します。


    331 Password required for user-name:
    Password: password
    

    アクセス中のシステムで匿名 ftp アカウントが設定されている場合は、パスワードとして電子メールアドレスの入力を求めるプロンプトが表示されます。ftp インタフェースがパスワードを受け付けると、確認メッセージと (ftp>) プロンプトを表示します。

    これで、help など、ftp インタフェースから提供されるどのコマンドでも使用できます。主なコマンドについては、表 29–3 を参照してください。


例 29–5 ftp によりリモートシステムへ接続する

次の ftp セッションは、リモートシステム pluto 上でユーザー smith によって確立されました。


$ ftp pluto
Connected to pluto.
220 pluto FTP server ready.
Name (pluto:smith): smith
331 Password required for smith:
Password: password
230 User smith logged in.
ftp>

リモートシステムとの ftp 接続を終了する方法

bye コマンドを使用して、リモートシステムとの ftp 接続を終了します。


ftp> bye
221-You have  transferred 0 bytes in 0 files.
221-Total traffic for this sessions was 172 bytes in 0 transfers.
221-Thanks you for using the FTP service on spdev.
221 Goodbye.

接続を終了するメッセージに続いて、通常のシェルプロンプトが表示されます。

Procedureリモートシステムからファイルをコピーする方法 (ftp)

  1. リモートシステムからファイルをコピーする、ローカルシステム上のディレクトリに変更します。


    $ cd target-directory
    
  2. ftp により接続します。

    ftp によりリモートシステムへ接続する方法」を参照してください。

  3. コピー元ディレクトリに変更します。


    ftp> cd source-directory
    

    システムがオートマウンタを使用している場合、リモートシステムのユーザーのホームディレクトリは、/home の下にユーザーのホームディレクトリと並行して表示されます。

  4. コピー元ファイルの読み取り権があることを確認します。


    ftp> ls -l
    
  5. 転送タイプを binary に設定します。


    ftp> binary
    
  6. ファイルを 1 つコピーするには、get コマンドを使用します。


    ftp> get filename 
    
  7. 一度に複数のファイルをコピーするには、mget コマンドを使用します。


    ftp> mget filename [filename ...]

    個々のファイル名を続けて入力するか、ワイルドカード文字を使用できます。mget コマンドでは、個々のファイルがコピーされ、そのたびに確認を求めるプロンプトが表示されます。

  8. ftp による接続を終了します。


    ftp> bye
    

例 29–6 リモートシステムからファイルをコピーする (ftp)

次の例では、ユーザー kryten は、システム plutoftp 接続し、get コマンドを使用して /tmp ディレクトリから自分のホームディレクトリにファイルを 1 つコピーします。


$ cd $HOME
ftp pluto
Connected to pluto.
220 pluto FTP server (SunOS 5.8) ready.
Name (pluto:kryten): kryten
331 Password required for kryten.
Password: xxx
230 User kryten logged in.
ftp> cd /tmp
250 CWD command successful.
ftp> ls
200 PORT command successful.
150 ASCII data connection for /bin/ls (129.152.221.238,34344) 
(0 bytes).
dtdbcache_:0
filea
files
ps_data
speckeysd.lock
226 ASCII Transfer complete.
53 bytes received in 0.022 seconds (2.39 Kbytes/s)
ftp> get filea
200 PORT command successful.
150 ASCII data connection for filea (129.152.221.238,34331) 
(0 bytes).
221 Goodbye.

次の例では、同じユーザー krytenmget コマンドを使用して、/tmp ディレクトリから自分のホームディレクトリに複数のファイルをコピーします。kryten は、個々のファイルについてコピーするか、しないかの選択ができることに注意してください。


$ ftp> cd /tmp
250 CWD command successful.
ftp> ls files
200 PORT command successful.
150 ASCII data connection for /bin/ls (129.152.221.238,34345) 
(0 bytes).
fileb
filec
filed
remote: files
21 bytes received in 0.015 seconds (1.36 Kbytes/s)
ftp> cd files
250 CWD command successful.
ftp> mget file*
mget fileb? y
200 PORT command successful.
150 ASCII data connection for fileb (129.152.221.238,34347) 
(0 bytes).
226 ASCII Transfer complete.
mget filec? y
200 PORT command successful.
150 ASCII data connection for filec (129.152.221.238,34348) 
(0 bytes).
226 ASCII Transfer complete.
mget filed? y
200 PORT command successful.
150 ASCII data connection for filed (129.152.221.238,34351) 
(0 bytes).
226 ASCII Transfer complete.200 PORT command successful.
ftp> bye
221 Goodbye.

Procedureファイルをリモートシステムにコピーする方法 (ftp)

  1. ローカルシステム上のコピー元ディレクトリに変更します。

    ftp コマンドを入力して接続するディレクトリは、ローカルの作業用ディレクトリ、つまりこの操作のコピー元ディレクトリになります。

  2. ftp により接続します。

    ftp によりリモートシステムへ接続する方法」を参照してください。

  3. コピー先ディレクトリに変更します。


    ftp> cd target-directory
    

    ローカルシステムでオートマウンタを使用中であれば、/home の下に自分のホームディレクトリと並行してリモートシステムのユーザーのホームディレクトリが表示されるので注意してください。

  4. コピー先ディレクトリへの書き込み権があることを確認します。


    ftp> ls -l target-directory
    
  5. 転送タイプを binary に設定します。


    ftp> binary
    
  6. ファイルを 1 つコピーするには、put コマンドを使用します。


    ftp> put filename
    
  7. 一度に複数のファイルをコピーするには、mput コマンドを使用します。


    ftp> mput filename [filename ...]

    個々のファイル名を続けて入力するか、ワイルドカード文字を使用できます。mput コマンドでは、個々のファイルがコピーされ、そのたびに確認を求めるプロンプトが表示されます。

  8. ftp による接続を終了するには、bye と入力します。


    ftp> bye
    

例 29–7 ファイルをリモートシステムにコピーする (ftp)

次の例では、ユーザー kryten はシステム plutoftp により接続し、put コマンドを使用して自分のシステムからシステム pluto/tmp ディレクトリにファイルをコピーします。


$ cd /tmp
ftp pluto
Connected to pluto.
220 pluto FTP server (SunOS 5.8) ready.
Name (pluto:kryten): kryten
331 Password required for kryten.
Password: xxx
230 User kryten logged in.
ftp> cd /tmp
250 CWD command successful.
ftp> put filef
200 PORT command successful.
150 ASCII data connection for filef (129.152.221.238,34356).
226 Transfer complete.
ftp> ls
200 PORT command successful.
150 ASCII data connection for /bin/ls (129.152.221.238,34357) (0 bytes).
dtdbcache_:0
filea
filef
files
ps_data
speckeysd.lock
226 ASCII Transfer complete.
60 bytes received in 0.058 seconds (1.01 Kbytes/s)
ftp> bye
221 Goodbye.

次の例では、同じユーザー krytenmput コマンドを使用して自分のホームディレクトリから pluto/tmp ディレクトリに複数のファイルをコピーします。kryten は、個々のファイルについてコピーするか、しないかの選択ができることに注意してください。


$ cd $HOME/testdir
$ ls
test1   test2   test3
$ ftp pluto
Connected to pluto.
220 pluto FTP server (SunOS 5.8) ready.
Name (pluto:kryten): kryten
331 Password required for kryten.
Password: xxx
230 User kryten logged in.
ftp> cd /tmp
250 CWD command successful.
ftp> mput test*
mput test1? y
200 PORT command successful.
150 ASCII data connection for test1 (129.152.221.238,34365).
226 Transfer complete.
mput test2? y
200 PORT command successful.
150 ASCII data connection for test2 (129.152.221.238,34366).
226 Transfer complete.
mput test3? y
200 PORT command successful.
150 ASCII data connection for filef (129.152.221.238,34356).
226 Transfer complete.
ftp> bye
221 Goodbye.

rcp によるリモートコピー

rcp コマンドは、ローカルシステムとリモートシステム間、または 2 台のリモートシステム間でファイルやディレクトリをコピーします。このコマンドは、リモートシステムから (rlogin コマンドでログイン後に)、またはローカルシステムから (リモートシステムにログインせずに) 使用できます。

rcp を使用すると、次のリモートコピー操作を実行できます。

オートマウンタを実行中の場合は、これらのリモート操作を cp コマンドで実行できます。ただし、cp の範囲は、オートマウンタにより作成された仮想ファイルシステムと、ユーザーのホームディレクトリから相対的に指定できる操作に制限されます。rcp はそのような制限を受けずに同じ操作を実行するので、ここでは rcp を使用する場合に限定して説明します。

コピー操作のセキュリティー上の注意事項

システム間でファイルやディレクトリをコピーするには、ログインしてファイルをコピーする許可を持っていなければなりません。


注意 – 注意 –

cp コマンドと rcp コマンドではともに、警告が表示されずにファイルが上書きされることがあります。コマンドを実行する前に、ファイル名が正しいかどうかを確認してください。


コピー元とコピー先の指定

C シェル内で rcp コマンドを使用すると、絶対パス名または相対パス名を使用して、コピー元 (コピーするファイルやディレクトリ) とコピー先 (ファイルやディレクトリをコピーする場所) を指定できます。

 

絶対パス名 

相対パス名 

ローカルシステムから 

mars:/home/jones/myfile.txt

~jones/myfile.txt

リモートログイン後 

/home/jones/myfile.txt

~jones/myfile.txt

絶対パス名は、特定のシステムにマウントされているファイルやディレクトリを表します。上記の例で、第 1 の絶対パス名は mars システム上のファイル (myfile.txt) を表します。相対パス名は、ファイルやディレクトリがある位置を、ユーザーのホームディレクトリからの相対パスで表します。上記の例で、相対パス名は絶対パスと同じ myfile.txt を表しますが、jones のホームディレクトリを示すために「~」(チルド記号) を使用しています。

~ = mars:/home/jones

上記の 2 行目の例は、リモートログイン後の絶対パス名と相対パス名を示しています。相対パス名では明確な違いは見られません。しかし、リモートログイン操作により、jones のホームディレクトリがローカルシステム上にマウントされた (ローカルユーザーのホームディレクトリと並列に存在する) ので、絶対パス名ではシステム名 mars を指定する必要はありません。リモートログイン操作によって別のユーザーのホームディレクトリがどのようにマウントされるかについては、「リモートログイン後の処理」を参照してください。

次の表に、C シェルが認識する絶対パス名と相対パス名の例を示します。このサンプルでは、次の用語を使用します。

表 29–4 ディレクトリ名とファイル名に使用できる構文

ログイン先 

構文 

説明 

ローカルシステム  

.

ローカルの作業用ディレクトリ 

 

path/filename

ローカルの作業用ディレクトリ内の pathfilename

 

~

現在のユーザーのホームディレクトリ 

 

~/path/filename

現在のユーザーのホームディレクトリの下の pathfilename

 

~user

user のホームディレクトリ

 

~user/path/filename

user のホームディレクトリの下の pathfilename

 

remote-system:path/filename

リモートの作業用ディレクトリ内の pathfilename

リモートシステム 

.

リモートの作業用ディレクトリ 

 

filename

リモートの作業用ディレクトリ内の filename

 

path/filename

リモートの作業用ディレクトリ内の pathfilename

 

~

現在のユーザーのホームディレクトリ 

 

~/path/filename

現在のユーザーのホームディレクトリ内の pathfilename

 

~user

user のホームディレクトリ

 

~/user/path/filename

user のホームディレクトリの下の pathfilename

 

local-system:path/filename

ローカルの作業用ディレクトリ内の pathfilename

Procedureローカルシステムとリモートシステム間でファイルをコピーする方法 (rcp)

  1. コピーする許可を持っているかどうかを確認します。

    少なくとも、コピー元システム上で読み取り権を持ち、コピー先システム上で書き込み権を持っているべきです。

  2. コピー元とコピー先の場所を決定します。

    コピー元またはコピー先のパスがわからない場合は、まず rlogin コマンドを使用してリモートシステムにログインします (「リモートシステムにログインする方法 (rlogin)」を参照)。次に、そのパスが見つかるまでリモートシステム上を移動します。その後は、ログアウトしなくても次の手順を実行できます。

  3. ファイルまたはディレクトリをコピーします。


    $ rcp [-r] source-file|directory   target-file|directory
    
    rcp

    (オプションなし) コピー元からコピー先にファイルを 1 つコピーする

    -r

    コピー元からコピー先にディレクトリをコピーする

    この構文は、リモートシステムとローカルシステムのどちらにログインするかに関係なく適用されます。表 29–4 で説明したとおり、ファイルやディレクトリのパス名のみをこのあとで示す例のように変更します。

    ~」と「.」を使用すると、ローカルのファイル名やディレクトリ名のパス部分を指定できます。ただし、「~」はリモートシステムではなく現在のユーザーに適用されることと、「.」はログイン先のシステムに適用されることに注意してください。この 2 つの記号については、表 29–4 を参照してください。


例 29–8 rcp を使用してリモートファイルをローカルシステムにコピーする

次の例では、rcp はファイル letter.doc をリモートシステム pluto/home/jones ディレクトリから、ローカルシステム earth 上の作業用ディレクトリ (/home/smith) にコピーします。


earth(/home/smith): rcp pluto:/home/jones/letter.doc .

この例では、リモートログインをしないで rcp 操作を実行しています。コマンド行の最後にある「.」記号は、リモートシステムではなく、ローカルシステムを表します。

コピー先ディレクトリもローカルユーザーのホームディレクトリなので、「~」記号で指定することもできます。



例 29–9 rloginrcp を使用してリモートファイルをローカルシステムにコピーする

次の例では、rlogin コマンドの実行後に rcp 操作が実行され、リモートシステムからローカルシステムにファイルをコピーしています。操作の流れは前述の例と同じですが、リモートログインによりパスが変更になります。


earth(/home/smith): rlogin pluto
.
.
.
pluto(/home/jones): rcp letter.doc ~

コマンド行の最後に「.」記号を使用するのは、この例では不適切です。リモートログインが行われているので、「.」記号はリモートシステムを指し、実際には rcp に重複したファイルを作成させることになります。ただし、「~」は、リモートシステムにログインするときにも現在のユーザーのホームディレクトリを指します。



例 29–10 rcp を使用してローカルファイルをリモートシステムにコピーする

次の例で、rcp はファイル notice.doc をローカルシステム earth のホームディレクトリ (/home/smith) からリモートシステム pluto/home/jones ディレクトリにコピーします。


earth(/home/smith): rcp notice.doc pluto:/home/jones

リモートファイル名が指定されていないので、ファイル notice.doc/home/jones ディレクトリに同じ名前でコピーされます。

次の例では、前の例と同じように rcp 操作が行われますが、rcp はローカルシステム上の別の作業用ディレクトリ (/tmp) で入力されます。現在のユーザーのホームディレクトリを指すために「~」記号が使われているので注意してください。


earth(/tmp): rcp ~/notice.doc pluto:/home/jones


例 29–11 rloginrcp を使用してローカルファイルをリモートシステムにコピーする

次の例では、rlogin コマンドの実行後に rcp 操作が実行され、ローカルファイルをリモートディレクトリにコピーしています。操作の流れは前に示した例と同じですが、リモートログインによりパスが変更になります。


earth(/home/smith): rlogin pluto
.
.
.
pluto(/home/jones): rcp ~/notice.doc .

現在のユーザーのホームディレクトリはローカルシステム上にありますが、「~」記号によりそのディレクトリが表されます。ユーザーはリモートシステムにログインしているので、「.」記号はリモートシステム上の作業用ディレクトリを表します。次の構文を使用しても同じ操作を実行します。


pluto(/home/jones): rcp earth:/home/smith/notice.doc /home/jones