次の各章で、Solaris 環境で FTP サーバーを管理し、リモートシステムにアクセスする方法について説明します。次の章が含まれます。
FTP サーバーを管理する詳細手順
リモートファイルにアクセスする詳細手順
ここでは、リモートファイルの利用について説明します。
FTP サーバーは wu-ftpd に基づいています。 ワシントン大学 (セントルイス) で開発された wu-ftpd は、インターネット上での大量データの配布に幅広く使用され、大規模な FTP サイトではよく使われる規格です。ライセンス条項については、/var/sadm/pkg/SUNWftpu/install/copyright から利用できるドキュメントを参照してください。
この章では、リモートシステムとは、物理ネットワークによってローカルシステムに接続され、TCP/IP 通信用に構成されたワークステーションまたはサーバーであると想定します。
Solaris 9 リリースのシステム上では、TCP/IP は起動時に自動的に構成されます。詳細については、『Solaris のシステム管理 (IP サービス)』を参照してください。
Solaris 9 の FTP サーバーは、Solaris 8 の FTP ソフトウェアとの互換性を保ちながら、新しい機能を提供してパフォーマンスの向上を図っています。
表 37–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 9 リリースでは、Solaris 8 の /etc/default/ftpd はサポートされていません。 Solaris 8 から Solaris 9 へのアップグレード中に、BANNER および UMASK の各エントリは、wu-ftpd 用の対応するエントリに変換されます。 ただし、いくつかの BANNER 行は、ftpaccess のメッセージ機能に合わせて手作業で変換する必要があります。 詳細は、ftpaccess(4) のマニュアルページを参照してください。
Solaris 8 の FTP サーバーで提供されていたサブログイン機能は、Solaris 9 の FTP サーバーではサポートされていません。
この章では、次の表に示す FTP サーバーを設定し、管理するための作業について説明します。
表 38–1 FTP サーバーの管理 (作業マップ)
作業 |
説明 |
参照先 |
---|---|---|
FTP サーバーへのアクセスの構成 |
/etc/ftpd ディレクトリに置かれた ftpaccess、ftpusers、ftphosts の各ファイルを使用して、FTP サーバーへのアクセスを確立または制限する | |
FTP サーバーのログインの設定 |
実ユーザー、ゲストユーザー、匿名ユーザーのログインアカウントを設定する | |
メッセージファイルをカスタマイズする |
/etc/ftpd/ftpaccess ファイルを編集して、特定のイベントに関連して FTP サーバーが FTP クライアントにメッセージを返すように構成する | |
FTP サーバー上のファイルへのアクセスを構成する |
/etc/ftpd/ftpaccess ファイルを使用して、特定のコマンドの実行、FTP サーバーからのファイルのダウンロード、FTP サーバーへのファイルのアップロードを許可するユーザーのクラスを指定する | |
限定された仮想ホスティングまたは完全な仮想ホスティングを有効化する |
/etc/ftpd/ftpaccess ファイルを使用して、FTP サーバーが同一マシン上の複数ドメインをサポートするように構成する | |
FTP サーバーを起動する |
nowait モードまたはスタンドアロンモードで FTP サーバーを起動するように、/etc/inet/inetd.conf ファイルを編集する | |
FTP サーバーを停止する |
/etc/ftpd/ftpaccess ファイルを使用し、ftpshut を実行して FTP サーバーを停止する | |
一般的な FTP サーバーの問題を障害追跡する | syslogd を検査し、greeting text と log commands を使用して FTP サーバー上の問題をデバッグする |
syslogd 内の FTP サーバーのメッセージを検査する方法 |
/etc/ftpd ディレクトリに置かれた構成ファイルを使用して FTP サーバーへのアクセスを制御します。次に構成ファイルを示します。
ftpusers には、FTP サーバーへのアクセスを拒否するユーザーが列挙されています。
ftphosts は、複数のホストから FTP サーバー上の複数のアカウントへのログインを許可または拒否するために使用します。
ftpaccess は、メインの FTP 構成ファイルです。-a オプション付きで呼び出された場合、FTP サーバーは /etc/ftpd/ftpaccess ファイルだけを読み取ります。ftpaccess を使用する場合、すべてのユーザーは FTP サーバーへのアクセスを許可されたクラスのメンバーである必要があります。特定のクラスにのみ適用される ftpaccess 指令を複数指定することができます。
詳細は、ftpusers(4)、ftphosts(4)、ftpaccess(4) のマニュアルページを参照してください。
FTP サーバーのすべての構成ファイルで、# 記号で始まる行はコメントとして扱われます。
ftpaccess を使用する場合、FTP サーバーにログインするには、ユーザーはクラスのメンバーである必要があります。class 指令を ftpaccess に追加するには、特定のホストからアクセスを許可されているユーザーの class 名と typelist を指定します。
スーパーユーザーになります。
ftpaccess ファイルに匿名ユーザー、ゲストユーザー、実ユーザーのエントリを追加します。
class class typelist addrglob[addrglob...] |
FTP ユーザーの定義に使用するキーワード
class キーワードを使用して定義する名前。各ログインは、定義されているクラスのリストと比較される。ログインしたユーザーは、一致した最初のクラスのメンバーと見なされる
3 種類のユーザー (anonymous、guest、real) に一致するキーワードからなる、コンマで区切られたリスト
展開されたドメイン名または展開された数値アドレス。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
class local real,guest,anonymous *.provider.com class remote real,guest,anonymous * |
この例では、local クラスを、*.provider.com からログインする real、guest、または anonymous のいずれかの種類のユーザーとして定義します。最後の行では、remote を、*.provider.com 以外からログインするユーザーとして定義します。
ftpaccess ファイルに設定された指令により、特定のクラスのユーザーが同時にログインできる数を制限できます。各ログインの制限には、クラス名、UUCP スタイルの曜日リスト、制限を超過した場合に表示するメッセージファイルが含まれます。
ユーザーログインの制限を設定するには、次の手順を実行します。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
limit class n times [message_file] |
定義されたクラスの特定時刻の同時ログイン数を、指定したユーザー数に制限するキーワード
class キーワードを使用して定義する名前。各ログインは、定義されているクラスのリストと比較される。ログインしたユーザーは、一致した最初のクラスのメンバーと見なされる
ユーザー数
クラスが接続可能な曜日と 1 日の時間帯。任意の曜日を指定する場合は Any を指定する
ユーザーがアクセスを拒否された場合に表示されるメッセージファイル
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) のマニュアルページを参照してください。
必要な情報を誤入力するなどの理由で FTP サーバーへのログインが失敗すると、通常はログインが繰り返されます。ユーザーは、特定回数連続してログインを試行できます。その回数を超えるとメッセージが syslog ファイルに記録されます。その時点でユーザーとの接続は切断されます。ログイン失敗時の試行回数を制限するには、次の手順を実行します。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
loginfails n |
FTP 接続が切断されるまでのログインに失敗できる回数を割り当てるキーワード
ログインに失敗できる回数
loginfails 10 |
この例では、ユーザーがログイン試行に 10 回失敗すると 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) のマニュアルページを参照してください。
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) を参照してください。
これまでに説明した制御方法以外に、ftpaccess ファイルに明示的に文を追加して FTP サーバーへのアクセスを制限することができます。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
デフォルトでは、すべてのユーザーはデフォルト (非仮想) FTP サーバーへのアクセスを許可されています。特定のユーザー (anonymous 以外) のアクセスを拒否するには、次のエントリを追加します。
defaultserver deny username [username...] |
アクセスの拒否または許可を設定する非仮想サーバーの識別に使用するキーワード
defaultserver へのアクセスを制限するユーザーのログイン名。
deny 行に列挙されていないユーザーのアクセスを許可するには、次の行を追加します。
defaultserver allow username [username...] |
匿名ユーザーのアクセスを拒否するには、次のエントリを追加します。
defaultserver private |
defaultserver deny * defaultserver allow username |
この例では、FTP サーバーは、anon ユーザーと allow 行に列挙されているユーザー以外のユーザーのアクセスをすべて拒否するように設定されています。
また、ftphosts ファイルを使用して、複数のホストからの特定のログインアカウントのアクセスを拒否することができます。その他の情報は、ftphosts(4) のマニュアルページを参照してください。
FTP サーバーにアクセスするには、まずログインする必要があります。FTP サーバーは、実ユーザー、ゲストユーザー、匿名ユーザーの 3 種類のユーザーログインアカウントをサポートします。
実ユーザーには、FTP サーバーが動作するシステム上の端末セッションの確立を許可するアカウントがあります。ディレクトリとファイルのアクセス権の制約は受けますが、実ユーザーはディスク構造全体を参照できます。
ゲストユーザーも、FTP サーバーにログインするためのアカウントを必要とします。各ゲストアカウントは、ユーザー名とパスワードを使用して設定されます。端末セッションを確立できないように、ゲストには有効なログインシェルは割り当てません。ログイン時に、FTP サーバーは chroot(2) 操作を実行して、ゲストが参照できるサーバーのディスク構造を制限します。
FTP サーバーへのアクセスを許可できるように、実ユーザーとゲストユーザーのログインシェルを /etc/shells ファイルに列挙する必要があります。
匿名ユーザーは、ftp または anonymous をユーザー名として使って FTP サーバーにログインします。規約では、匿名ユーザーはパスワードの代わりに電子メールアドレスを入力します。
ログイン時に、FTP サーバーは chroot(2) 操作を実行して、匿名ユーザーが参照できるサーバーのディスク構造を制限します。ゲストユーザーにはそれぞれ独立した領域を作成できますが、匿名ユーザーは全員が単一のファイル領域を共有します。
実ユーザーとゲストユーザーは、個別のアカウントとパスワードを使用してログインしますが、本人以外はその存在を知りません。匿名ユーザーは、誰でも知っているアカウントでログインします。可能性として、このアカウントは誰でも使用できます。大規模なファイル配布システムのほとんどは匿名アカウントを使用して作成します。
実ユーザーの FTP サーバーへのアクセスを有効にするには、次の手順を実行します。
ユーザーに、端末セッションの確立に使用可能なユーザー名とパスワードで設定されたアカウントがあることを確認します。
詳細は、『Solaris のシステム管理 (基本編)』の「ユーザーアカウントとグループの管理 (概要)」を参照してください。
実ユーザーが ftpaccess ファイルのクラスのメンバーであることを確認します。
ftpaccess に定義されたユーザークラスについては、FTP サーバークラスの定義方法 を参照してください。
ユーザーのログインシェルが /etc/shells ファイルに列挙されていることを確認します。
ftpconfig スクリプトを使用して、すべての必要なシステムファイルをホームディレクトリにコピーします。ゲストユーザーとゲストのホームディレクトリがすでに存在する場合は、ftpconfig スクリプトは現在のシステムファイルでホームディレクトリ下の領域を更新します。
詳細は、ftpconfig(1M) のマニュアルページを参照してください。
匿名ユーザー用のユーザー名は anonymous か ftp ですが、FTP ゲスト用のユーザー名は固定されていません。実ユーザー名として使用できる名前であれば、どのような名前でも選択できます。
ゲストユーザーの FTP サーバーへのアクセスを有効にするには、次の手順を実行します。
useradd スクリプトを使用して、ログインシェルが /bin/true、ホームディレクトリが /root_dir/./home_dir であるようなゲストユーザーアカウントを作成します。
詳細は、useradd(1M) のマニュアルページと『Solaris のシステム管理 (基本編)』の「ユーザーアカウントとグループの管理 (概要)」を参照してください。
この手順では、/home/guests/./guest1 は guest1 というユーザーのホームディレクトリの名前として使用されます。
# /usr/sbin/useradd -m -c "Guest FTP" -d \ /home/guests/./guest1 -s /bin/true guest1 |
ゲストアカウントにパスワードを割り当てます。
guestuser エントリを ftpaccess ファイルに追加します。
guestuser guest1 |
さらに、ftpaccess ファイルで guestgroup 機能を使用して、複数のゲストユーザーを指定することができます。ftpaccess ファイルで guest-root 機能を使用すると、ゲストユーザーのホームディレクトリパスで /./ を指定する必要がなくなります。
ftpaccess ファイルで、ゲストユーザーが class のメンバーであることを確認します。詳細は、FTP サーバークラスの定義方法 を参照してください。
ftpconfig スクリプトを使用して、chroot 領域の必要なファイルを作成します。
/usr/sbin/ftpconfig -d /home/guests |
/bin/true が /etc/shells ファイルに列挙されていることを確認します。/etc/shells ファイルの作成方法 を参照してください。
この例では、FTP 領域は /home/guests ディレクトリに設定されます。
# /usr/sbin/ftpconfig -d /home/guests Updating directory /home/guests |
ftpconfig スクリプトは、anonymous アカウントを作成し、ホームディレクトリに必要なファイルを作成します。
詳細は、ftpconfig(1M) のマニュアルページを参照してください。
匿名ユーザーの FTP サーバーへのアクセスを有効にするには、次の手順を実行します。
ftpconfig スクリプトを使用して、匿名ユーザーアカウントを作成します。
# /usr/sbin/ftpconfig anonymous-ftp-directory |
ftpaccess ファイルで、匿名ユーザーが class に割り当てられていることを確認します。
詳細は、FTP サーバークラスの定義方法 を参照してください。
この例では、FTP 領域は /home/ftp ディレクトリに設定されます。
# /usr/sbin/ftpconfig /home/ftp Creating user ftp Updating directory /home/ftp |
次に、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 ファイルに定義されていない場合、ローカルマシンのデフォルトホスト名が使用されます。
次に、マジッククッキーを使用するメッセージファイルの例を示します。
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. |
ユーザーがログインした後、システム関連またはアプリケーション関連のメッセージが画面に表示されます。ftpaccess ファイルには、関連付けられた message 文をトリガするイベントが列挙されています。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
message message_file [when [class ...]] |
ユーザーがログインしたとき、または作業ディレクトリを変更するコマンドを実行したときに表示されるメッセージファイルの指定に使用するキーワード
表示するメッセージファイルの名前
login または cwd=dir と設定されるパラメータ。 例を参照すること
class を指定すると、メッセージの表示を特定のクラスのメンバーに限定できる
message /etc/ftpd/Welcome login anon guest message .message cwd=* |
この例では、クラス anon または guest のユーザーがログインするときに /etc/ftpd/Welcome ファイルが表示されることを示します。2 行目では、すべてのユーザーに対して現在の作業ディレクトリにある .message ファイルが表示されることを示します。
メッセージファイルは、ゲストユーザーおよび匿名ユーザーの chroot ディレクトリからの相対位置に作成します。
ディレクトリに最初に移動したとき、README ファイルを表示することができます。README オプションを構成するには、次のエントリを ftpaccess ファイルに追加します。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
readme message_file [when [class...]] |
ユーザーがログインするか、作業ディレクトリを変更するときに確認するメッセージファイルの指定に使用されるキーワードメッセージファイルが存在する場合、ユーザーはその存在を示す通知と、ファイルの更新日付を受け取る
確認するメッセージファイルの名前
login または cwd=dir と設定されるパラメータ。 例を参照すること
class を指定すると、メッセージの表示を特定のクラスのメンバーに限定できる
greeting キーワードと banner キーワードを使用して、ユーザーにメッセージを送信することもできます。ftpaccess(4) のマニュアルページを参照してください。
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 サーバーのアクセス制御は、Solaris 9 オペレーティング環境で使用できる標準のファイルとディレクトのアクセス制御を補足するものです。Solaris の標準コマンドを使用して、ファイルへのアクセス、ファイルの変更、またはファイルのアップロードが可能なユーザーを制限します。chmod(1)、chown(1)、chgrp(1) のマニュアルページを参照してください。
ftpaccess ファイル内のアクセス権機能を使用してどの種類のユーザーにどのコマンドの実行を許可するかを指定するには、次の手順を実行します。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
command yes|no typelist |
chmod、delete、overwrite、rename、または umask のいずれか
ユーザーにコマンドの発行を許可または拒否する
anonymous、guest、および real のキーワードを任意に組み合わせてコンマで区切って並べたリスト
次に、FTP サーバー上のファイルアクセス機能に対して設定されているアクセス権の例を示します。
chmod no anonymous, guest delete no anonymous overwrite no anonymous rename no anonymous umask no guest, anonymous |
匿名ユーザーは、ファイルの削除、上書き、名前変更を行うことができない
ゲストユーザーと匿名ユーザーは両方とも、アクセスモードの変更、umask のリセットができない
FTP サーバー上のディレクトリのアクセス権を設定することにより、FTP サーバーへのアップロードと FTP サーバーからのダウンロードを制御できます。デフォルトでは、匿名ユーザーはアップロードを実行できません。匿名ユーザーにアップロードを許可する場合は、充分な注意が必要です。
ftpaccess ファイルに指令を追加して、アップロードのアクセス権と、アップロード異常終了時に表示するエラーメッセージを指定します。
スーパーユーザーになります。
次のエントリを 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...} |
ホームディレクトリ (chroot() の引数) として root-dir を持つユーザーに適用するキーワード。root-dir に “*” を指定して、任意のホームディレクトリを一致させることができる
root-dir ディレクトリパスを、絶対パスとして解釈するか、または現在の chroot ディレクトリからの相対パスとして解釈するかを指定するパラメータ
任意個数の class=<classname> 制限の指定に使用するキーワード。制限が指定された場合、upload 節が有効になるのは、現在のユーザーが指定されたクラスのメンバーである場合に限定される
ユーザーのルートディレクトリと匿名ユーザーのホームディレクトリ
ディレクトリ名に一致するパターン。アスタリスクを任意の場所に使用することも、単独で使用して任意のディレクトリを表すこともできる
FTP サーバーへのアップロードを許可または拒否する変数
dirnames にアップロードされたファイルの所有者
dirnames にアップロードされたファイルに関連付けられているグループ
アップロードされたファイルのアクセス権の指定に使用するパラメータ。デフォルトモード 0440 の場合、匿名アカウントのユーザーはアップロードされたファイルを読み取れない
dirnames に列挙されたディレクトリに、ユーザーがサブディレクトリを作成することを許可または拒否するキーワード
新しく作成したディレクトリのアクセス権を決定するオプションモード
アップロードされたファイルの名前を制御するキーワード
anonymous、guest、および real のキーワードを任意に組み合わせてコンマで区切って並べたリスト
regexp 条件に一致しない場合に表示されるメッセージファイル
ファイル名で使用できる、または使用できない、英数字
upload /export/home/ftp /incoming yes ftpadm ftpadmin 0440 nodirs path-filter anonymous /etc/ftpd/filename.msg ^[-A-Za-z0-9._]*$ ^[.-] |
この例では、次のことが示されています。
/export/home/ftp への chroot を使用する FTP ユーザーアカウントは、/incoming ディレクトリにアップロードすることができる。アップロードされたファイルの所有者は、ユーザー ftpadm、グループ ftpadmin である。モードは nodirs キーワード付きで 0440 に設定され、匿名ユーザーによるサブディレクトリの作成を拒否する
匿名ユーザーの場合、ファイル名は A-Z、a-z、0-9、. (ドット記号)、- (ダッシュ記号)、_ (下線) の任意の並びである。ファイル名を . (ドット記号) または - (ダッシュ記号) で始めることはできない。ファイル名がこの条件を満足しない場合、/etc/ftpd/filename.msg メッセージファイルが FTP 管理者により作成済みであれば、そのファイルが表示される。このメッセージの後に、FTP サーバーのエラーメッセージが表示される
匿名ユーザーによるアップロードが許可されているディレクトリの所有者とアクセス権は、厳密に制御する必要があります。FTP 管理者は FTP サーバーにアップロードされるすべてのファイルの所有者である必要があります。匿名ユーザーにファイルのアップロードを許可する場合、FTP 管理者を作成する必要があります。ディレクトリの所有者はユーザー ftpadm、グループ ftpadm、アクセス権は 3773 である必要があります。
FTP サーバーにアップロードされるファイルのアクセスモードは 0440 である必要があります。モードを 0440 にすると、匿名アカウントのユーザーはアップロードされたファイルを読み取れません。この制限により、サーバーが第 3 者によってファイル配布の場所として使用されるのを防ぎます。
アップロードされたファイルを配布可能にするために、FTP 管理者はそれらのファイルを公共ディレクトリに移動することができます。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加して、ユーザーがファイルを読み取れないようにします。
noretrieve [absolute|relative] [class=classname]... [-] filename ... |
特定のファイル (複数可) の読み取りの拒否に使用するキーワード
root-dir ディレクトリパスを、絶対パスとして解釈するか、または現在の chroot ディレクトリからの相対パスとして解釈するかを指定するパラメータ
noretrieve 制限を適用するユーザーの class=<classname> の指定に使用するキーワード
ユーザーによる読み取りを拒否するファイルの名前
noretrieve /etc/passwd |
この例では、すべてのユーザーが /etc/passwd の読み取りを拒否されます。
仮想ホスティングにより、FTP サーバーは同一マシン上の複数ドメインをサポートできます。各仮想ホストには、独立した論理インタフェースと IP アドレスが必要です。
FTP サーバーは、限定と完全の 2 種類の仮想ホスティングをサポートします。限定仮想ホスティングでは、すべての仮想ホストが同じ構成ファイルを使用します。完全仮想ホスティングでは、各仮想ホストは個別の構成ファイルを使用できます。
デフォルトでは、実ユーザーとゲストユーザーは、仮想ホストへのログインを拒否されます。次に示す ftpaccess 指令を設定すると、デフォルトを上書きできます。
特定のユーザーにアクセスを許可する場合 virtual address allow username 匿名ユーザーのアクセスを拒否する場合 virtual address private username |
詳細は、ftpaccess(4) のマニュアルページを参照してください。
限定仮想ホスティングでは、仮想 FTP サーバーの部分的なサポートを提供します。限定仮想ホスティングのサポートを有効にするには、仮想ルートディレクトリを指定します。必要であれば、次に示す仮想ホストのパラメータを ftpaccess ファイルに設定することもできます。
banner
logfile
hostname
ftpaccess ファイル内のすべての指令は、すべての仮想サーバーによりグローバルに共有されます。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
virtual address root|banner|logfile path virtual address hostname|email string |
仮想サーバー機能を有効にするために使用するキーワード
仮想サーバーの IP アドレス
仮想サーバーのルートディレクトリ
仮想サーバーへの接続が確立したときに表示されるバナーファイル
仮想サーバーに対するファイル転送の記録
仮想サーバー上のディレクトリとファイルの場所の指定に使用する変数
メッセージファイルと HELP コマンドで使用される電子メールアドレス
グリーティングメッセージやステータスコマンドで表示されるホスト名
email パラメータまたは hostname パラメータの指定に使用する変数
hostname を仮想サーバーの address として使用することは可能ですが、それよりも IPv4 アドレスの使用を強く推奨します。hostname に一致するホストが見つかるためには、FTP 接続を受信するときに DNS が使用可能である必要があります。IPv6 ホストの場合は、IPv6 アドレスよりもホスト名を使用します。
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 ディレクトリ、banner、logfile の場所を設定します。
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 |
完全仮想ホスティングでは、各仮想ドメインは個別の構成ファイルを使用できます。FTP サーバー上の仮想ホスティングの完全サポートを有効にするには、特定のドメインについて次に示す FTP 構成ファイルを作成または変更します。
ftpaccess
ftpusers
ftpgroups
ftphosts
ftpconversions
詳細は、ftpaccess(4)、ftpusers(4)、ftpgroups(4)、ftphosts(4)、ftpconversions(4) のマニュアルページを参照してください。
構成ファイルの個別のバージョンが見つからない場合は、/etc/ftpd ディレクトリに置かれた構成ファイルのマスターバージョンを使用します。
スーパーユーザーになります。
次のエントリを /etc/ftpd/ftpservers ファイルに追加します。
address /config-file-dir |
仮想サーバーの IP アドレス
仮想ホスト用にカスタマイズされた構成ファイルが置かれるディレクトリ
hostname を仮想サーバーの address として使用することは可能ですが、それよりも IPv4 アドレスの使用を強く推奨します。hostname に一致するホストが見つかるためには、FTP 接続を受信するときに DNS が使用可能である必要があります。IPv6 ホストの場合は、IPv6 アドレスよりもホスト名を使用します。
仮想ホスト用にカスタマイズされた FTP サーバー構成ファイルを作成するには、/etc/ftpd ディレクトリにある構成ファイルのマスターバージョンを /config-file-dir ディレクトリにコピーします。
詳細は、ftpservers(4) のマニュアルページを参照してください。
# # FTP Server virtual hosting configuration file # 10.1.2.3 /net/inet/virtual/somedomain/ 10.1.2.4 /net/inet/virtual/anotherdomain/ |
この例では、仮想サーバー上の 2 つの異なるドメインの IP アドレスを指定します。
ftpaddhost(1M) スクリプトを -c オプション付きで使用して、完全仮想ホストを構成できます。
次の例では、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 |
FTP サーバーを起動するには、次の 2 つの方法があります。
inetd.conf ファイルに nowait エントリを追加して FTP サーバーを起動することができます。サイトで処理する接続が多数になる場合、FTP デーモンをスタンドアロンモードで実行することもできます。詳細は、inetd.conf(4) のマニュアルページを参照してください。また、その他のコマンド行オプションについては、in.ftpd(1M) のマニュアルページを参照してください。
スーパーユーザーになります。
nowait エントリを inetd.conf ファイルに追加します。
ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -a |
-a オプションの指定により、ftpaccess ファイルの使用を有効にします。
inetd にシグナルを送信し、inetd.conf ファイルを再読み取りします。
# pkill -HUP inetd |
FTP サーバーを、inetd.conf とは無関係に、スタンドアロンサーバーとして実行することもできます。
スタンドアロンサーバーの応答時間は常に可能な限り最短であり、FTP サービス専用の大規模サーバー向けです。スタンドアロンサーバーは一切再起動する必要がないので、専用サーバーに適した短い接続応答時間を実現します。スタンドアロンサーバーは、混雑していない時間帯も含めて、常に動作しており、永久に接続要求を待ちます。
スーパーユーザーになります。
inetd.conf ファイルの ftp サービスの行の先頭に # 記号を挿入して、そのエントリをコメントアウトします。
inetd にシグナルを送信し、inetd.conf ファイルを再読み取りします。
# pkill -HUP inetd |
スタンドアロン FTP サーバーを起動します。
# /usr/sbin/in.ftpd -a -S |
FTP サーバー起動スクリプトにこの行を追加します。システム起動スクリプトの作成については、『Solaris のシステム管理 (基本編)』の「実行制御スクリプト」を参照してください。
ftpshut(1M) コマンドは、特定の時刻に FTP サーバーを停止します。
ftpshut を実行する場合、コマンド行オプションでシステム停止時刻を指定するファイルを作成します。この時刻になると、それ以上の新しい接続は受け付けられなくなり、既存の接続は切断されます。この停止時刻の情報に基づいて、サーバーが停止することがユーザーに通知されます。ftpshut により作成されるファイルの位置は、ftpaccess ファイルの shutdown 指令によって指定します。
ftpshut を実行し、ftpaccess ファイルに shutdown 指令を追加するには、次の手順を実行します。
スーパーユーザーになります。
次のエントリを ftpaccess ファイルに追加します。
shutdown path |
FTP サーバーの停止時刻が予定されているかどうかを定期的に検査するファイルへの path の指定に使用するキーワード
ftpshut コマンドが作成したファイルの場所
ftpshut コマンドを実行します。
ftpshut [ -V ] [ -l min] [ -d min] time [warning-message...] |
FTP サーバーが停止することをユーザーに通知する手順を提供するコマンド
著作権情報とバージョン情報を表示した後、接続を切断するように指定するオプション
FTP サーバーへの新しい接続を拒否する時間の調整に使用されるフラグ
FTP サーバーへの既存の接続を切断する時間の調整に使用されるフラグ
停止時刻として now を指定すると即時停止する。未来における停止時刻を指定するには、「+number」または「HHMM」のどちらかの形式で指定する
停止通知メッセージ
ftprestart コマンドを使用して、FTP サーバーを停止後に再起動します。
詳細は、ftpshut(1M)、ftpaccess(4)、ftprestart(1M) のマニュアルページを参照してください。
ここでは、FTP サーバーに関する問題をデバッグする方法についていくつか説明します。
FTP サーバーは、/etc/syslog.conf ファイルでデーモンメッセージの出力先として指定された場所に、デバッグに役立つメッセージを書き込みます。FTP サーバーに問題が発生した場合、まずこのファイルで関連するメッセージを検査します。
FTP サーバーメッセージは、機能デーモンにより制御されます。FTP サーバーから /var/adm/message にメッセージを送信し、syslogd にその構成ファイルを再読み取りさせるには、次の手順を実行します。
次のようなエントリを /etc/syslog.conf ファイルに追加します。
daemon.info /var/adm/message |
syslogd にシグナルを送信して、その構成ファイルを再読み取りさせます。
# pkill -HUP syslogd |
この操作により、FTP サーバーから有益な情報を含むメッセージが /var/adm/messages に書き込まれます。
greeting text 機能を使用して、適切な内容の ftpaccess ファイルが使用されていることを検査するには、次の手順を実行します。
FTP ユーザーがどのコマンドを実行したかを確認するには、ftpaccess の log commands ログ機能を使用します。
次の指令を ftpaccess ファイルに追加し、typelist で指定されたユーザーによるコマンドを個別に記録します。
log commands typelist |
/etc/syslog.conf で指定した場所に書き込まれたメッセージを検査します。
本章では、リモートシステムにログインし、リモートシステムのファイルを操作するために必要なすべての作業について説明します。この章で説明する手順は次のとおりです。
この章では、次の表に示すリモートシステムにログインし、ファイルをコピーするための作業について説明します。
表 39–1 リモートシステムへのアクセス (作業マップ)
作業 |
説明 |
参照先 |
---|---|---|
リモートシステムにログインする (rlogin) |
| |
リモートシステムにログインする (ftp) |
| |
rcp を使用してリモートファイルをコピーする |
rcp コマンドを使用して、リモートシステムから、およびリモートシステムに、ファイルをコピーする |
rlogin コマンドを使用すると、リモートシステムにログインできます。ログインした後は、リモートファイルシステム内で移動し、その内容を (リモートシステムによる承認にしたがって) 操作したり、ファイルをコピーしたり、リモートコマンドを実行したりできます。
ログイン先のシステムがリモートドメインに所属している場合は、システム名にドメイン名を追加してください。次の例では、SOLAR はリモートドメイン名です。
rlogin pluto.SOLAR |
また、Control-d と入力すると、リモートログイン処理をいつでも中断できます。
rlogin 処理の認証 (ログインするユーザーの確認処理) は、リモートシステムまたはネットワーク環境で実行されます。
この 2 つの認証形式の主な違いは、要求される対話操作と、認証の確立方法にあります。リモートシステムがユーザーを認証しようとする場合に、/etc/hosts.equiv または .rhosts ファイルを設定していなければ、パスワードの入力を促すプロンプトが表示されます。ネットワークがユーザーを認証しようとする場合は、ユーザーはすでにネットワークに認識されているので、パスワードプロンプトは表示されません。
リモートシステムがユーザーを認証しようとする場合は、特に次のいずれかに該当する場合は、リモートシステム上のローカルファイル内の情報を使用した認証が行われます。
ユーザーが属するシステム名とユーザー名がリモートシステム上の /etc/hosts.equiv ファイルに列挙されている
または
ネットワークによる認証は、次のどちらかの場合に利用されます。
通常は、ネットワークによる認証がシステムによる認証より優先されます。
/etc/hosts.equiv ファイルには、リモートシステムの「信頼される (trusted) ホスト」が 1 行に 1 つずつ入っています。ユーザーがこのファイルに含まれるホストから (rlogin を使用して) リモートログインしようとする場合、リモートシステムがそのユーザーのパスワードエントリにアクセスできれば、ユーザーはパスワードを入力しなくてもログインできます。
典型的な hosts.equiv ファイルの構造は次のとおりです。
host1 host2 user_a +@group1 -@group2 |
上記の host1 のように、ホスト名だけのエントリであれば、そのホストが信頼されているため、そのマシン上のユーザーも信頼できることを意味します。
この例の第 2 のエントリのようにユーザー名も含まれていると、その指定されたユーザーがアクセスしようとする場合にのみ、そのホストが信頼されます。
グループ名の先頭にプラス記号 (+) が付いている場合は、そのネットグループ内のすべてのマシンが信頼されていることを意味します。
グループ名の先頭にマイナス記号 (–) が付いている場合は、そのネットグループ内には信頼できるマシンがないことを意味します。
/etc/hosts.equiv ファイルにはセキュリティ上の問題があります。/etc/hosts.equiv ファイルをシステム上で管理する場合は、ネットワーク内で信頼されるホストのみを含めるようにしてください。別のネットワークに所属するホストまたは公共領域にあるマシンを追加しないでください。たとえば、端末室に置かれているホストは追加しないでください。
信頼できないホストを使用すると、重大なセキュリティ上の問題が発生する可能性があります。/etc/hosts.equiv ファイルを正しく構成されたファイルと置き換えるか、ファイルを削除してください。
/etc/hosts.equiv ファイルに + のみの 1 行しか入っていない場合は、認識されているすべてのホストが信頼されることを示します。
.rhosts ファイルは、/etc/hosts.equiv ファイルに対応するユーザー用のファイルです。このファイルには、通常、ホストとユーザーの組み合わせのリストが入っています。このファイルにホストとユーザーの組み合わせが含まれている場合、そのユーザーには、パスワードを入力しなくても、そのホストからリモートログインする許可が与えられます。
.rhosts ファイルはユーザーのホームディレクトリの一番上のレベルに置かれていなければなりません。サブディレクトリに置かれている .rhosts ファイルは参照されません。
ユーザーは、各自のホームディレクトリ内で .rhosts ファイルを作成できます。.rhosts ファイルを使用することによって、/etc/hosts.equiv ファイルを使用しなくても、異なるシステムのユーザー自身のアカウント間で信頼できるアクセスを行うことができます。
.rhosts ファイルにはセキュリティ上、重大な問題があります。/etc/hosts.equiv ファイルはシステム管理者の制御下にあり、効率よく管理できますが、誰でも .rhosts ファイルを作成して、システム管理者が知らないうちに自分が選んだユーザーにアクセス権を与えることができます。
すべてのユーザーのホームディレクトリが 1 台のサーバー上にあって、特定のユーザーだけがそのサーバーに対してスーパーユーザーのアクセス権を持っている場合、ユーザーが .rhosts ファイルを使用できないようにするためには、スーパーユーザーとして、空の .rhosts ファイルを各ユーザーのホームディレクトリに作成します。次に、このファイルのアクセス権を 000 に変更します。こうしておけば、スーパーユーザーでも、そのファイルを変更することが難しくなります。これにより、ユーザーが .rhosts を無責任に使用することによって生じるセキュリティ問題を防ぐことができます。ただし、ユーザーが自分のホームディレクトリへの実効パスを変更できる場合、この方法は何の解決にもなりません。
.rhosts ファイルを確実に管理する唯一の方法は、それを完全に使用できないようにすることです。詳細は、.rhosts ファイルを検索して削除する方法を参照してください。システム管理者は、システムを頻繁にチェックして、このポリシーに対する違反を調べることができます。このポリシーに対する例外は、root アカウントです。ネットワークのバックアップや他のリモートサービスを実行するには、.rhosts ファイルが必要な場合があります。
システムが正しく構成されていれば、リモートログインをリンクできます。たとえば、earth 上のユーザーが jupiter にログインし、そこから pluto にログインします。
このユーザーは jupiter からログアウトして pluto に直接ログインすることもできますが、このリンク方法の方が便利です。
パスワードを入力せずにリモートログインをリンクするには、/etc/hosts.equiv または .rhosts を正しく設定しておかなければなりません。
rlogin コマンドにより、リモートシステムに直接的または間接的にログインできます。
直接リモートログインは、デフォルトユーザー名、すなわち現在ローカルシステムにログインしている個人のユーザー名を使用します。これは、最も一般的なリモートログイン形式です。
間接リモートログインは、リモートログイン処理中に別のユーザー名を入力することによって行います。これは、一時的に借りているワークステーションから行うタイプのリモートログインです。たとえば、ユーザーが同僚のオフィスにいるときに自分のホームディレクトリに置かれているファイルを確認する必要がある場合、同僚のシステムからリモートで自分のシステムにログインすることができます。この場合、自分のユーザー名を入力して間接リモートログインを実行することになります。
表 39–2 は、直接ログインや間接ログインと認証方式の依存関係を示しています。
表 39–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 |
find(1) コマンドを使用し、.rhosts ファイルを検索して削除します。
# find home-directories -name .rhosts -print -exec rm{} |
ユーザーのホームディレクトリがあるディレクトリへのパス。複数のパスを指定すると、複数のホームディレクトリを一度に検索できる
ここでは .rhosts を指定する
現在のパス名を出力する
指定したファイル名に一致するファイルすべてに、rm コマンドを適用するように find コマンドに伝える
find コマンドは、指定したディレクトリから始めて .rhosts というファイルを検索します。ファイルが見つかると、find はファイルのパスを画面上に表示し、ファイルを削除します。
次の例では、/export/home ディレクトリ内で、すべてのユーザーのホームディレクトリ内の .rhosts ファイルを検索し削除します。
# find /export/home -name .rhosts -print | xargs -i -t rm{} |
ping コマンドを使用して、リモートシステムが動作中かどうかを調べます。
$ ping system-name | ip-address |
リモートシステム名
リモートシステムの IP アドレス
ping コマンドは、次の 3 つのメッセージのどれかを返します。
状態メッセージ |
意味 |
---|---|
system-name is alive |
このシステムにはネットワーク経由でアクセスできる |
ping: unknown host 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 |
(オプションなし) システム名と、root など現在ログインしているユーザー名を表示する
各ユーザーの詳細な情報を表示する。ユーザーのログインウィンドウ、ログイン日時、ログインしている時間、ユーザーのログイン元のリモートシステム名など
次の例は、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(1) コマンドを使用してリモートシステムにログインします。
$ rlogin [-l user-name] system-name |
(オプションなし) 現在のユーザー名を使用して、リモートシステムに直接ログインする
ユーザー名を入力して、リモートシステムに間接ログインする
ネットワークがユーザーを認証しようとする場合には、パスワードを求めるプロンプトは表示されません。リモートシステムがユーザーを認証しようとする場合は、パスワードの入力を求めるプロンプトが表示されます。
処理が成功すると、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(1) コマンドを使用して、リモートシステムからログアウトします。
$ exit |
次の例は、ユーザー smith がシステム pluto からログアウトする様子を示しています。
$ exit pluto% logout Connection closed. earth% |
ftp コマンドは、インターネットのファイルトランスポートプロトコルへのユーザーインタフェースを提供します。このユーザーインタフェースはコマンドインタプリタと呼ばれ、リモートシステムにログインし、そのファイルシステムについて様々な処理を実行できるようにします。基本操作については、表 39–3 を参照してください。
rlogin と rcp とで、ftp が優れている最大のポイントは、ftp はリモートシステムで UNIX を実行する必要がないことです。ただし、リモートシステムを TCP/IP 通信ができるように構成する必要はあります。逆に、rlogin の優れている点は、ftp よりも豊富なファイル操作コマンドを使用できることです。
ftp によるリモートログインの認証は、次のいずれかの方法により確立できます。
コマンド名 |
説明 |
---|---|
ftp |
ftp コマンドインタプリタにアクセスする |
ftp remote-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) のマニュアルページを参照してください。
リモートログインの認証 (ftp)で説明しているように、ftp 認証を持っている必要があります。
ftp コマンドを使用してリモートシステムへ接続します。
$ ftp remote-system |
接続に成功すると、確認メッセージとプロンプトが表示されます。
ユーザー名を入力します。
Name (remote-system:user-name): user-name |
プロンプトが表示されたら、パスワードを入力します。
331 Password required for user-name: Password: password |
アクセス中のシステムで匿名 ftp アカウントが設定されている場合は、パスワードとして電子メールアドレスの入力を求めるプロンプトが表示されます。ftp インタフェースがパスワードを受け付けると、確認メッセージと (ftp>) プロンプトを表示します。
これで、help など、ftp インタフェースから提供されるどのコマンドでも使用できます。主なコマンドについては、表 39–3 を参照してください。
次の 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> |
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. |
接続を終了するメッセージに続いて、通常のシェルプロンプトが表示されます。
リモートシステムからファイルをコピーしたい、ローカルシステム上のディレクトリに変更します。
$ cd target-directory |
ftp によりリモートシステムへ接続する方法を参照してください。
コピー元ディレクトリに変更します。
ftp> cd source-directory |
システムがオートマウンタを使用している場合、リモートシステムのユーザーのホームディレクトリは、/home の下にユーザーのホームディレクトリと並行して表示されます。
コピー元ファイルの読み取り権があることを確認します。
ftp> ls -l |
転送タイプを binary に設定します。
ftp> binary |
ファイルを 1 つコピーするには、get コマンドを使用します。
ftp> get filename |
一度に複数のファイルをコピーするには、mget コマンドを使用します。
ftp> mget filename [filename ...] |
個々のファイル名を続けて入力するか、ワイルドカード文字を使用できます。mget コマンドでは、個々のファイルがコピーされ、そのたびに確認を求めるプロンプトが表示されます。
ftp による接続を終了します。
ftp> bye |
次の例では、ユーザー kryten は、システム pluto と ftp 接続し、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. |
次の例では、同じユーザー kryten が mget コマンドを使用して、/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. |
ftp コマンドを入力して接続するディレクトリは、ローカルの作業用ディレクトリ、つまりこの操作のコピー元ディレクトリになります。
ftp により接続します。
ftp によりリモートシステムへ接続する方法を参照してください。
コピー先ディレクトリに変更します。
ftp> cd target-directory |
ローカルシステムでオートマウンタを使用中であれば、/home の下に自分のホームディレクトリと並行してリモートシステムのユーザーのホームディレクトリが表示されるので注意してください。
コピー先ディレクトリへの書き込み権があることを確認します。
ftp> ls -l target-directory |
転送タイプを binary に設定します。
ftp> binary |
ファイルを 1 つコピーするには、put コマンドを使用します。
ftp> put filename |
一度に複数のファイルをコピーするには、mput コマンドを使用します。
ftp> mput filename [filename ...] |
個々のファイル名を続けて入力するか、ワイルドカード文字を使用できます。mput コマンドでは、個々のファイルがコピーされ、そのたびに確認を求めるプロンプトが表示されます。
ftp による接続を終了するには、bye と入力します。
ftp> bye |
次の例では、ユーザー kryten はシステム pluto へ ftp により接続し、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. |
次の例では、同じユーザー kryten は mput コマンドを使用して自分のホームディレクトリから 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 コマンドは、ローカルシステムとリモートシステム間、または 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 を指定する必要はありません。リモートログイン操作によって別のユーザーのホームディレクトリがどのようにマウントされるかについては、リモートログイン後の処理を参照してください。
表 39–4 に、C シェルが認識する絶対パス名と相対パス名の例を示します。このサンプルでは、次の用語を使用します。
表 39–4 ディレクトリ名とファイル名に使用できる構文
ログイン先 |
構文 |
説明 |
---|---|---|
ローカルシステム |
. |
ローカルの作業用ディレクトリ |
|
path/filename |
ローカルの作業用ディレクトリ内の path と filename |
|
~ |
現在のユーザーのホームディレクトリ |
|
~/path/filename |
現在のユーザーのホームディレクトリの下の path と filename |
|
~user |
user のホームディレクトリ |
|
~user/path/filename |
user のホームディレクトリの下の path と filename |
|
remote-system:path/filename |
リモートの作業用ディレクトリ内の path と filename |
リモートシステム |
. |
リモートの作業用ディレクトリ |
|
filename |
リモートの作業用ディレクトリ内の filename |
|
path/filename |
リモートの作業用ディレクトリ内の path と filename |
|
~ |
現在のユーザーのホームディレクトリ |
|
~/path/filename |
現在のユーザーのホームディレクトリ内の path と filename |
|
~user |
user のホームディレクトリ |
|
~user/path/filename |
user のホームディレクトリの下の path と filename |
|
local-system:path/filename |
ローカルの作業用ディレクトリ内の path と filename |
少なくとも、コピー元システム上で読み取り権を持ち、コピー先システム上で書き込み権を持っていなければなりません。
コピー元とコピー先の位置を決定します。
コピー元またはコピー先のパスがわからない場合は、まず rlogin コマンドを使用してリモートシステムにログインします (リモートシステムにログインする方法 (rlogin)を参照)。次に、そのパスが見つかるまでリモートシステム上を移動します。その後は、ログアウトしなくても次の手順を実行できます。
ファイルまたはディレクトリをコピーします。
$ rcp [-r] source-file|directory target-file|directory |
(オプションなし) コピー元からコピー先にファイルを 1 つコピーする
コピー元からコピー先にディレクトリをコピーする
この構文は、リモートシステムとローカルシステムのどちらにログインするかに関係なく適用されます。表 39–4 で説明したとおり、ファイルやディレクトリのパス名のみをこの後で示す例のように変更します。
「~」と「.」を使用すると、ローカルのファイル名やディレクトリ名のパス部分を指定できます。ただし、「~」はリモートシステムではなく現在のユーザーに適用されることと、「.」はログイン先のシステムに適用されることに注意してください。この 2 つの記号については、表 39–4 を参照してください。
次に、rcp を使用してローカルシステムとリモートシステム間でファイルをコピーする使用例を示します。
次の例では、rcp はファイル letter.doc をリモートシステム pluto の /home/jones ディレクトリから、ローカルシステム earth 上の作業用ディレクトリ (/home/smith) にコピーします。
earth(/home/smith): rcp pluto:/home/jones/letter.doc . |
この例では、リモートログインをしないで rcp 操作を実行しています。コマンド行の最後にある「.」記号は、リモートシステムではなく、ローカルシステムを表します。
コピー先ディレクトリもローカルユーザーのホームディレクトリなので、「~」 記号で指定することもできます。
earth(home/smith): rcp pluto:/home/jones/letter.doc ~ |
次の例では、rlogin コマンドの実行後に rcp 操作が実行され、リモートシステムからローカルシステムにファイルをコピーしています。操作の流れは前述の例と同じですが、リモートログインによりパスが変更になります。
earth(/home/smith): rlogin pluto . . . pluto(/home/jones): rcp letter.doc ~ |
コマンド行の最後に「.」記号を使用するのは、この例では不適切です。リモートログインが行われているので、「.」記号はリモートシステムを指し、実際には 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 |
次の例では、rlogin コマンドの実行後に rcp 操作が実行され、ローカルファイルをリモートディレクトリにコピーしています。操作の流れは前に示した例と同じですが、リモートログインによりパスが変更になります。
earth(/home/smith): rlogin pluto . . . pluto(/home/jones): rcp ~/notice.doc . |
現在のユーザーのホームディレクトリはローカルシステム上にありますが、「~」記号によりそのディレクトリが表されます。ユーザーはリモートシステムにログインしているので、「.」記号はリモートシステム上の作業用ディレクトリを表します。次の構文を使用しても同じ操作を実行します。
pluto(/home/jones): rcp earth:/home/smith/notice.doc /home/jones |