Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)

第 4 章 ネットワーク情報サービス (NIS) (概要)

この章では、ネットワーク情報サービス (NIS) の概要について説明します。

NIS とは分散型ネームサービスであり、ネットワーク上のオブジェクトおよびリソースを識別し、探索するメカニズムです。NIS は、ネットワーク全体の情報に関する一様な記憶領域と検索方法を、トランスポートプロトコルやメディアに依存しない形式で提供します。

この章の内容は次のとおりです。

NIS の概要

システム管理者は、NIS を実行することにより、「マップ」と呼ばれる管理データベースをさまざまなサーバー (「マスター」と「スレーブ」) に分散させることができます。さらに、これらの管理データベースを一元管理により自動的かつ確実な方法で更新できるため、どのクライアントもネットワーク全体を通して一貫した方法で同じネームサービス情報を共有できます。

NIS は DNS から独立して開発されたため、その焦点は少し異なっています。DNS は数値 IP アドレスの代わりにマシン名を使うことによって、通信を簡略化することに焦点を当てているのに対して、NIS の場合は、多様なネットワーク情報を集中管理することによりネットワーク管理機能を高めることに焦点を絞っています。NIS には、マシン名とアドレスだけでなく、ユーザー、ネットワークそのもの、ネットワークサービスについての情報も格納されます。このようなネットワーク「情報」の集まりを NIS の「名前空間」と呼びます。


注 –

「マシン」名の代わりに「ホスト」名が使われることがあります。この解説では「マシン」名が使われていますが、一部の画面メッセージまたは NIS マップ名では「ホスト」名または「マシン」名が使われています。


NIS アーキテクチャー

NIS はクライアントサーバー方式を使用します。NIS サーバーが NIS のクライアントへサービスを提供します。主サーバーは「マスター」サーバーと呼ばれ、信頼性を保証するためにバックアップつまり「スレーブ」サーバーを持っています。マスターサーバーとスレーブサーバーは、NIS の情報検索ソフトウェアを使い、NIS のマップを格納します。

NIS はドメインを使用して、マシン、ユーザー、およびネットワークをその名前空間に配置します。しかし、ドメイン階層を使用しないため、NIS の名前空間はフラットになっています。

この図は、階層構造が確認されていない 192.44.0.0 を示しています。

したがって、上記のような物理ネットワークは、次のように 1 つの NIS ドメインに配置されます。

この図は、一層のNIS 名前空間に配置された 192.44.0.0 を示しています。

NIS だけを使っても、NIS ドメインをインターネットに直接接続することはできません。ただし、NIS を使用してインターネットへも接続したいと希望する組織では、NIS と DNS を組み合せることができます。その場合、NIS を使用してすべてのローカル情報を管理し、DNS を使用してインターネットのホストを検索できます。NIS は、NIS マップで情報が見つからない場合にホスト検索の機能を DNS へ転送する転送サービス機能を持っています。Solaris システムでは、ホスト検索要求を DNS だけに転送する、DNS で情報が見つからなければ次に NIS に転送する、あるいは NIS で情報が見つからなければ次に DNS に転送する、という切り替えも nsswitch.conf ファイルで設定できます。詳細については、第 2 章ネームサービススイッチ (概要)を参照してください。

NIS マシンのタイプ

NIS マシンには、次の 3 つのタイプがあります。

NIS クライアントにはどのマシンでもなれますが、NIS サーバー (マスターまたはスレーブ) となるのはディスクが装備されているマシンだけです。一般にサーバーは、多くの場合はそのサーバー自身のクライアントでもあります。

NIS サーバー

NIS サーバーは、FNS ファイルサーバーと同じマシンである必要はありません。

NIS サーバーには、マスターサーバーとスレーブサーバーの 2 つの種類があります。マスターサーバーとして指定されているマシンには、NIS 管理者が必要に応じて作成、更新する一群のマップが保存されます。各 NIS ドメインには、マスターサーバーが 1 つだけ存在している必要があります。マスターサーバーは、パフォーマンスの低下を最小限に抑えながら NIS の更新をスレーブサーバーに伝播できます。

ドメインに別の NIS サーバーをスレーブサーバーとして指定できます。各スレーブサーバーには、マスターサーバーの NIS マップセットの完全なコピーが存在します。マスターサーバーの NIS マップが更新されると、必ずこれらの更新がスレーブサーバーに伝播されます。スレーブサーバーは、マスターサーバーからの要求のオーバーフローに対処して、「サーバー使用不可」エラーを最小限に抑えることができます。

通常、システム管理者はすべての NIS マップに対してマスターサーバーを 1 つ指定します。ただし、各 NIS マップ内ではマスターサーバーのマシン名が符合化されているので、異なる複数のマップに対して異なる複数のサーバーを、マスターサーバーやスレーブサーバーとして動作するように指定することもできます。管理の複雑さを最小限に抑えるには、1 つのドメイン内で作成されるすべてのマップに対して、マスターサーバーを 1 つだけ指定します。この章の例では、1 つのサーバーがドメイン内のすべてのマップのマスターサーバーとなっています。

NIS クライアント

NIS クライアントでは、サーバー上のマップのデータを要求するプロセスが動作します。各 NIS サーバーに保存されている情報は同じであるはずなので、クライアントではマスターサーバーとスレーブサーバーの区別は行われません。


注 –

Solaris オペレーティングシステムは、NIS クライアントとネイティブな LDAP クライアントが同一のクライアントマシン上に共存する構成をサポートしません。


NIS の要素

NIS ネームサービスは、次の要素から構成されています。

NIS ドメイン

NIS「ドメイン」は、共通の NIS マップセットを共有しているマシンの集合です。各ドメインにはドメイン名が指定されており、共通の NIS マップセットを共有している各マシンがそのドメインに属しています。

どのマシンも指定されたドメインに属することができます。ただしこれは、そのドメインのマップに対するサーバーが同一ネットワーク上に存在する場合に限ります。NIS クライアントマシンは、ブートプロセス中にドメイン名を取得して、NIS サーバーにバインドします。

NIS デーモン

NIS サービスは、表 4–1 に示す 5 つのデーモンで提供されます。NIS サービスはサービス管理機能によって管理されます。このサービスに関する有効化、無効化、再起動などの管理アクションは svcadm コマンドを使用して実行できます。SMF の概要については、『Solaris のシステム管理 (基本編)』の第 18 章「サービスの管理 (概要)」を参照してください。また、詳細については、svcadm(1M) および svcs(1) のマニュアルページを参照してください。

表 4–1 NIS デーモン

デーモン 

機能 

ypserv

サーバープロセス 

ypbind

バインドプロセス 

ypxfrd

高速マップ転送 

rpc.yppasswdd

NIS パスワード更新デーモン 

** 下の注を参照 ** 

rpc.ypupdated

ほかのマップ (publickey など) を更新する


注 –

rpc.yppasswdd は、r で始まるすべてのシェルを制限付きとみなします。たとえば、/bin/rksh で作業しているユーザーはそのシェルを別のシェルに変更できません。r で始まるシェルを持っているが、そのような制約を受けたくない場合は、第 7 章NIS のトラブルシューティングの対処方法を参照してください。


NIS ユーティリティー

NIS サービスは、表 4–2 に示す 9 つのユーティリティーでサポートされています。

表 4–2 NIS ユーティリティー

ユーティリティー 

機能 

makedbm

NIS マップの dbm ファイルを作成します

ypcat

マップのデータを一覧表示します 

ypinit

NIS データベースの作成、インストール、および NIS クライアントの ypservers リストの初期化を行います

ypmatch

マップの特定エントリを検索します 

yppoll

サーバーからマップ順序番号を取得します 

yppush

データを NIS マスターサーバーから NIS スレーブサーバーに伝播します 

ypset

特定サーバーにバインドを設定します 

ypwhich

NIS サーバー名およびニックネーム変換テーブルを表示します 

ypxfr

NIS マスターサーバーから NIS スレーブサーバーにデータを転送します 

NIS のマップ

NIS マップの情報は、ndbm フォーマットで保存されます。マップファイルのフォーマットについては、ypfiles(4)ndbm(3C) のマニュアルページで説明しています。

NIS マップは、UNIX の /etc ファイルおよびほかの構成ファイルを置換するように設計されているので、名前およびアドレスよりはるかに多くの情報を保存できます。NIS が動作しているネットワーク上では、各 NIS ドメインの NIS マスターサーバーは、照会されるドメイン内のほかのマシンの NIS マップセットを保持します。NIS スレーブサーバーは、NIS マスターサーバーのマップのコピーを保持します。NIS クライアントマシンは、マスターサーバーまたはスレーブサーバーから名前空間情報を取得できます。

NIS マップは、本質的には 2 つの列からなるテーブルです。1 つの列は「キー」であり、もう 1 つの列はキーに関連する情報です。NIS は、キーを検索してクライアントに関する情報を見つけます。各マップでは異なるキーが使われるので、一部の情報はいくつかのマップに保存されます。たとえば、マシン名とアドレスは、 hosts.byname および hosts.byaddr という 2 つのマップに保存されます。サーバーがマシンの名前を持っており、そのマシンのアドレスを見つける必要がある場合は、サーバーは hosts.byname マップを調べます。サーバーがマシンのアドレスを持っており、そのマシンの名前を見つける必要がある場合は、サーバーは hosts.byaddr マップを調べます。

NIS Makefile は、インストール時に NIS サーバーとして指定されたマシンの /var/yp ディレクトリに保存されます。このディレクトリで make を実行すると、makedbm が入力ファイルからデフォルトの NIS マップを作成または更新します。


注 –

マップは必ずマスターサーバー上で作成してください。スレーブサーバーで作成したマップはマスターサーバーに自動的に格納されません。


デフォルトの NIS マップ

Solaris システムには、NIS マップのデフォルトセットが提供されています。システム管理者は、これらのマップをすべて使用することも一部だけを使用することもできます。また、ほかのソフトウェア製品のインストール時にシステム管理者が作成または追加したマップもすべて NIS で使用できます。

NIS ドメインのデフォルトのマップは、各サーバーの /var/yp/domainname ディレクトリに入っています。たとえば、test.com ドメインに属しているマップは、各サーバーの /var/yp/test.com ディレクトリにあります。

表 4–3 には、デフォルトの NIS マップ、これらの NIS マップに存在する情報、および NIS 動作時にソフトウェアが対応する管理ファイルを調べているか否かが示されています。

表 4–3 NIS マップに関する説明

マップ名 

対応する NIS 管理ファイル 

説明 

audit_user

audit_user

ユーザー監査の事前選択データを含みます。 

auth_attr

auth_attr

承認名と説明を含みます。 

bootparams

bootparams

ブート時にクライアントが必要とするファイルのパス名 (ルート、スワップ、その他) を含みます。 

ethers.byaddr

ethers

マシン名と Ethernet アドレスを含みます。Ethernet アドレスはマップ内のキーです。 

ethers.byname

ethers

ethers.byaddr と同じです。ただしキーは、Ethernet アドレスではなくマシン名です。

exec_attr

exec_attr

プロファイルの実行属性を含みます。 

group.bygid

group

グループセキュリティー情報を含みます。キーはグループ ID です。 

group.byname

group

グループセキュリティー情報を含みます。キーはグループ名です。 

hosts.byaddr

hosts

マシン名と IP アドレスを含みます。キーは IP アドレスです。 

hosts.byname

hosts

マシン名と IP アドレスを含みます。キーはマシン (ホスト) 名です。 

mail.aliases

aliases

エイリアスとメールアドレスを含みます。キーはエイリアスです。 

mail.byaddr

aliases

メールアドレスとエイリアスを含みます。キーはメールアドレスです。 

netgroup.byhost

netgroup

グループ名、ユーザー名、マシン名を含みます。キーはマシン名です。 

netgroup.byuser

netgroup

netgroup.byhost と同じです。ただし、キーはユーザー名です。

netgroup

netgroup

netgroup.byhost と同じです。ただし、キーはグループ名です。

netid.byname

passwd, hosts

group

UNIX スタイルの認証に使用されます。マシン名とメールアドレスを含みます (ドメイン名も含む)。netid ファイルがある場合には、ほかのファイルを使用して利用できるデータのほかにそれが参照されます。

netmasks.byaddr

netmasks

IP 送出時に使用するネットワークマスクを含みます。キーはアドレスです。 

networks.byaddr

networks

システムに認識されているネットワーク名、および IP アドレスを含みます。キーは IP アドレスです。 

networks.byname

networks

networks.byaddr と同じです。ただし、キーはネットワーク名です。

passwd.adjunct.byname

passwdshadow

C2 クライアント用の監査情報と隠蔽されたパスワード情報を含みます。 

passwd.byname

passwdshadow

パスワード情報を含みます。キーはユーザー名です。 

passwd.byuid

passwdshadow

passwd.byname と同じです。ただし、キーはユーザー ID です。

prof_attr

prof_attr

実行プロファイルの属性を含みます。 

protocols.byname

protocols

システムに認識されているネットワークプロトコルを含みます。 

protocols.bynumber

protocols

protocols.byname と同じです。ただし、キーはプロトコル番号です。

rpc.bynumber

rpc

システムに認識されている RPC のプログラム番号と名前を含みます。キーは RPC のプログラム番号です。 

services.byname

services

ネットワークに認識されているインターネットサービスを一覧表示します。キーはポートまたはプロトコルです。 

services.byservice

services

ネットワークに認識されているインターネットサービスを一覧表示します。キーはサービス名です。 

user_attr

user_attr

ユーザーと役割に関する拡張属性を含みます。 

ypservers

なし 

ネットワークに認識されている NIS サーバーを一覧表示します。 

新しい ipnodes マップ (ipnodes.byaddr および ipnodes.byname) が、NIS に追加されました。このマップには、IPv4 アドレスと IPv6 アドレスの両方が格納されます。


注 –

Solaris 10 8/07 リリース以降、Solaris OS には 2 つの別個の hosts ファイルは存在しません。/etc/inet/hosts ファイルが唯一の hosts ファイルであり、この中に IPv4 と IPv6 の両方のエントリが含まれます。常に同期させる必要がある 2 つの hosts ファイル内の IPv4 エントリを維持管理する必要はありません。/etc/inet/ipnodes ファイルは、下位互換性のために、/etc/inet/hosts ファイルへの同名のシンボリックリンクに置き換えられています。

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

NIS クライアントとサーバーは、IPv4 または IPv6 のどちらかの RPC トランスポートを使用して通信することができます。


ageing.byname マッピングには、yppasswdd によって使用される情報が含まれています。NIS から LDAP への移行時に、DIT とのパスワード有効期限情報の読み取りおよび書き込みのために使用されます。パスワードの有効期限を使用しない場合は、この情報をマッピングファイルからコメントアウトします。NIS から LDAP への移行の詳細については、第 15 章NIS から LDAP への移行 (概要と手順)を参照してください。

NIS マップの使用

NIS を使うと、/etc ファイルシステムを使った場合に比べ、ネットワークデータベースの更新がはるかに簡単になります。/etc ファイルシステムではネットワーク環境を更新するたびに各マシンの管理 /etc ファイルを変更する必要がありましたが、NIS ではこのような操作を行う必要はありません。

たとえば、NIS が動作しているネットワークに新しいマシンを追加する場合に必要なのは、マスターサーバーの入力ファイルを更新し、make を実行することだけです。これで、hosts.byname および hosts.byaddr マップが自動的に更新されます。次に、これらのマップはすべてのスレーブサーバーに転送され、ドメインのすべてのクライアントマシン、およびこれらのクライアントマシンのプログラムはこれらのマップを使用することが可能になります。クライアントマシンまたはアプリケーションがマシン名またはアドレスを要求すると、NIS サーバーは必要に応じて hosts.byname または hosts.byaddr マップを参照し、要求された情報をクライアントに送信します。

ypcat コマンドを使うと、マップの値を表示できます。ypcat の基本的な使用形式は、次のとおりです。


% ypcat mapname

mapname は、調べたいマップ名またはその「ニックネーム」です。ypservers の場合のようにマップがキーだけで構成されている場合は、ypcat -k と入力してください。ypcat -k と入力しない場合は、空白行が出力されます。ypcat のほかのオプションについては、ypcat(1) のマニュアルページに説明されています。

ypwhich コマンドを使うと、どのサーバーが特定のマップのマスターサーバーなのかを判定できます。次のように入力します。


% ypwhich -m mapname

mapname は、検索するマスターサーバーのマップ名またはニックネームです。mapname を入力すると、マスターサーバー名が表示されます。詳細については、ypwhich(1) のマニュアルページを参照してください。

NIS マップのニックネーム

「ニックネーム」は、マップのフルネームのエイリアスです。使用可能なマップのニックネーム (たとえば、passwd.byname の場合は passwd) を一覧表示するには、ypcat -x または ypwhich -x と入力してください。

ニックネームは、/var/yp/nicknames ファイルに保存されています。このファイルには、マップの完全指定名のあとに、マップのニックネームが空白で区切られて含まれています。ニックネームのリストは、追加または更新できます。ニックネーム数は現在、500 に制限されています。

NIS 関連コマンド

NIS サービスには、特殊なデーモン、システムプログラム、コマンドが含まれています。これらのコマンドについては次の表にまとめてあります。

表 4–4 NIS コマンドについてのまとめ

コマンド 

説明 

ypserv

NIS クライアントが要求する NIS マップの情報を提供します。ypserv は、完全なマップセットを備えた NIS サーバー上で動作するデーモンです。NIS サービスが機能するには、少なくとも 1 つの ypserv デーモンがネットワークに存在する必要があります。

ypbind

クライアントに NIS サーバーバインド情報を提供します。ypbind は、要求元クライアントのドメイン内のマップにサービスを提供する ypserv プロセスを見つけてバインドを行います。ypbind はすべてのサーバーとクライアント上で実行される必要があります。

ypinit

自動的に入力ファイルから NIS サーバーのマップを作成します。ypinit はまた、クライアント上に /var/yp/binding/ domain/ypservers 初期ファイルを作成する際にも使用されます。NIS マスターサーバーおよび NIS スレーブサーバーを初めて設定する場合は、ypinit を使用します。

make

Makefile を読み込むことで NIS マップを更新します (make を /var/yp ディレクトリで実行した場合)。make を使うと、入力ファイルに基づいてすべてのマップを更新したり、個々のマップを更新したりできます。NIS の make の機能については、ypmake(1M) のマニュアルページに説明されています。

makedbm

makedbm は入力ファイルを取得し、これを dbm.dir および dbm.pag ファイルに変換します (これらのファイルは、NIS がマップとして使用できる有効な dbm ファイル)。また、makedbm -u と入力すると、マップを分解できるため、システム管理者はマップを構成するキーと値のペアを参照できます。

ypxfr

NIS 自体を転送媒体として使い、NIS マップを遠隔サーバーから /var/yp/domain ローカルディレクトリに取り込みます。システム管理者は ypxfr を対話形式で実行したり、crontab ファイルから定期的に実行したりできます。また、ypxfr が ypserv によって呼び出されると、転送が開始されます。

ypxfrd

ypxfr 要求 (一般にスレーブサーバーで発生する) に対してマップ転送サービスを提供します。ypxfr は、マスターサーバー上でだけ動作します。

yppush

NIS マップの新バージョンを NIS マスターサーバーからそのスレーブサーバーにコピーします。yppush の実行は、NIS マスターサーバー上で行います。 

ypset

指定された NIS サーバーにバインドするように ypbind プロセスに要求します。ypset は、セキュリティーの関係上、通常のオペレーションで気軽に使用できるようには設計されていません。したがって、ypset はできる限り使用しないでください。ypbind プロセスの ypset および ypsetme オプションについては、ypset(1M)ypbind(1M) のマニュアルページを参照してください。

yppoll

指定されたサーバー上で NIS マップのどのバージョンが動作しているかを通知します。yppoll はまた、NIS マップのマスターサーバーを一覧表示します。 

ypcat

NIS マップの内容を表示します。 

ypmatch

NIS マップ内の指定された 1 つ以上のキーの値を出力します。システム管理者は、NIS サーバーマップのバージョンを指定することはできません。 

ypwhich

クライアントが現在どの NIS サーバーを使用して NIS サービスを取得しているかを表示します。また、-m mapname オプションを指定してこのコマンドを起動した場合は、どの NIS サーバーが各マップのマスターサーバーであるかが表示されます。-m だけを指定した場合は、使用可能なすべてのマップ名、およびこれらのマップのマスターサーバーが表示されます。

NIS のバインド

NIS クライアントは、バインドプロセスにより NIS サーバーから情報を取得します。バインドプロセスは、サーバーリストおよび同報通信という 2 つのモードのどちらかで動作できます。

サーバーリストモード

サーバーリストモードでは、バインドプロセスは次のように動作します。

  1. NIS マップで提供された情報を必要とする、NIS クライアントマシン上で動作しているプログラムが、ypbind にサーバー名を要求します。

  2. ypbind が、/var/yp/binding/domainname/ypservers ファイルを調べてドメインの NIS サーバーリストを見つけます。

  3. ypbind が、NIS サーバーリストの先頭サーバーへのバインドを開始します。先頭サーバーが応答しない場合、ypbind はサーバーが見つかるまで、あるいは NIS サーバーリストの最後に達するまで、2 番目以降のサーバーへのバインドを順に試みます。

  4. ypbind が、どのサーバーにアクセスすべきかをクライアントプロセスに通知します。次に、クライアントプロセスが直接、サーバーに要求を送信します。

  5. NIS サーバー上の ypserv デーモンが、該当するマップを調べて要求を処理します。

  6. ypserv デーモンが、要求された情報をクライアントに送り返します。

同報通信モード

同報通信モードでは、バインドプロセスは次のように動作します。

  1. 同報通信オプション (broadcast) が設定されている状態で ypbind を起動する必要があります。

  2. ypbind が、RPC 同報通信を送出して NIS サーバーを探索します。


    注 –

    このようなクライアントをサポートするには、NIS サービスを要求している各サブネット上に 1 つの NIS サーバーが存在する必要があります。


  3. ypbind が、同報通信に応答する先頭サーバーへのバインドを開始します。

  4. ypbind が、どのサーバーにアクセスすべきかをクライアントプロセスに通知します。次に、クライアントプロセスが直接、サーバーに要求を送信します。

  5. NIS サーバー上の ypserv デーモンが、該当するマップを調べて要求を処理します。

  6. ypserv デーモンが、要求された情報をクライアントに送り返します。

通常、いったんクライアントがサーバーにバインドされると、何らかの原因でバインドが解除されるまではクライアントはサーバーにバインドされたままになります。たとえば、サーバーがサービスを提供できなくなると、このサーバーがサービスを提供していたクライアントは、新しいサーバーにバインドされます。

どの NIS サーバーが現在、特定クライアントにサービスを提供しているかを調べる場合は、次のコマンドを入力してください。

%ypwhich machinename

machinename は、クライアント名です。マシン名が指定されていない場合は、ypwhich はデフォルトとしてローカルマシン (コマンドが実行されるマシン) を使用します。