Solaris のシステム管理 (第 2 巻)

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

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

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

rlogin pluto.SOLAR

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

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

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

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

図 8-2 リモートログイン (rlogin) の認証

Graphic

リモートシステムは、ユーザーを認証するときに、特に次のどちらかの場合にはローカルファイル内の情報を利用します。

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


注 -

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


/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 ファイルを正しく構成されたファイルと置き換えるか、ファイルを削除してください。

/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 にログインします。

Graphic

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

パスワードを入力せずにリモートログインをリンクするには、/etc/hosts.equiv または .rhosts を正しく設定しておかなければなりません。

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

rlogin コマンドを使用すると、図 8-3 のように、リモートシステムに直接または間接的にログインできます。

図 8-3 直接ログインと間接ログイン

Graphic

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

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

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

表 8-1 ログイン方式と認証方式 (rlogin) の依存関係

ログイン方式 

ユーザー名の提供 

認証 

パスワード 

直接 

システム 

ネットワーク 

なし 

 

 

システム 

必要 

間接 

ユーザー 

ネットワーク 

なし 

 

 

システム 

必要 

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

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

No directory! Logging in with home=/ 

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

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

earth(/home/smith):

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

earth(/home/smith): rlogin pluto
.

.

.

pluto(/home/smith):

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

Graphic

cd を使って /home に移動してから ls を実行すると、次のように表示されます。

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

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

  1. スーパーユーザーになります。

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

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

    home-directories

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

    -name .rhosts

    ここでは .rhosts を指定する

    -print

    現在のパス名を出力する 

    -exec rm {} ¥;

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

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

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

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

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

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

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

$ ping system-name | ip-address

system-name

リモートシステム名 

ip-address

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

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

状態メッセージ 

意味 

system-name is alive

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

ping:unknown 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

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

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

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

$ rusers pluto
pluto    smith  jones

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

$ rusers -l pluto
smith     pluto:console       Nov 18 09:19     4:10
jones     mars:console        Nov 18 09:20     4:11   (mars)

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

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

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

rlogin

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

-l user-name

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

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

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

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

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

$ rlogin pluto
Last login: Thu Feb 26 08:00:40 from earth
Sun Microsystems Inc.   SunOS 5.7       September 1998
You have mail.
pluto%

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

$ rlogin -l smith pluto
password: user-password
Last login: Thu Feb 26 09:03:53 from earth
Sun Microsystems Inc.   SunOS 5.7       September 1998
You have mail.
pluto% 

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

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

$ exit

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

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

$ exit
pluto% logout
Connection closed.
earth%