ここでは、NIS ネームサービスの概要、および Solaris オペレーティング環境での NIS の設定、管理、障害追跡について説明します。
この章では、ネットワーク情報サービス (NIS) の概要を説明します。
NIS とは分散型ネームサービスであり、ネットワーク上のオブジェクトおよびリソースを識別し、探索するメカニズムです。NIS は、ネットワーク全体の情報に関する一様な記憶領域と検索方法を、トランスポートプロトコルやメディアに依存しない形式で提供します。
この章の内容は次のとおりです。
システム管理者は、NIS を実行することにより、「マップ」 と呼ばれる管理データベースをさまざまなサーバー (「マスター」と「スレーブ」) に分散させることができます。 さらに、これらの管理データベースを一元管理により自動的かつ確実な方法で更新できるため、どのクライアントもネットワーク全体を通して一貫した方法で同じネームサービス情報を共有できます。
NIS は DNS とは別に開発されたため、その目的もやや異なっています。DNS が数値 IP アドレスの代わりにマシン名を使うことによって、通信を簡略化することに焦点を当てているのに対して、NIS は、多様なネットワーク情報を集中管理することによりネットワーク管理機能を高めることに焦点を当てています。NIS には、マシン名とアドレスだけでなく、ユーザー、ネットワークそのもの、ネットワークサービスについての情報も格納されます。このようなネットワーク「情報」の集まりを NIS の「名前空間」と呼びます。
「マシン」名の代わりに「ホスト」名が使われることがあります。この解説では「マシン」名が使われていますが、一部の画面メッセージまたは NIS マップ名では「ホスト」名または「マシン」名が使われています。
NIS はクライアントサーバー方式を使用します。NIS サーバーが NIS のクライアントへサービスを提供します。主サーバーは「マスター」サーバーと呼ばれ、信頼性を保証するためにバックアップつまり「スレーブ」サーバーを持っています。マスターサーバーとスレーブサーバーは、NIS の情報検索ソフトウェアを使い、NIS のマップを格納します。
NIS はドメインを使用して、マシン、ユーザー、およびネットワークを自分の名前空間に配置します。しかし、ドメイン階層を使用しないため、NIS の名前空間はフラットになっています。
したがって、上記のような物理ネットワークは、次のように 1 つの NIS ドメインに配置されます。
NIS だけを使っても、NIS ドメインをインターネットに直接接続することはできません。ただし、NIS を使用してインターネットへも接続したいと希望する組織では、NIS と DNS を組み合せることができます。その場合、NIS を使用してすべてのローカル情報を管理し、DNS を使用してインターネットのホストを検索できます。NIS は、NIS マップで情報が見つからない場合にホスト検索の機能を DNS へ転送する転送サービス機能を持っています。Solaris オペレーティング環境では、ホスト検索要求を DNS だけに転送する、DNS で情報が見つからなければ次に NIS に転送する、あるいは NIS で情報が見つからなければ次に DNS に転送する、という切り替えも nsswitch.conf ファイルで設定できます。 詳細については、第 2 章「ネームサービススイッチ (概要)」を参照してください。
NIS マシンには、次の 3 つのタイプがあります。
マスターサーバー
スレーブサーバー
NIS サーバーのクライアント
NIS クライアントにはどのマシンでもなれますが、NIS サーバー (マスターまたはスレーブ) となるのはディスクが装備されているマシンだけです。一般にサーバーは、多くの場合はそのサーバー自身のクライアントでもあります。
NIS サーバーは、FNS ファイルサーバーと同じマシンである必要はありません。
NIS サーバーには、マスターサーバーとスレーブサーバーがあり、マスターサーバーとして指定されているマシンには、NIS 管理者が必要に応じて作成、更新する一群のマップが保存されます。各 NIS ドメインには、マスターサーバーが 1 つだけ存在している必要があります。マスターサーバーは、パフォーマンスの低下を最小限に抑えながら NIS の更新をスレーブサーバーに伝播できます。
システム管理者は、ドメインに別の NIS サーバーをスレーブサーバーとして指定できます。各スレーブサーバーには、マスターサーバーの NIS マップセットの完全なコピーが存在します。マスターサーバーの NIS マップが更新されると、必ずこれらの更新がスレーブサーバーに伝播されます。スレーブサーバーは、マスターサーバーからの要求のオーバーフローに対処して、「サーバー使用不可」エラーを最小限に抑えることができます。
通常、システム管理者はすべての NIS マップに対してマスターサーバーを 1 つ指定します。 ただし、各 NIS マップ内ではマスターサーバーのマシン名が符合化されているので、異なる複数のマップに対して異なる複数のサーバーを、マスターサーバーやスレーブサーバーとして動作するように指定することもできます。管理の複雑さを最小限に抑えるには、1 つのドメイン内で作成されるすべてのマップに対して、マスターサーバーを 1 つだけ指定します。 この章の例では、1 つのサーバーがドメイン内のすべてのマップのマスターサーバーとなっています。
NIS クライアントでは、サーバー上のマップのデータを要求するプロセスが動作します。各 NIS サーバーに保存されている情報は同じであるはずなので、クライアントではマスターサーバーとスレーブサーバーの区別は行われません。
NIS ネームサービスは、次の要素から構成されています。
ドメイン (NIS ドメインを参照)
マップ (NIS マップを参照)
デーモン (NIS デーモンを参照)
ユーティリティ (NIS ユーティリティを参照)
NIS コマンドセット (NIS 関連コマンドを参照)
NIS「ドメイン」は、共通の NIS マップセットを共有しているマシンの集合です。各ドメインにはドメイン名が指定されており、共通の NIS マップセットを共有している各マシンがそのドメインに属しています。
どのマシンも指定されたドメインに属することができます。ただしこれは、そのドメインのマップに対するサーバーが同一ネットワーク上に存在する場合に限ります。NIS クライアントマシンは、ブートプロセス中にドメイン名を取得して、NIS サーバーにバインドします。
NIS サービスは、表 7–1 に示す 5 つのデーモンで提供されます。
表 7–1 NIS デーモン
デーモン |
機能 |
---|---|
ypserv |
サーバープロセス |
ypbind |
バインドプロセス |
ypxfr |
高速マップ転送 |
rpc.yppasswdd |
NIS パスワード更新デーモン ** 下の注を参照 ** |
rpc.ypupdated |
他のマップ (publickey など) を更新する |
rpc.yppasswdd は、r で始まるすべてのシェルを制限付きとみなします。 つまり、r で始まるシェルを持っているユーザーが制約を受けます。たとえば、/bin/rksh で作業しているユーザーはそのシェルを別のシェルに変更できません。 r で始まるシェルを持っているが、そのような制約を受けたくない場合は、第 10 章「NIS の障害追跡」の対処方法を参照してください。
NIS サービスは、表 7–2 に示す 9 つのユーティリティでサポートされています。
表 7–2 NIS ユーティリティ
ユーティリティ |
機能 |
---|---|
makedbm |
NIS マップの dbm ファイルを作成する |
ypcat |
マップのデータを一覧表示する |
ypinit |
NIS データベースの作成、インストール、および NIS クライアントの ypservers リストの初期化を行う |
ypmatch |
マップの特定エントリを検索する |
yppoll |
サーバーからマップ順序番号を取得する |
yppush |
データを NIS マスターサーバーから NIS スレーブサーバーに伝播する |
ypset |
特定サーバーにバインドを設定する |
ypwhich |
NIS サーバー名およびニックネーム変換テーブルを表示する |
ypxfr |
NIS マスターサーバーから NIS スレーブサーバーにデータを転送する |
NIS マップの情報は、ndbm フォーマットで保存されます。マップファイルのフォーマットについては、ypfiles(4) と ndbm(3C) のマニュアルページに説明されています。
NIS マップは、UNIX の /etc ファイルおよび他の構成ファイルを置換するように設計されているので、名前およびアドレスよりはるかに多くの情報を保存できます。NIS が動作しているネットワーク上では、各 NIS ドメインの NIS マスターサーバーは、照会されるドメイン内の他のマシンの NIS マップセットを保持します。NIS スレーブサーバーは、NIS マスターサーバーのマップのコピーを保持します。NIS クライアントマシンは、マスターサーバーまたはスレーブサーバーから名前空間情報を取得できます。
NIS マップは、本質的には「キー」およびキーに関する情報の 2 列からなるテーブルです。NIS は、キーを検索してクライアントに関する情報を見つけます。各マップでは異なるキーが使われるので、一部の情報はいくつかのマップに保存されます。たとえば、マシン名とアドレスは、hosts.byname と hosts.byaddr という 2 つのマップに保存されます。サーバーがマシンの名前を持っており、そのマシンのアドレスを見つける必要がある場合は、サーバーは hosts.byname マップを調べます。サーバーがマシンのアドレスを持っており、そのマシンの名前を見つける必要がある場合は、サーバーは hosts.byaddr マップを調べます。
NIS Makefile は、インストール時に NIS サーバーとして指定されたマシンの /var/yp ディレクトリに保存されます。このディレクトリで make を実行すると、makedbm が入力ファイルからデフォルトの NIS マップを作成または更新します。
マップは必ずマスターサーバー上で作成してください。スレーブサーバーで作成したマップはマスターサーバーに自動的に格納されません。
Solaris オペレーティング環境では、NIS マップのデフォルトセットが提供されます。 システム管理者は、これらのマップをすべて使用することも一部だけを使用することもできます。また、他のソフトウェア製品のインストール時にシステム管理者が作成または追加したマップもすべて NIS で使用できます。
NIS ドメインのデフォルトのマップは、各サーバーの /var/yp/domainname ディレクトリに入っています。たとえば、test.com ドメインに属しているマップは、各サーバーの /var/yp/test.com ディレクトリにあります。
表 7–3 には、デフォルトの NIS マップ、これらの NIS マップに存在する情報、および NIS 動作時にソフトウェアが対応する管理ファイルを調べているか否かが示されています。
表 7–3 NIS マップに関する説明
マップ名 |
対応する NIS 管理ファイル |
説明 |
---|---|---|
bootparams |
bootparams |
ブート時にクライアントが必要とするファイルのパス名 (ルート、スワップ、その他) を含む |
ethers.byaddr |
ethers |
マシン名と Ethernet アドレスを含む。Ethernet アドレスはマップ内のキー |
ethers.byname |
ethers |
ethers.byaddr と同じ。ただしキーは、Ethernet アドレスではなくマシン名 |
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 |
passwd と shadow |
C2 クライアント用の監査情報と隠蔽されたパスワード情報を含む |
passwd.byname |
passwd と shadow |
パスワード情報を含む。キーはユーザー名 |
passwd.byuid |
passwd と shadow |
passwd.byname と同じ。ただし、キーはユーザー ID |
protocols.byname |
protocols |
システムに認識されているネットワークプロトコルを含む |
protocols.bynumber |
protocols |
protocols.byname と同じ。ただし、キーはプロトコル番号 |
rpc.bynumber |
rpc |
システムに認識されている RPC のプログラム番号と名前を含む。キーは RPC のプログラム番号 |
services.byname |
services |
ネットワークに認識されているインターネットサービスを一覧表示する。キーはポートまたはプロトコル |
services.byservice |
services |
ネットワークに認識されているインターネットサービスを一覧表示する。キーはサービス名 |
ypservers |
なし |
ネットワークに認識されている NIS サーバーを一覧表示する |
新しい ipnodes マップ (ipnodes.byaddr および ipnodes.byname) が、NIS に追加されました。このマップには、IPv4 アドレスと IPv6 アドレスの両方が格納されます。 ipnodes(4) のマニュアルページを参照してください。 NIS クライアントとサーバーは、IPv4 または IPv6 のどちらかの RPC トランスポートを使用して通信することができます。
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) のマニュアルページを参照してください。
「ニックネーム」は、マップのフルネームの別名です。使用可能なマップのニックネーム (たとえば、passwd.byname の場合は passwd) を一覧表示するには、ypcat -x または ypwhich -x と入力してください。
ニックネームは、/var/yp/nicknames ファイルに保存されています。/var/yp/nicknames ファイルには、マップのニックネームとフルネームが 1 つの空白で区切られて入っています。ニックネームのリストは、追加または更新できます。ニックネーム数は現在、500 に制限されています。
NIS サービスには、特殊なデーモン、システムプログラム、コマンドが含まれています。これらのコマンドについては次の表にまとめてあります。
表 7–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 サーバーから情報を取得します。バインドプロセスは、サーバーリストおよび同報通信という 2 つのモードのどちらかで動作できます。
サーバーリストモード。サーバーリストモードでは ypbind プロセスは、/var/yp/binding/domain/ypservers リストでドメイン内のすべての NIS サーバー名を調べます。ypbindプロセスは、このファイルに存在するサーバーにだけバインドされます。このファイルは、ypinit -c を実行すると作成されます。
同報通信モード。ypbind プロセスはまた、RPC 同報通信を使ってバインドを開始できます。同報通信は、それ以上配信されない唯一のローカルサブネットイベントです。したがって、クライアントと同じサブネット上に少なくとも 1 つのサーバー (マスターまたはスレーブ) が存在しなければなりません。サーバーは、異なる複数のサブネット上に存在できます (マップはサブネット境界を超えて伝播されるため) 。サブネット環境での 1 つの一般的方法は、NIS サーバーとしてサブネットルーターを使用することです。この方法を使用すると、ドメインサーバーはどちらかのサブネットインタフェース上でクライアントにサービスを提供できます。
サーバーリストモードでは、バインドプロセスは次のように動作します。
NIS マップで提供された情報を必要とする、NIS クライアントマシン上で動作しているプログラムが、ypbind にサーバー名を要求します。
ypbind が、/var/yp/binding/domainname/ypservers ファイルを調べてドメインの NIS サーバーリストを見つけます。
ypbind が、NIS サーバーリストの先頭サーバーへのバインドを開始します。先頭サーバーが応答しない場合、ypbind はサーバーが見つかるまで、あるいは NIS サーバーリストの最後に達するまで、2 番目以降のサーバーへのバインドを順に試みます。
ypbind が、どのサーバーにアクセスすべきかをクライアントプロセスに通知します。次に、クライアントプロセスが直接、サーバーに要求を送信します。
ypserv デーモンが、要求された情報をクライアントに送り返します。
同報通信モードでは、バインドプロセスは次のように動作します。
ypbind が、RPC 同報通信を送出して NIS サーバーを探索します。
このようなクライアントをサポートするには、NIS サービスを要求している各サブネット上に 1 つの NIS サーバーが存在する必要があります。
ypbind が、同報通信に応答する先頭サーバーへのバインドを開始します。
ypbind が、どのサーバーにアクセスすべきかをクライアントプロセスに通知します。次に、クライアントプロセスが直接、サーバーに要求を送信します。
ypserv デーモンが、要求された情報をクライアントに送り返します。
通常、いったんクライアントがサーバーにバインドされると、何らかの原因でバインドが解除されるまではクライアントはサーバーにバインドされたままになります。たとえば、サーバーがサービスを提供できなくなると、このサーバーがサービスを提供していたクライアントは、新しいサーバーにバインドされます。
どの NIS サーバーが現在、特定クライアントにサービスを提供しているかを調べる場合は、次のコマンドを入力してください。
%ypwhich machinename
machinename は、クライアント名です。マシン名が指定されていない場合は、ypwhich はデフォルトとしてローカルマシン (コマンドが実行されるマシン) を使用します。
Solaris 9 の NIS の特徴は、次のとおりです。
NIS サービスは、2.6 より前の Solaris リリースには組み込まれていませんでした。NIS サービスは今までは、個別販売される NSKit からインストールしなければなりませんでした。現在、NIS サービスは Solaris 9 に組み込まれているため、Solaris 9 の NSKit はありません。
Solaris 2.6 以降のリリースには NIS サービスが組み込まれているので、SUNWnsktu および SUNWnsktr パッケージはもうありません。NIS のインストールは、NIS サーバークラスタ (SUNWypu および SUNWypr パッケージが含まれている) により行われています。
NIS サービスは現在、/etc/init.d/yp スクリプトでは起動されません。/etc/init.d/yp スクリプトは現在、存在していません。Solaris 9 では、まずマスターサーバーの NIS マップを ypinit スクリプトで作成し、次に ypstart で NIS を起動します。NIS サービスの停止には、ypstop コマンドを使用します。
ypupdated デーモンは、NSKit の 2.6 以前のバージョンには組み込まれていませんでしたが、Solaris 7 以降のリリース には組み込まれています。
/var/yp/securenets ファイルは、以前の NSKit リリースの場合と同様に、NIS サービスへのアクセスを制限するために使用されます。このファイルが存在する NIS サーバーでは、ファイルに収められている IP アドレスのマシンおよびネットワークに対してのみ、問い合わせに答えたり、マップを提供したりします。このファイルのフォーマットについては、securenets(4) のマニュアルページを参照してください。
securenets ファイルの例を次に示します。
255.255.255.10 192.168.0.1 host 13.13.14.1 host 13.13.14.2 |
上記において、255.255.255.10 はネットマスクで、13.13.13.255 はネットワークアドレスです。1 行目の設定では、ypserv はサブネットの 13.13.13.255 の範囲のこれらのアドレスにのみ応答します。
/var/yp/securenets ファイルのエントリを変更したときは、ypserv と ypxfrd のデーモンを終了させて再起動をする必要があります。
ypserv プロセスは、以前の NSKit リリースの場合と同様に、複数のネットワークアドレスを持つマシンをサポートします。マシンマップが作成されると、Makefile は、複数のアドレスを持つマシンのマップに YP_MULTI_HOSTNAME エントリを作成します。このエントリには、そのマシンのすべてのアドレスがリストされます。マシンアドレスが必要な場合は、このリストに存在するアドレスのなかで、希望するアドレスに最も近いアドレスを使用しようとします。詳細については、ypserv(1) のマニュアルページを参照してください。
希望するアドレスに最も近いアドレスの判断は算術的判断なので、アドレスの妥当性検査は行われません。たとえば、マルチホームマシンが 6 つの IP アドレスを持っているが、このマルチホームマシン上の 5 つのインタフェースだけが正常に動作していると仮定します。このマルチホームマシンに直接接続されていないネットワーク上のマシンは、ypserv からダウンインタフェースの IP アドレスを受け取ることができます。このように、この仮説上のクライアントはマルチホームマシンにアクセスできません。
マルチホームマシンのすべてのアドレスは通常、有効でなければなりません。特定のアドレスまたはマシンでサービスが提供できなくなる恐れがある場合は、そのアドレスまたはマシンは NIS マップから削除してください。
NIS は、パスワード構成ファイルを SunOS 4 (Solaris 1) パスワードフォーマットと Solaris 2 パスワードおよびシャドウファイルフォーマットの両方でサポートしています。
動作モードは、$PWDIR/shadow ファイルが存在するかどうかによって決定されます ($PWDIR
は、/var/yp/Makefile
ファイルに設定されている Makefile マクロセットです) 。shadow
ファイルが存在する場合、NIS は Solaris 2 モードで動作します。shadow ファイルが存在しない場合、NIS
は SunOS 4 モードで動作します。
SunOS 4 モードでは、すべてのパスワード情報が passwd ファイルに保存されています。Solaris 2 モードでは、パスワード情報は shadow ファイルに保存され、ユーザーアカウント情報は passwd ファイルに保存されます。
make マクロ PWDIR
が /etc ディレクトリに設定されている場合、Solaris 2 の passwd 処理要件の関係上、NIS
は Solaris 2 モードでしか動作できません。ただし、PWDIR
が /etc 以外のディレクトリに設定されている場合、ユーザーは passwd 構成ファイルを
SunOS 4 フォーマットでも Solaris 2 フォーマットでも保存できます。rpc.yppasswdd
デーモンはこれら両方のパスワードフォーマットを認識しますが、Solaris リリース 2 フォーマットを使用することをお勧めします。
この章では、ネットワーク情報サービス (NIS) の初期設定と構成について説明します。
「マシン」名の代わりに「ホスト」名が使われることがあります。この解説では「マシン」名が使われていますが、一部の画面メッセージや NIS マップ名では「ホスト」名または「マシン」名が使われています。
この章の内容は次のとおりです。
作業 |
参照先 |
---|---|
変換用のソースファイルを準備する | |
ypinit を使用してマスターサーバーを設定する | |
マスターサーバーで NIS を起動する | |
スレーブサーバーを設定する | |
NIS クライアントを設定する |
NIS の名前空間を構成する前に、次の操作を行う必要があります。
NIS を使用するすべてのマシンで、正しく構成された nsswitch.conf ファイルをインストールする。詳細については、第 2 章「ネームサービススイッチ (概要)」を参照してください。
NIS ドメインを設計する。次の節を参照してください。
NIS サーバーまたはクライアントとしてマシンを構成する前に、NIS ドメインを設計する必要があります。
まず、NIS ドメインに入れるマシンを決めます。NIS ドメインは、ネットワークと同一である必要はありません。ネットワークには複数の NIS ドメインが存在でき、NIS ドメインに属さないマシンもネットワーク上に存在できます。
次に、NIS ドメイン名を選択します。NIS ドメイン名には、最高 256 文字を指定できます。ドメイン名が 32 文字を超えないように制限するとよいでしょう。ドメイン名は大文字と小文字を区別します。便宜上、インターネットのドメイン名に基づいて NIS ドメイン名を指定することもできます。たとえば、インターネットのドメイン名が doc.com の場合、NISドメイン名も doc.com にすることができます。doc.com を 2 つの NIS ドメインに分けて、1 つを営業部門に、もう 1 つを製造部門に使用する場合は、一方を sales.doc.com とし、もう一方を manf.doc.com とできます。
NIS ドメイン名とマシン名を正しく設定しないと、マシンが NIS サービスを使用できるようになりません。マシン名はマシンの /etc/nodename ファイルによって設定され、マシンのドメイン名はマシンの /etc/defaultdomain ファイルによって設定されます。これらファイルはブート時に読み取られ、その内容はそれぞれ uname -S コマンドと domainname コマンドによって使用されます。ディスクレスマシンは、そのブートサーバーからこれらのファイルを読み取ります。
マスターサーバーになるマシンを 1 つ選択します。スレーブサーバーを作成する場合は、スレーブサーバー用のマシンを決定します。
NIS クライアントになるマシンを決定します。通常は、ドメイン内のすべてのマシンが NIS クライアントになるように設定されますが、これは必須ではありません。
ソースファイルは、マスターサーバーの /etc ディレクトリか、その他のディレクトリにあります。ソースファイルを /etc に入れることは望ましくありません。マップの内容がマスターサーバー上のローカルファイルの内容と同じになるからです。これは passwd ファイルと shadow ファイルに固有の問題です。ユーザー全員がマスターサーバーのマップにアクセスし、passwd マップを通じてすべての YP クライアントに root パスワードが渡されるためです。詳細については、passwd ファイルと名前空間のセキュリティを参照してください。
ただし、ソースファイルを他のディレクトリに入れた場合は、/var/yp 内の Makefile の DIR=/etc 行を DIR=/your-choice に変更する必要があります。your-choice はソースファイルを格納するためのディレクトリの名前です。これによって、サーバー上のローカルファイルをクライアント上のファイルのように扱うことができます。Makefile を編集する前に、編集前の Makefile のコピーを保存しておくことをお勧めします。
また、audit_user、auth_attr、exec_attr、prof_attr がデフォルト以外のディレクトリから取り出される場合は、RBACDIR=/etc/security を RBACDIR=your-choice に変更します。your-choice は取り出し元のディレクトリの名前です。
passwd マップは特殊なケースです。この NIS 実装では、NIS パスワードマップを作成するための入力として、Solaris 1 の passwd ファイルのフォーマットに加え、Solaris 7 の /etc/passwd ファイルと /etc/shadow ファイルのフォーマットも使用できます。
セキュリティ上の理由から未承認の root アクセスを防ぐために、NIS のパスワードマップの構築に使用されるファイルには root のエントリを含めないでください。このため、パスワードマップはマスターサーバーの /etc ディレクトリに置かれたファイルから構築しないでください。パスワードマップの構築に使用されるパスワードファイルは、root エントリが削除された上、未承認のアクセスから保護されるディレクトリに置かれている必要があります。
たとえば、マスターサーバーのパスワード入力ファイルは、ファイル自体が別のファイルへのリンクではなく、ファイルの場所が Makefile に指定されている限り、/var/yp/ などのディレクトリに格納されているか、選択したディレクトリに格納されている必要があります。/usr/lib/netsvc/yp/ypstart スクリプトは、Makefile に指定された構成に従って適切なディレクトリオプションを自動的に設定します。
PWDIR
によってディレクトリ内に指定された passwd ファイルに root のエントリが含まれないようにしてください。
ソースファイルが /etc 以外のディレクトリにある場合は、Makefile の PWDIR
パスワードマクロが、passwd ファイルと shadow ファイルが入っているディレクトリを参照するように変更します。この操作を行うには、PWDIR=/etc 行を PWDIR=/your-choice に変更します。your-choice は、passwd マップソースファイルを格納するのに使用するディレクトリの名前です。
NIS マップへの変換用のソースファイルを準備します。
スーパーユーザーになります。
マスターサーバーのソースファイルをチェックして、それらのファイルが環境の最新の状態を反映しているかどうか確認します。
次のファイルを確認します。
auto.home または auto_home
auto.master または auto_master
bootparams
ethers
group
hosts
ipnodes
netgroup
netmasks
networks
passwd
protocols
rpc
services
shadow
user_attr
passwd ファイルを、選択した PWDIR ディレクトリにコピーします。
audit_user、auth_attr、exec_attr、prof_attr を、選択した RBACDIR ディレクトリにコピーします。
他の入力ファイルと異なり、/etc/mail/aliases ファイルは別のディレクトリに移動できません。このファイルは /etc/mail ディレクトリに格納されていなければなりません。ドメイン全体で利用するメールエイリアスがすべて /etc/mail/aliases ソースファイルに含まれていることを確認します。詳細については、aliases(4) のマニュアルページを参照してください。
ソースファイルからすべてのコメントと、その他の余計な行や情報を取り除きます。
これらの操作は、sed または awk の各スクリプトを通じて、またはテキストエディタを使用して行えます。Makefile はソースファイルから不要なエントリをある程度自動的に削除しますが、これらのファイルを手動で検証し、クリーンアップしてから実行することをお勧めします。
すべてのソースファイルのデータが正しい形式になっていることを確認します。
ソースファイルのデータは、それぞれのファイルに適した形式で格納されている必要があります。該当するマニュアルページを参照して、各ファイルが正しい形式になっていることを確認します。
ソースファイルをチェックしてソースファイルディレクトリにコピーしたら、NIS サービスが使用する ndbm 形式のマップにそのソースファイルを変換する必要があります。次のypinit を使用してマスターサーバーを設定するの節で説明しているように、この処理は、マスターサーバーで ypinit が実行されると自動的に行われます。
ypinit スクリプトはプログラム make を呼び出します。このプログラムは、/var/yp ディレクトリに置かれた Makefile を使用します。/var/yp ディレクトリにはデフォルトの Makefile が用意されており、この中にはソースファイルを要求された ndbm 形式のマップに変換するためのコマンドが入っています。
デフォルトの Makefile は、そのまま使用することも必要に応じて修正することもできます。デフォルトの Makefile を修正するときは、将来必要な場合に備えて、必ず最初に修正前の Makefile をコピーして保存するようにしてください。次に説明する Makefile への修正のうち、必要に応じて 1 つまたは複数を実行します。
「デフォルトではないマップ」
デフォルトではない自分専用のソースファイルを作成して NIS マップに変換する場合は、そのソースファイルを Makefile に追加する必要があります。
「DIR
の値」
ソースファイルディレクトリで説明しているように、/etc 以外のディレクトリに格納されたソースファイルを Makefile で使用する場合は、Makefile の DIR
の値を使用するディレクトリに変更する必要があります。この値を Makefile で変更するときは行をインデントしないでください。
「PWDIR
の値」
/etc 以外のディレクトリに格納された passwd、shadow、または adjunct の各ソースファイルを Makefile で使用する場合は、Makefile の PWDIR
の値を、使用するディレクトリに変更する必要があります。この値を Makefile で変更するときは行をインデントしないでください。
「ドメインネームリゾルバ」
現在のドメインにはないマシンに対して NIS サーバーがドメインネームリゾルバを使用するようにする場合は、Makefile の B= 行をコメントにし B= -b 行のコメントを解除します (有効にします) 。
Makefile は、all の下にリストされるデータベースのそれぞれに対して適切な NIS マップを作成します。データは makedbm で処理され、mapname.dir と mapname.pag の 2 つのファイルに保存されます。この両ファイルは、マスターサーバーの /var/yp/domainname ディレクトリに置かれます。
Makefile は必要に応じて、/PWDIR/passwd、/PWDIR/shadow、/PWDIR/security/passwd.adjunct の各ファイルから passwd マップを作成します。
ypinit スクリプトは、マスターサーバー、スレーブサーバー、クライアントが NIS を使用するように設定します。また最初に make を実行して、マスターサーバー上にマップを作成します。
ypinit を使用して新規に NIS マップセットをマスターサーバーに作成する場合は、次の手順に従います。
マスターサーバーでスーパーユーザーになります。
nsswitch.files ファイルの内容を nsswitch.conf ファイルにコピーします。
# cp /etc/nsswitch.files /etc/nsswitch.conf
/etc/hosts ファイルまたは /etc/inet/ipnodes ファイルを編集して、NIS サーバーのそれぞれの名前と IP アドレスを追加します。
新しいマップをマスターサーバーに作成します。
# /usr/sbin/ypinit -m
ypinit によって NIS スレーブサーバーになる他のマシンのリストを求めるプロンプトが表示されたら、作業中のサーバー名と NIS スレーブサーバー名を入力します。
致命的でないエラーが発生したときにすぐに処理を終了するか、引き続き処理を継続するかを ypinit が尋ねてきたら、y と入力します。
y を選択すると、ypinit は最初の問題が発生すると終了します。問題を解決して ypinit を再起動します。ypinit を初めて実行する場合はこの手順に従うようにしてください。処理を継続する場合は、発生する問題をすべて手動で解決してから ypinit を再起動します。
マップファイルの一部が存在しないと、致命的でないエラーが発生することがあります。これは NIS の機能に影響するエラーではありません。マップが自動的に作成されない場合は、必要に応じて手動で追加します。デフォルトの NIS マップの詳細については、デフォルトの NIS マップ を参照してください。
/var/yp/domainname ディレクトリ内の既存のファイルを破棄してもよいかどうか ypinit が尋ねてきます。
このメッセージは、NIS を以前に設定したことがある場合にだけ表示されます。
ypinit は、サーバーのリストを作成し終わると make を起動します。
このプログラムは、/var/yp に置かれた Makefile (デフォルトまたは修正されたもの) に含まれている命令を使用します。make コマンドは、指定したファイルにコメント行があればその行を取り除きます。また、指定したファイルに対して makedbm を実行して適切なマップを作成し、各マップにマスターサーバー名を設定します。
マスターサーバー上で domainname コマンドを実行すると返されるドメイン以外に対するマップの転送を Makefile で行う場合は、ypinit シェルスクリプトの中で make コマンドの変数 DOM
に適切なドメイン名を指定して起動すれば、マップを正しいドメインに転送することができます。次のように入力してください。
# make DOM=domainname password |
このコマンドによって、マスターサーバーが属するドメインではなく目的のドメインに password マップが転送されます。
次のように入力してネームサービスとして NIS を有効にします。
# cp /etc/nsswitch.nis /etc/nsswitch.conf
現在のスイッチファイルが、デフォルトの NIS 用スイッチファイルに置き換えられます。このファイルは必要に応じて編集可能です。
NIS マスターサーバーは通常、NIS ドメインだけをサポートします。ただし、マスターサーバーを使用して複数のドメインをサポートする場合は、前の節で説明したように、追加のドメイン用にサーバーを設定するときに手順を若干修正する必要があります。
サーバー上で domainname コマンドを実行します。このコマンドによって返されるドメイン名はサーバーのデフォルトドメインです。前の節で説明した手順は、このデフォルトドメインへのサービスを設定する場合は正しく機能します。他のドメインへのサービスを設定する場合は、ypinit シェルスクリプトを次のように修正する必要があります。
# make DOM=correct-domain passwd
correct-domain はサービスを設定している他のドメインの名前であり、passwd は make のターゲットです。このコマンドによって、マスターサーバーが属するドメインではなく目的のドメインに passwd マップが転送されます。
マスターサーバーのマップが作成されると、NIS デーモンをマスターサーバーで起動してサービスを開始できます。これを行うには、ypserv をサーバー上で起動して、ypbind を実行する必要があります。クライアントがサーバーの情報を要求すると、ypserv デーモンは NIS マップ内で検索してクライアントからの情報の要求に応答します。
サーバー上で NIS サービスを起動するには 2 つの方法があります。
ypinit を実行して NIS マスターサーバーを構成し終わると、マシンのブート時に ypstart が自動的に起動され、ypserve が開始されます。ypinit を使用してマスターサーバーを設定するを参照してください。
NIS サービスをコマンド行から開始する場合は、ypstart スクリプトを実行します。
# /usr/lib/netsvc/yp/ypstart
起動後に ypserv が呼び出しに応答できるようになるまでに若干の遅延があります。プログラムまたはスクリプトの内部から呼び出す場合は、ypstart の実行後に 3 - 5 秒間スリープ状態にしてください。
NIS サービスを停止する場合は、ypstop スクリプトを実行します。
# /usr/lib/netsvc/yp/ypstop
ネットワークは 1 つ以上のスレーブサーバーを持つことができます。スレーブサーバーを持つことで、マスターサーバーが利用できない場合にも NIS サービスを継続して利用できます。
ypinit を実際に実行してスレーブサーバーを作成する前に、domainname コマンドを NIS スレーブサーバーごとに実行してドメイン名がマスターサーバーと一致していることを確認します。
ドメイン名は大文字と小文字を区別します。
ネットワークが正しく機能していることを確認してから、NIS スレーブサーバーを構成してください。特に、rcp を使用して NIS マスターサーバーから NIS スレーブサーバーにファイルを送れるかどうかを確認してください。
次の手順はスレーブサーバーの設定方法を示しています。
スーパーユーザーになります。
スレーブサーバーで /etc/hosts ファイルまたは /etc/inet/ipnodes ファイルを編集して、他のすべての NIS サーバーの名前と IP アドレスを追加します。
スレーブサーバー上の /var/yp にディレクトリを変更します。
まず、新しいスレーブサーバーを NIS クライアントとして構成して、最初にマスターサーバーから NIS マップを入手できるようにします。詳細については、NIS クライアントの設定を参照してください。
次のように入力して、スレーブサーバーにするマシンをクライアントとして初期設定します。
# /usr/sbin/ypinit -c
ypinit コマンドによって、NIS サーバーのリストを求めるプロンプトが表示されます。作業中のローカルマシン (スレーブ) の名前を入力してからマスターサーバーを入力し、その後にドメイン内の他の NIS スレーブサーバーをネットワーク的に近いものから遠いものの順に入力します。
次のように入力して、ypbindが実行されているかどうか確認します。
# ps -ef | grep ypbind
リストが表示されたら、ypbind は実行されています。
ypbind が実行中である場合は停止します。
# /usr/lib/netsvc/yp/ypstop
次のように入力して ypbind を再起動します。
# /usr/lib/netsvc/yp/ypstart
次のように入力して、このマシンをスレーブサーバーとして初期設定します。
# /usr/sbin/ypinit -s master
master は、既存の NIS マスターサーバーのマシン名です。
この節で説明した手順を、NIS スレーブサーバーとして構成するマシンごとに繰り返します。
次の手順は、スレーブサーバーで NIS サービスを開始する方法を示しています。
スーパーユーザーになります。
既存の yp プロセスをすべて停止します。
# /usr/lib/netsvc/yp/ypstop
スレーブサーバーで ypserve を起動して、ypbind を実行します。
# /usr/lib/netsvc/yp/ypstart
この方法とは別に、スレーブサーバーをリブートしてデーモンを自動的に開始することもできます。
ネームサービスとして NIS を使用するようにマシンを設定するには、次の 2 つの方法があります。
「ypinit」。NIS を使用するようにクライアントマシンを設定する場合は、マシンに root としてログインして ypinit -c を実行する方法をお勧めします。
# ypinit —c
NIS サーバーを指定するように求められます。クライアントは NIS サーバーからネームサービス情報を得ます。必要な数だけマスターサーバーやスレーブサーバーを指定できます。指定するサーバーはドメイン内のどこにあってもかまいません。クライアントにネットワーク的に近いサーバーから遠いサーバーの順に指定することをお勧めします。
「ブロードキャスト方式」。NIS を使用するようにクライアントマシンを設定する旧式の方法です。マシンに root としてログインし、domainname コマンドでドメイン名を設定してから、ypbind を実行します。
# domainname doc.com
# ypbind -broadcast
ypbind を実行すると、NIS サーバーがローカルサブネットで検索されます。NIS サーバーが見つかると、ypbind はそのサーバーにバインドします。この検索を「ブロードキャスト」と呼びます。クライアントのローカルサブネットに NIS サーバーがない場合、ypbind によるバインドは失敗し、クライアントマシンは NIS サービスから名前空間データを入手することができません。
この章では、NIS の管理方法について説明します。内容は次のとおりです。
セキュリティの関係上、次の点に注意してください。
マスターサーバーの NIS マップへのアクセスは制限します。
未許可アクセスを防止するためには、NIS パスワードマップの作成に使用されたファイルに root エントリを含めないでください。したがって、root エントリをこのパスワードファイルから削除して、このパスワードファイルをマスターサーバーの /etc ディレクトリ以外のディレクトリにおく必要があります。このディレクトリへの未許可アクセスは、防止しなければなりません。
たとえば、マスターサーバーのパスワード入力ファイルは、別のファイルへのリンクではなく Makefile に指定されている限り、/var/yp/ などのディレクトリに存在するか選択されたディレクトリに存在します。/usr/lib/netsvc/yp/ypstart スクリプトは、Makefile に指定された構成に従って自動的に適切なディレクトリオプションを設定します。
この NIS 実装では、NIS パスワードマップを作成するための入力として、Solaris 1 バージョンの passwd ファイルのフォーマットに加え、Solaris 2 の passwd ファイルと shadow ファイルのフォーマットも使用できます。
この節では、ユーザーパスワードの設定、NIS ドメインへの新しいユーザーの追加、ネットグループ (netgroups) へのユーザーの割り当てについて説明します。
NIS マスターサーバーでスーパーユーザーになります。
useradd コマンドで新しいユーザーのログイン ID を作成します。
# useradd userID
userID は新しいユーザーのログイン ID です。このコマンドは、NIS マスターサーバー上の /etc/passwd ファイルと /etc/shadow ファイルにエントリを作成します。
新しいユーザーの初期パスワードを作成します。
新しいユーザーがログインするための初期パスワードを作成するには、passwd コマンドを実行します。
# passwd userID
userID は新しいユーザーのログイン ID です。このユーザーに割り当てるパスワードを入力するようにプロンプトが表示されます。
この手順が必要になるのは、useradd コマンドで作成されたパスワードエントリがロックされ、新しいユーザーがログインできないからです。初期パスワードを指定することで、このパスワードエントリのロックが解除されます。
必要に応じて、マスターサーバーの passwd マップ入力ファイルに新しいエントリをコピーします。
マスターサーバー上のマップソースファイルは、/etc 以外のディレクトリにあります。新しい行を /etc/passwd ファイルと /etc/shadow ファイルから マスターサーバー上の passwd マップ入力ファイルにコピーします。詳細については、パスワードファイルと名前空間のセキュリティを参照してください。
たとえば、新しいユーザー brown を追加する場合、/etc/passwd ファイルから passwd 入力ファイルにコピーする行は次のようになります。
brown:x:123:10:User brown:/home/brown:/bin/csh: |
/etc/shadow からコピーされる brown 行は次のようになります。
brown:W12345GkHic:6445:::::: |
パスワード入力ファイルが格納されているディレクトリが Makefile で正しく指定されていることを確認します。
必要に応じて、/etc/passwd ファイルと /etc/shadow ファイルから新しいユーザーのエントリを削除します。
セキュリティの関係上、NIS マスターサーバーの /etc/passwd ファイルと /etc/shadow ファイルでユーザーエントリを保持することは望ましくありません。他のディレクトリに存在する NIS マップソースファイルに新しいユーザーのエントリをコピーした後、マスターサーバー上で userdel コマンドを使用して新しいユーザーを削除します。
たとえば、マスターサーバーの /etc ファイルから新しいユーザー brown を削 除するには次のように入力します。
# userdel brown
マスターサーバー上の passwd 入力ファイルを更新した後、ソースファイルが存在するディレクトリで make を実行して passwd マップを更新します。
# userdel brown # cd /var/yp # /usr/ccs/bin/make passwd |
新しいユーザーのログイン ID に割り当てられた初期パスワードを新しいユーザーに通知します。
ログイン後、新しいユーザーはいつでも passwd を実行して別のパスワードに変更できます。
ユーザーは passwd を実行してパスワードを変更します。
% passwd username
username はユーザー名です。ユーザーがパスワードを変更する前に、NIS 管理者はマスターサーバー上で rpc.yppasswdd デーモンを起動してパスワードファイルを更新しなければなりません。rpc.yppasswdd デーモンを起動するコマンドは、/usr/lib/netsvc/yp/ypstart ファイルにすでに存在しています。
rpc.yppasswdd デーモンは、マスターサーバー上の ypstart で自動的に起動されます。rpc.yppasswdd に -m オプションが指定された場合は、ファイルが更新されるとすぐ /var/yp の make が実行されます。passwd ファイルが更新されるたびにこの make が実行されることを回避したい場合は、ypstart スクリプトの rpc.yppasswdd コマンドから -m オプションを削除して、crontab ファイルで passwd マップの転送を制御してください。
rpc.yppasswdd -m コマンドの後に引数を指定しないでください。別の動作のために ypstart スクリプトファイルを編集することは可能ですが、-m オプションを任意に削除すること以外の変更をこのファイルに加えることは望ましくありません。すべてのコマンドおよびデーモンは、適切なコマンド行パラメータのセットが存在するこのファイルで起動されます。このファイルを編集する場合は、rpc.yppasswdd コマンドの編集では特に注意してください。passwd.adjunct
ファイルに明示的コールを追加する場合は、パスを $PWDIR/security/passwd.adjunct
と正確に指定しなければなりません。正確に指定しない場合は、不適切な処理が行われます。
NIS ネットグループは、NIS 管理者が管理目的のために定義するユーザーまたはマシンのグループ (集合) です。たとえば、次のようなネットグループを作成できます。
特定マシンにアクセスできる一群のユーザーを定義するネットグループ
特定のファイルシステムにアクセスできる一群の NFS クライアントマシンを定義するネットグループ
特定の NIS ドメインのすべてのマシンに対して管理者権限を持つ一群のユーザーを定義するネットグループ
各ネットグループには 1 つのネットグループ名が与えられます。ネットグループはアクセス権を直接設定しません。代わりに、ユーザー名またはマシン名が一般に使用される場所ではネットグループ名が他の NIS マップで使用されます。たとえば、netadmins というネットワーク管理者ネットグループを作成したと仮定します。netadmins ネットグループのすべてのメンバーに特定マシンへのアクセス権を与えるには、そのマシンの /etc/passwd ファイルに netadmin エントリを追加するだけで、ネットグループ名を /etc/netgroup ファイルに追加して、NIS グループマップに追加することもできます。ネットグループの使い方の詳細については、netgroup(4) のマニュアルページを参照してください。
NIS が使用されているネットワーク上では、NIS マスターサーバー上の netgroup 入力ファイルを使用して、 netgroup、netgroup.byuser、netgroup.byhost という 3 つのファイルが生成されます。netgroup マップには、netgroup 入力ファイルの基本情報が入っています。他の 2 つの NIS マップには、マシンまたはユーザーが指定されるとネットグループ情報の検索が迅速に行われるフォーマットで情報が入っています。
netgroup 入力ファイルのエントリのフォーマットは、 name ID です。name はネットグループ名であり、ID は、ネットグループに属しているマシンまたはユーザーを示します。ネットグループの ID (メンバー) は、コンマで区切っていくつでも指定できます。たとえば、3 つのメンバーが存在するネットグループを作成する場合、netgroup 入力ファイルエントリのフォーマットは、 name ID、 ID、ID となります。netgroup 入力ファイルエントリのメンバーID のフォーマットは次のようになります。
([-|machine], [-|user], [domain]) |
machine はマシン名、user はユーザーID 、domain はマシンまたはユーザーの NIS ドメインです。「ドメイン」エレメントは任意指定ですが、他の NIS ドメインのマシンまたはユーザーを示す場合には必ず指定します。各エントリでは「マシン」エレメントと「ユーザー」エレメントは必須ですが、ダッシュ (-) は空であることを示すために使用されます。エントリでは、「マシン」エレメントと「ユーザー」エレメントの関係を示す必要はありません。
netgroup 入力ファイルの 2 つのサンプルエントリを次に示します。これらの各サンプルエントリでは、admins という名前のネットグループが作成されます。これらの各 admins は、遠隔ドメイン sales に存在するユーザー hauri と juanita、およびマシン altair と sirius で構成されます。
admins (altair, hauri), (sirius,juanita,sales) admins (altair,-), (sirius,-), (-,hauri), (-,juanita,sales) |
さまざまなプログラムでは、ログイン、遠隔マウント、遠隔ログイン、遠隔シェル作成時に NIS ネットグループマップを使用してアクセス権のチェックを行います。さまざまなプログラムとは、mountd、login、rlogin、rsh などです。login コマンドは、passwd データベース内でネットグループ名を見つけた場合に、ネットグループマップでユーザー分類を調べます。mountd デーモンは、/etc/dfs/dfstab ファイル内でネットグループ名を見つけた場合に、ネットグループマップでマシン分類を調べます。rlogin と rsh (インタフェースを使用するプログラムならどれでも) は、/etc/hosts.equiv または .rhosts ファイル内でネットグループ名を見つけた場合に、ネットグループマップでマシン分類とユーザー分類の両方を調べます。
ネットワークに新しい NIS ユーザーまたはマシンを追加する場合は、netgroup 入力ファイルの該当ネットグループに追加してください。次に、make でネットグループマップを作成し、これを yppush コマンドですべての NIS サーバーに転送してください。ネットグループおよびネットグループ入力ファイル構文の使い方の詳細については、netgroup(4) のマニュアルページを参照してください。
マップ情報は、ypcat、ypwhich、ypmatch コマンドを使っていつでも取得できます。以下の例では、mapname はマップの正式名とニックネーム(存在する場合)の両方を意味します。
マップのすべての値を表示するには、次のように入力します。
% ypcat mapname
マップのキーと値 (存在する場合) の両方を表示するには、次のように入力します。
% ypcat -k mapname
マップのすべてのニックネームを表示するには、次のいずれかのコマンドを入力します。
% ypcat —x
% ypwhich —x
% ypmatch —x
使用可能なすべてのマップとそのマスターサーバーを表示するには、次のように入力します。
% ypwhich —m
特定のマップのマスターサーバーを表示するには、次のように入力します。
% ypwhich -m mapname
キーをマップのエントリと照合するには、次のように入力します。
% ypmatch key mapname
key は照合する文字列です。検索している項目がマップのキーでない場合は、次のように入力します。
% ypcat mapname | grep item
item は検索している情報です。他のドメインに関する情報を取得するには、これらのコマンドの -d domainname オプションを指定します。
デフォルト以外のドメインの情報を要求するマシンが、そのドメインに対するバインドを持っていない場合、ypbind は /var/yp/binding/domainname/ypservers ファイルを参照して、そのドメインのサーバーリストを検索します。このファイルが存在しない場合、ypbind は RPC 同報通信を送出してサーバーを検索します。この場合、検索先であるドメインのサーバーは要求元マシンと同じサブネットに存在している必要があります。
選択されたマップのマスターサーバーを変更するには、まず新しい NIS マスターサーバー上にマップを作成しなければなりません。古いマスターサーバー名は既存のマップにキーと値のペアとして発生するので (このペアは makedbm で自動的に挿入される)、ypxfr でマップを新しいマスターサーバーにコピーしたり、コピーを新しいマスターサーバーに転送するだけでは不十分です。キーと新しいマスターサーバー名との対応づけをし直す必要があります。マップに ASCII ソースファイルが存在する場合は、このファイルを新しいマスターサーバーにコピーします。
スーパーユーザーになります。
新しいマスターサーバーにスーパユーザーとしてログインして、次のように入力します。
newmaster# cd /var/yp
作成するマップを指定する前に、Makefile にこの新しいマップのエントリが必要です。新しいマップのエントリがない場合は、最初に、sites.byname というマップを使用して Makefile を編集します。
マップを更新または再作成するには、次のように入力します。
newmaster# make sites.byname
古いマスターサーバーが NIS サーバーとして残っている場合は、古いマスターサーバーに遠隔ログイン (rlogin) してから、Makefile を編集します。sites.byname を作成した Makefile 内のセクションをコメントアウトして、このセクションで sites.byname が再び作成されないようにします。
sites.byname だけが ndbm ファイルとして存在している場合は、新しいマスターサーバー上に作成し直します。まず任意の NIS サーバーからコピーを分解し、次に makedbm を使ってそれを実行します。
newmaster# cd /var/yp
newmaster# ypcat sites.byname | makedbm -domain /sites.byname
新しいマスターサーバー上でマップが作成されたら、そのコピーをこのマスターサーバーのスレーブサーバーに送信します。この場合、yppush を使用しないでください。yppush を使用すると、スレーブサーバーは新しいマスターサーバーからではなく古いマスターサーバーから新しいコピーを取得します。このような動作を回避するには、一般にマップのコピーを新しいマスターサーバーから古いマスターサーバーに送り返すという方法が用いられます。この操作を行うには、古いマスターサーバーでスーパユーザーとなり次のように入力します。
oldmaster# /usr/lib/netsvc/yp/ypxfr -h newmaster sites.byname
これで yppush を使用できます。スレーブサーバーは古いマスターサーバーを現行のマスターサーバーとして認識しているので、マップの現行バージョンを古いマスターサーバーから取得しようとします。クライアントがこの処理を行うときは、新しいマスターサーバーが現行のマスターサーバーとして指定されている新しいマップを取得します。
この方法が失敗した場合は、各 NIS サーバーの root としてログインして上記の ypxfr コマンドを実行してください。
NIS は設定ファイルを正確に構文解析します。このため NIS 管理は容易になりますが、設定ファイルおよび構成ファイルにおける変更により、NIS の動作は影響を受けます。
以下のファイルを変更する場合は、この節の手順を使用します。
/etc/resolv.conf。このファイルを追加または削除することで、DNS 転送が可能または不可になる
$PWDIR/security/passwd.adjunct。このファイルを追加または削除することで、C2
セキュリティが可能または不可になる。$PWDIR
は、/var/yp/Makefile で定義される
スーパーユーザーになります。
NIS サーバーを停止します。
# /usr/lib/netsvc/yp/ypstop
必要に応じてファイルを変更します。
NIS サーバーを再起動します。
# /usr/lib/netsvc/yp/ypstart
NIS のマップまたはマップソースファイルを更新する場合は、NIS を停止および起動する必要はありません。
次の点に注意してください。
NIS マスターサーバーからマップまたはソースファイルを削除しても、スレーブサーバー上の対応するマップまたはソースファイルは自動的には削除されません。スレーブサーバー上の対応するマップまたはソースファイルの削除は、NIS 管理者が手作業で行う必要があります。
新しいマップは、自動的には既存のスレーブサーバーに転送されません。新しいマップを既存のスレーブサーバーに転送するには、NIS 管理者がそのスレーブサーバーで ypxfr を実行してください。
/var/yp で提供されたデフォルトの Makefile を更新することにより、NIS 管理者のニーズを満たすことができます。今後に備えて、必ずこのオリジナルの Makefile のコピーを保存しておいてください。Makefile を使用すると、マップの追加または削除、および一部のディレクトリ名の変更ができます。
新しい NIS マップを追加するには、マップの ndbm ファイルのコピーをドメインに存在する各 NIS サーバーの /var/yp/domainname ディレクトリに転送する必要があります。この転送は通常、Makefile が自動的に行います。どの NIS サーバーがマップのマスターサーバーであるかを決定したら、マップを容易に作成し直せるようにマスターサーバーの Makefile を更新してください。異なるサーバーを異なるマップのマスターサーバーとして設定することも可能ですが、このようにするとたいていの場合、管理上の混乱を招きます。したがって、1 つのサーバーだけをすべてのマップのマスターサーバーとして設定するようにしてください。
一般に、人が読めるテキストファイルは、makedbm に対する入力として適したものにするために awk、sed、grep でフィルタリングされます。デフォルトの Makefile を参照してください。make コマンドの概要については、make (1S) のマニュアル ページを参照してください。
make が認識する従属性の作成方法を決定する際には、Makefile にすでに備わっているメカニズムを使用してください。make では、従属ルール内の行の始まりにタブが存在するか否かが重要であることに注意してください。他の設定が正しくても、タブが存在しないというだけでエントリが無効になることがあります。
Makefile にエントリを追加する場合は、次の作業を行ってください。
データベース名を all ルールに追加する
time ルールを作成する
データベースのルールを追加する
たとえば、Makefile をオートマウンタ入力ファイルで動作させるには、auto_direct.time および auto_home.time マップを NIS データベースに追加してください。
NIS データベースにこれらのマップを追加する場合は、次の手順に従います。
スーパーユーザーとしてログインします。
all という語で始まる行に、追加したいデータベース名 (1 つまたは複数) を追加します。
all: passwd group hosts ethers networks rpc services protocols \ netgroup bootparams aliases netid netmasks \ auto_direct auto_home auto_direct auto_home |
エントリの順序は任意ですが、継続行の始まりの空白はスペースではなくタブにしてください。
Makefile の終わりに以下の行を追加します。
auto_direct: auto_direct.time auto_home: auto_home.time |
ファイル中央に auto_direct.time エントリを追加します。
auto_direct.time: $(DIR)/auto_direct @(while read L; do echo $$L; done < $(DIR)/auto_direct $(CHKPIPE)) | \ (sed -e "/^#/d" -e "s/#.*$$//" -e "/^ *$$/d" $(CHKPIPE)) | \ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/auto_direct; @touch auto_direct.time; @echo "updated auto_direct"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) auto_direct; fi @if [ ! $(NOPUSH) ]; then echo "pushed auto_direct"; fi |
次に、各引数について説明します。
CHKPIPE は、次のコマンドに結果を渡す (パイピングする) 前に、パイプ (|) の左側の動作が正しく行われたことを確認します。パイプの左側の動作が正しく行われなかった場合は、「NIS make terminated」というメッセージが表示されてプロセスは終了します。
NOPUSH は、Makefile が yppush を呼び出して新しいマップをスレーブサーバーに転送することを防止します。NOPUSH が設定されていない場合は、転送は自動的に行われます。
継続行の始まりにある while ループは、バックスラッシュで拡張された行を入力ファイルから削除するためのものです。sed スクリプトはコメント行と空行を削除します。
他のすべてのオートマウンタマップ (auto_home や他のデフォルトでないマップなど) でも、同じ手順が必要となります。
# make mapname
mapname は、作成するマップの名前です。
Makefile に特定データベースのマップを作成しない場合は、Makefile を以下のように編集してください。
all ルールからデータベース名を削除します。
削除するデータベースのデータベースルールを削除またはコメントアウトします。
time ルールを削除します。
たとえば、hosts データベースを削除するには、hosts: hosts.time エントリを削除します。
マスターサーバーとスレーブサーバーからマップを削除します。
Makefile の先頭で定義されている変数の設定値を変更するには、等号 (=) の右側の値を変更します。たとえば、マップへの入力として /etc に存在するファイルではなく、別のディレクトリに存在するファイル (たとえば /var/etc/domainname など) を使用する場合は、DIR
を DIR=/etc から DIR=/var/etc/domainname に変更します。また、PWDIR を PWDIR=/etc から PWDIR=/var/etc/domainname に変更します。
変数は次のとおりです。
DIR=。passwd と shadow を除くすべての NIS 入力ファイルが存在するディレクトリ。デフォルト値は /etc です。マスターサーバーの /etc ディレクトリのファイルを NIS 入力ファイルとして使用することは望ましくないので、この値は変更しなければなりません。
PWDIR=。NIS 入力ファイル passwd と shadow が存在するディレクトリ。マスターサーバーの /etc ディレクトリのファイルを NIS 入力ファイルとして使用することは望ましくないので、この値は変更しなければなりません。
DOM=。NISドメイン名。DOM のデフォルト値は、domainname コマンドで設定されます。ただし、大部分の NIS コマンドでは現在のマシンのドメイン(現在のマシンの /etc/defaultdomain ファイルに設定されている)が使用されます。
NIS のインストール終了後、頻繁に更新しなければならないマップとまったく更新する必要がないマップがあることに気づくかもしれません。たとえば passwd.byname マップは、大企業のネットワークで頻繁に更新されることがありますが、auto_master マップはほとんど更新されません。
デフォルトの NIS マップ で説明されているように、デフォルトの NIS マップのデフォルトの位置は、/var/yp/domainname のマスターサーバー上です。domainname は NIS ドメインの名前です。マップを更新する必要がある場合は、マップがデフォルトのマップか否かによって 2 つの更新手順のどちらかを使用できます。
この節では、さまざまな更新ツールの使用方法について説明します。実際にはこれらの更新ツールはシステム起動後に、デフォルトでないマップを追加する場合または一群の NIS サーバーを変更する場合にだけ使用します。
デフォルトセットに付いているマップを更新する場合は、次の手順に従います。
マスターサーバー上でスーパーユーザーになります。
必ずマスターサーバー上だけで NIS マップを更新します。
更新するマップのソースファイルを編集します (このファイルが /etc に存在しているか、選択された他のディレクトリに存在しているかは問題ではありません)。
次のように入力します。
# cd /var/yp
# make mapname
make コマンドは、対応するファイルに対して NIS 管理者が行った変更に従ってマップを更新します。make コマンドはまた、これらの変更を他のサーバーに伝播します。
マップが更新されると、Makefile は yppush
を使用して新しいマップをスレーブサーバーに伝播します (ただし、NOPUSH
が Makefile に設定されている場合を除きます)。これは、ypserv
デーモンに通知してマップ転送要求を送ることで実行されます。次に、スレーブサーバー上の ypserv デーモンが ypxfr プロセスを起動し、ypxfrd プロセスがマスターサーバー上の ypxfr デーモンに連絡します。いくつかの基本検査 (マップが実際に更新されていることの確認など) が行われてマップが転送されます。そのあと、スレーブサーバー上の ypxfrd が、転送が成功したかどうかを yppush プロセスに通知します。
上記手順は、新しく作成されたマップがスレーブサーバー上に存在しない場合は動作しません。スレーブサーバー上で ypxfr を実行して、新しいマップをスレーブサーバーに転送する必要があります。
マップの伝播は失敗することがありますが、失敗した場合は ypxfr を使って手動で新しいマップ情報を転送する必要があります。ypxfr は、2 つの方法で使用できます。1 つは root の crontab ファイルを定期的に使用する方法であり、もう 1 つはコマンド行から対話形式で使用する方法です。これらの方法については、以下で説明します。
マップの更新頻度はマップによってそれぞれ異なります。たとえば、デフォルトのマップである protocols.byname やデフォルトでないマップの auto_master など一部のマップは何カ月も更新されないことがありますが、一方、passwd.byname など一部のマップは 1 日に数回更新されることがあります。crontab コマンドでマップ転送をスケジュールすると、個々のマップに対して特定の伝播時間を設定できます。
マップに適切な頻度で ypxfr を定期的に実行するには、各スレーブサーバー上の root の crontab ファイルに、該当する ypxfr エントリを入れる必要があります。ypxfr は、マスターサーバー上のコピーがローカルのコピーより新しい場合に限り、マスターサーバーと連絡をとりマップを転送します。
デフォルトの -m オプションが指定されている rpc.yppasswdd をマスターサーバー上で実行すると、どこかで yp パスワードが変更されるたびに、passwd デーモンが make を実行して passwd マップを作成し直します。
NIS 管理者は、各マップに対する crontab エントリを個々に作成するという方法ではなく、root の crontab コマンドでシェルスクリプトを実行してすべてのマップを定期的に更新するという方法を使用することもできます。マップ更新シェルスクリプトのサンプルは、/usr/lib/netsvc/yp ディレクトリに入っています。スクリプト名は、ypxfr_1perday、ypxfr_1perhour、ypxfr_2perday です。これらのシェルスクリプトを更新または置換することによって、容易にサイト要件に適合させることができます。 例 9–1 は、デフォルトの ypxfr_1perday シェルスクリプトを示しています。
#! /bin/sh # # ypxfr_1perday.sh - YP マップの検査・更新を毎日行う PATH=/bin:/usr/bin:/usr/lib/netsvc/yp:$PATH export PATH # set -xv ypxfr group.byname ypxfr group.bygid ypxfr protocols.byname ypxfr protocols.bynumber ypxfr networks.byname ypxfr networks.byaddr ypxfr services.byname ypxfr ypservers |
このシェルスクリプトは、root の crontab が毎日実行されるとマップを 1 日に 1 回更新します。NIS 管理者は、1 週間に 1 回、1 ヶ月に 1 回、または 1 時間に 1 回などといった頻度でマップを更新するスクリプトを使用できますが、マップを頻繁に伝播するとパフォーマンスが低下するので注意してください。
NIS ドメインに対して構成された各スレーブサーバー上で同じシェルスクリプトを root で実行してください。各サーバー上の実行時間を変更して、マスターサーバーが動作不能にならないようにしてください。
特定のスレーブサーバーからマップを転送する場合は、シェルスクリプトの ypxfr の -h machine オプションを使用してください。シェルスクリプトに記述するコマンドの構文は、次のとおりです。
# /usr/lib/netsvc/yp/ypxfr -h machine [ -c ] mapname
machine は転送するマップが存在するサーバー名です。mapname は要求されたマップ名です。マシンを指定することなく -h オプションを指定すると、ypxfr はマスターサーバーからマップを取得しようとします。ypxfr 実行時に ypserv がローカルに実行されていない場合は、ypxfr がローカル ypserver に現在のマップリクエストの取消しを送信しないよう、-c フラグを使用してください。
-s domain オプションを使用すると、別のドメインからローカルドメインにマップを転送できます。これらのマップは、各ドメインにおいて同じでなければなりません。たとえば、2 つのドメインが同じ services.byname マップおよび services.byaddr マップを共有することがあります。また、より細かい制御を行うための rcp または rdist を使用してファイルを複数のドメインに転送することもできます。
2 番目の方法である ypxfr の起動とは、ypxfr をコマンドとして実行することです。一般に、ypxfr をコマンドとして実行するのは例外的状況においてだけです。たとえば、一時的に NIS サーバーを設定して試験環境を作成する場合や、他のサーバーと調和して動作不能になっていた NIS サーバーを迅速に取得しようとする場合などです。
ypxfr が試みた転送およびその転送結果は、ログファイルに記録されます。/var/yp/ypxfr.log というファイルが存在する場合は、転送結果はこのファイルに記録されます。このログファイルのサイズには制限がありません。このログファイルのサイズが無限に大きくなることを防止するには、ときどき次のように入力してこのログファイルを空にしてください。
# cd /var/yp # cp ypxfr.log ypxfr.log.old # cat /dev/null> /var/yp/ypxfr.log |
これらのコマンドは、crontab で 1 週間に 1 回実行させることができます。記録を取らないようにするには、ログファイルを削除してください。
デフォルトでないマップを更新する場合は、次の手順に従います。
対応するテキストファイルを作成または編集します。
新しいマップまたは更新されたマップを作成 (または再作成) します。マップ作成には 2 つの方法があります。
Makefile を使用する方法。デフォルトでないマップを作成するには、この方法をお勧めします。Makefile にマップのエントリが存在する場合は、make name を実行するだけです (name は作成するマップ名)。Makefile にマップのエントリが存在しない場合は、Makefile の更新と使用を参照してエントリを作成をしてください。
/usr/sbin/makedbm プログラムを使用する方法。このコマンドの詳細については、makedbm(1M) のマニュアルページに説明されています。
入力ファイルが存在しない場合は、makedbm でマップを更新する方法は 2 つあります。
makedbm -u の出力先を一時ファイルに変更し、一時ファイルを更新して更新済みの一時ファイルを makedbm の入力として使用します。
makedbm -u の出力を makedbm に渡されるパイプライン内で動作させます。分解されたマップを awk、sed、または cat で更新できる場合は、この方法をお勧めします。
テキストファイル /var/yp/mymap.asc がマスターサーバー上のエディタまたはシェルスクリプトで作成されていると仮定します。この場合、このファイルから NIS マップを作成し、作成された NIS マップを homedomain サブディレクトリに入れるには、マスターサーバー上で次のように入力してください。
# cd /var/yp # makedbm mymap.asc homedomain/ mymap |
mymap マップは現在、マスターサーバーの homedomain ディレクトリに存在しています。この新しいマップをスレーブサーバーに転送するには、ypxfr を実行してください。
mymap にエントリを追加することは簡単です。まず、テキストファイル /var/yp/mymap.asc を更新する必要があります。対応するテキストファイルを更新しないで実際の dbm ファイルを更新した場合は、更新内容が失われます。次に、上記のように makedbm を実行してください。
オリジナルのテキストファイルが存在しない場合は、キーボードから makedbm に次のように入力して NIS マップを作成します (最後に Control + D を入力します)。
ypmaster# cd /var/yp
ypmaster# makedbm - homedomain/mymap key1 value1 key2 value2 key3 value3
後でマップを更新する必要がある場合は、makedbm でマップを分解して一時ファイルを作成できます。マップを分解して一時ファイルを作成するには、次のように入力します。
% cd /var/yp
% makedbm -u homedomain/ mymap> mymap.temp
作成される一時ファイル mymap.temp には、1 行につき 1 つのエントリが存在します。このファイルは、任意のテキストエディタで必要に応じて編集できます。
マップを更新するには、次のように入力して更新後の一時ファイルの名前を makedbm に指定します。
% makedbm mymap.temp homedomain/mymap
% rm mymap.temp
次に root になり、次のように入力してマップをスレーブサーバーに伝播します。
# yppush mymap
ここでは makedbm でマップを作成する方法について説明してきましたが、実際に行わなければならないほとんどすべての作業は、ypinit と Makefile で行うことができます。
/var/yp の Makefile を使用しても他の手順を使用しても、最終目的は同じです。正しく作成された dbm ファイルの新しいペアをマスターサーバー上の maps ディレクトリに配置しなければなりません。
NIS の実行後、ypinit に指定された初期リストに含まれていなかった NIS スレーブサーバーを作成する必要がある可能性があります。
NIS スレーブサーバーを追加する場合は、次の手順に従います。
スーパーユーザーとしてマスターサーバーにログインします。
NIS ドメインディレクトリに移動します。
# cd /var/yp/domainname
# makedbm -u ypservers > /tmp/temp_file
makedbm コマンドは、ypservers を ndbm フォーマットから一時 ASCII ファイル、/tmp/temp_file に変換します。
テキストエディタで /tmp/temp_file ファイルを編集します。つまり、新しいスレーブサーバー名をサーバーリストに追加します。この後、/tmp/temp_file ファイルを保存し、閉じます。
入力ファイルに /tmp/temp_file を指定し、出力ファイルに ypservers を指定して、makedbm コマンドを実行します。
# makedbm /tmp/temp_file ypservers
makedbm は、ypservers を変換して ndbm フォーマットに戻します。
スレーブサーバーで次のように入力して、ypservers マップが正しいことを確認します (ypservers のASCII ファイルは存在しないため)。
slave3# makedbm -u ypservers
makedbm コマンドは、画面に ypservers の各エントリを表示します。
ypservers にマシン名が存在しない場合は、ypservers はマップファイルの更新を受信しません。これは、yppush がこのマップでスレーブサーバーリストを調べるからです。
マスターサーバーから NIS マップのセットをコピーして新しいスレーブサーバーの NISドメインディレクトリを設定します。
この操作を行うには、新しい NIS スレーブサーバーでスーパーユーザーとなり、ypinit および ypbind コマンドを実行します。
slave3# cd /var/yp
slave3# ypinit -c
<サーバーのリスト>
slave3# /usr/lib/netsvc/yp/ypbind
slave3# /usr/sbin/ypinit -s ypmaster
ypmaster は、既存の NIS マスターサーバーのマシン名です。
ypstop を実行して、NIS クライアントとして実行されているマシンを停止します。
# /usr/lib/netsvc/yp/ypstop
ypstart を実行して、NIS スレーブサーバーのサービスを開始します。
# /usr/lib/netsvc/yp/ypstart
$PWDIR/security/passwd.adjunct ファイルが存在する場合は、C2
セキュリティが自動的に起動されます。$PWDIR
は、/var/yp/Makefile で定義されます。C2 セキュリティモードでは、passwd.adjunct ファイルを使って passwd.adjunct NIS マップが作成されます。C2
セキュリティモードでは、passwd.adjunct ファイルと shadow
ファイルの両方を使用してセキュリティを管理できます。passwd.adjunct ファイルは、次のように入力した場合にだけ処理されます。
# make passwd.adjunct
make passwd コマンドは、NIS 管理者が C2 セキュリティモードで make を手動で実行した場合に passwd マップのみを処理します。passwd.adjunct マップは処理されません。
マシンの NIS ドメイン名を変更する場合は、次の手順に従います。
スーパーユーザーになります。
マシンの /etc/defaultdomain ファイルを編集して、現在のドメイン名をそのマシンの新しいドメイン名に置き換えます。
たとえば、現在のドメイン名である sales.doc.com を research.doc.com に変更します。
domainname `cat /etc/defaultdomain' を実行します。
マシンを NIS クライアント、スレーブサーバー、またはマスターサーバーとして設定します。
詳細については、第 8 章「NIS サービスの設定と構成」を参照してください。
一般に NIS クライアントは、マシン名とアドレスの検索に NIS だけが使用されるように、nsswitch.conf ファイルで構成されます。このような検索が失敗した場合は、NIS サーバーはこれらの結果を DNS に転送します。
マシンにログインして、スーパーユーザーになります。
hosts.byname と hosts.byaddr という 2 つのマップファイルには、YP_INTERDOMAIN キーが必要です。このキーを検査するために、Makefile を編集し、次の行を変更します。
#B=-b B= |
上記の行を、次のように変更します。
B=-b #B= |
これで、マップの作成時に makedbm が -b フラグで起動され、YP_INTERDOMAIN キーが ndbm ファイルに挿入されます。
make を実行してマップを作成し直します。
# /usr/ccs/bin/make hosts
NIS サーバーのすべての /etc/resolv.conf ファイルが有効なネームサーバーを指していることを確認します。
Solaris リリース 2 を実行していない NIS サーバーがある場合は、YP_INTERDOMAIN キーがホストマップに存在することを確認してください。
DNS 転送を有効にするために、各サーバーを停止します。
# /usr/lib/netsvc/yp/ypstop
各サーバーを再起動します。
# /usr/lib/netsvc/yp/ypstart
この NIS 実装では、ypstart が -d オプションを使って ypserv を自動的に起動して、DNS に要求を転送します。
マスターサーバーとスレーブサーバーのどちらも Solaris リリース 2 を実行していない場合は、次の表を参考にして問題が発生しないように対処してください。「4.0.3+」という表記は、「SunOS のリリース 4.0.3 以降」であることを意味します。makedm -b は、Makefile の -B 変数への参照です。
表 9–1 異機種システムが混在する NIS ドメインにおける NIS/DNS
スレーブサーバー |
|
マスターサーバー |
|
|
4.0.3+ |
|
Solaris |
4.0.3+ |
マスターサーバー: makedbm —b スレーブサーバー: ypxfr |
マスターサーバー: makedbm —b スレーブサーバー: ypxfr |
マスターサーバー: ypserv —d スレーブサーバー: ypxrf —b |
Solaris NIS |
マスターサーバー: makedbm —b スレーブサーバー: ypxfr |
マスターサーバー: makedbm —b スレーブサーバー: ypxfr |
マスターサーバー: ypserv —d スレーブサーバー: resolve.confが存在する ypxfr または ypxfr -b |
マスターサーバー上の ypserv が使用不可になっている場合は、NIS マップを更新できません。ネットワーク上の NIS をオフにする場合は、リブート後に次のように入力して ypbind ファイルを ypbind.orig に名前を変更すれば NIS を使用不可にできます。
% mv /usr/lib/netsvc/yp/ypbind /usr/lib/netsvc/yp/ypbind.orig
リブート後に特定の NIS スレーブサーバーまたはマスターサーバー上の NIS を使用不可にする場合は、その特定の NIS スレーブサーバーまたはマスターサーバー上で次のように入力してください。
% mv /usr/lib/netsvc/yp/ypserv /usr/lib/netsvc/yp/ypserv.orig
NIS を停止するには次のように入力してください。
% /usr/lib/netsvc/yp/ypstop
NIS サービスは、リブートが行われると自動的に再起動されますが、ypbind および ypserv ファイルの名前が上記のように変更された場合は起動されません。
この章では、NIS を実行しているネットワーク上で発生する問題の解決方法について説明します。NIS クライアントで発生する問題と、NIS サーバーで発生する問題を取り上げます。
NIS サーバーやクライアントで問題を解決しようとする前に、NIS 環境について説明している第 7 章「ネットワーク情報サービス (NIS) (概要)」を参照してください。その後この節で、各問題を適切に解説している節を参照してください。
NIS のバインドに関する一般的な問題には、次のようなものがあります。
クライアントのコマンドがバックグランドモードでゆっくりと処理されているか、通常よりも機能に時間がかかる
クライアントのコマンドがハングする。システム全体は正常で新しいコマンド を実行できる場合でも、コマンドがハングすることがある
クライアントのコマンドがあいまいなメッセージとともに、またはまったくメッセージなしでクラッシュする
NIS のバインドに関する問題を示す症状が、1 台か 2 台のクライアントだけで発生している場合には、問題は多くの場合クライアントにあります。多くの NIS クライアントが、プロパティを正確にバインドできない場合には、問題は多くの場合 1 台以上の NIS サーバーにあります。複数のクライアントに影響する NIS の問題を参照してください。
1 台のクライアントに問題があっても、同じサブネット上の他のクライアントは正常に機能しています。問題のあるクライアント上で、ls -l を /usr のようなディレクトリで実行します。このディレクトリには、多くのユーザーが所有するファイルが含まれ、クライアント /etc/passwd ファイルにはないものも含まれます。実行結果として、ローカルの /etc/passwd に含まれるファイルの所有者が名前でなく番号で表示された場合は、NIS サービスがクライアント上で機能してないことを示しています。
通常これらの症状は、クライアント ypbind プロセスが実行されていないことを示します。ps -e を実行して、ypbind をチェックします。ypbind が見つからなければ、スーパーユーザーとしてログインし、次のように入力して、ypbind を起動します。
client# /usr/lib/netsvc/yp/ypstart |
あるクライアントに問題があり、他のクライアントは正常に機能していますが、ypbind は問題のあるクライアント上で実行されています。クライアントのドメインの設定が間違っている可能性があります。
クライアント上で domainname コマンドを実行して、どのドメイン名が設定されているのかを調べます。
client7# domainname neverland.com
NIS のマスターサーバー上の /var/yp 内の実際のドメイン名と、出力を比較します。実際の NIS ドメインは、/var/yp ディレクトリ内のサブディレクトリとして表示されます。
Client7# ls /var/yp...
-rwxr-xr-x 1 root Makefile drwxr-xr-x 2 root binding drwx------ 2 root doc.com ... |
マシン上での domainname の実行によって得たドメイン名が、/var/yp 内のディレクトリとして示されたサーバードメイン名と同じではない場合には、マシンの /etc/defaultdomain ファイルで指定されたドメイン名が間違っています。スーパーユーザーとしてログインして、マシンの /etc/defaultdomain ファイル内のクライアントのドメイン名を修正します。これによって、マシンを起動するたびに、ドメイン名が正しいかどうかが確認されます。ここでマシンをリブートします。
ドメイン名では大文字と小文字を区別します。
ドメイン名が正しく設定されていて ypbind が実行中でもコマンドがまだハングする場合には、ypbind コマンドを実行してクライアントがサーバーにバインドされていることを確認してください。ypbind を起動したばかりのときは、ypwhich を数回実行します。通常、1 回目ではドメインがバインドされていないことが通知され、2 回目は成功します。
ドメイン名が正しく設定されていて ypbind が実行中のときに、クライアントがサーバーと通信できないというメッセージを受け取った場合には、いくつかの問題が考えられます。
バインドするサーバーのリストを含む /var/yp/binding/domainname/ypservers ファイルがクライアントにあるかどうかを確認します。ない場合には、ypinit -c を実行して、設定の順番にクライアントのバインド先のサーバーを指定します。
クライアントに /var/yp/binding/domainname/ypservers ファイルがあり、1 台か 2 台のサーバーが使用できない場合には、十分な数のサーバーがあるかどうかを調べます。ない場合には、yppinit -c を実行して、リストにサーバーを追加します。
クライアントの ypservers ファイルにリストされたサーバーのどれもが使用できない場合には、クライアントはブロードキャストモードで稼働中のサーバーを検索します。稼働中のサーバーがクライアントのサブネットにある場合には、クライアントはそれを見つけます (検索中はパフォーマンスが低下する)。クライアントのサブネットに稼動中のサーバーがない場合には、次のいくつかの方法で問題を解決できます。
セキュリティと管理上の理由から、クライアントにブロードキャストを使ってサーバーを検索させるのではなく、クライアントの ypservers ファイルでクライアントのバインド先のサーバーを指定してください。ブロードキャストは、ネットワークの速度を落とし、クライアントの速度も落とします。また、異なるクライアントに対して異なるサーバーをリストするため、サーバー負荷の均衡がとれなくなります。
クライアントの ypservers ファイルにリストされたサーバーが、/etc/hosts ファイルにエントリを持っているかどうかを確認します。持っていない場合には、NIS マップホストの入力ファイルにサーバーを追加して、NIS マップに関する作業で説明しているように、yppinit -c または ypinit -s を実行してマップを再構築します。
/etc/nsswitch.conf ファイルが設定されていて、NIS の他にマシンのローカルの hosts ファイルを参照できるかどうかを確認します。スイッチの詳細については 第 2 章「ネームサービススイッチ (概要)」を参照してください。
/etc/nsswitch.conf ファイルが設定されていて、services と rpc に対して files を参照できるかどうかを確認します。
ypwhich を同じクライアントで数回使うと、NIS サーバーが変わるので結果の表示も変わります。これは正常な状態です。NIS クライアントから NIS サーバーへのバインドは、ネットワークや NIS サーバーを使用中の場合は時間の経過に伴って変化します。ネットワークは、すべてのクライアントが受け入れ可能な応答時間を NIS サーバーから得られる点で安定した状態になります。クライアントのマシンが NIS サービスを得ているかぎりは、サービスの供給元は問題にはなりません。たとえば、NIS サーバーマシンがそれ自体の NIS サービスを、ネットワーク上の別の NIS サーバーから受けることもあります。
サーバーのバインディングが不可能な場合には ypset コマンドを使用すると、別のネットワークまたはサブネットの別のサーバーが使用可能な場合には、そのサーバーへのバインディングが一時的に可能になります。ただし、-ypset オプションを使用するためには、-ypset または -ypsetme オプションのどちらかを指定して ypbind を実行する必要があります。
セキュリティ上の理由から、-ypset と -ypsetme のオプションの使用は、管理された環境のもとでのデバッグだけに限定してください。-ypset と -ypsetme のオプションを使用すると、セキュリティが侵害される恐れがあります。これらのデーモンの実行中はサーバーのバインドをだれでも変更できるため、他のユーザーの作業に問題が生じたり重要なデータへの未承認のアクセスが認められたりするためです。これらのオプションで ypbind を起動する場合は、問題が解決したら ypbind をいったん強制終了し、これらのオプションを指定しないで再起動してください。
ypbind が、起動するたびにすぐにクラッシュする場合には、システムの他の部分で問題を調べます。次のように入力して、rpcbind デーモンが存在するかどうか確認します。
% ps -ef | grep rpcbind
rpcbind が存在しない、安定しない、あるいは動作に異常がある場合には、RPC のマニュアルを参照してください。
正常に機能しているマシンから、問題のあるクライアント上の rpcbind と通信ができる場合があります。正常に機能しているマシンから、次のように入力してください。
% rpcinfo client
問題のあるクライアント上の rpcbind に問題がない場合には、rpcinfo によって次の出力がされます。
program version netid address service owner ... 100007 2 udp 0.0.0.0.2.219 ypbind superuser 100007 1 udp 0.0.0.0.2.219 ypbind superuser 100007 1 tcp 0.0.0.0.2.220 ypbind superuser 100007 2 tcp 0.0.0.0.128.4 ypbind superuser 100007 2 ticotsord \000\000\020H ypbind superuser 100007 2 ticots \000\000\020K ypbind superuser ... |
使用中のマシンには異なる複数のアドレスがあります。それらのアドレスが表示されない場合は、ypbind によってそのサービスが登録できていません。マシンをリブートして再度 rpcinfo を実行します。表示される出力の中に ypbind プロセスがいくつかあり、 /usr/lib/netsvc/yp/ypbind を再起動しようとするたびにそれらのプロセスが変更される場合は、rpcbind デーモンが実行中であってもシステムをリブートをしてください。
1 台か 2 台のクライアントだけで、NIS のバインドに関する問題を示す症状が発生している場合は、そのクライアントに問題があると考えられます。1 台のクライアントに影響する NIS の問題を参照してください。複数のクライアントが正しくバインドできない場合は、1 台以上の NIS サーバーに問題があると考えられます。
次のような特殊な文字列が含まれている /etc/default/yppasswdd を作成します。 check_restricted_shell_name=1
「check_restricted_shell_name=1」文字列をコメント扱いにすると、「r」のチェックは行われません。
ネットワークまたは NIS サーバーが過負荷状態で、ypserv が指定時間内にクライアントの ypbind プロセスに応答を戻せない場合は、NIS がハングする可能性があります。
こういった状態では、ネットワーク上のすべてのクライアントで同じまたは類似した問題が発生します。ほとんどの場合、この状態は一時的です。NIS サーバーをリブートして ypserv を再起動するか、NIS サーバーまたはネットワーク自体の負荷が減少すると、メッセージは通常消えます。
サーバーが起動して実行中であることを確認してください。サーバーが物理的に近くにない場合には、ping コマンドを使ってください。
サーバーが起動されていて実行中の場合には、クライアントマシンが正常に動作していることを調べて、ypwhich コマンドを実行します。ypwhich が応答しない場合は、そのコマンドを強制終了します。次に、NIS サーバーで root としてログインし、次のように入力して NIS の ypbind プロセスが実行中かどうかをチェックします。
# ps -e | grep yp
-f オプションを ps で使用しないでください。このオプションはユーザー ID を名前に変換しようとするため、より多くのネームサービス検索が失敗する可能性があります。
ypbind または ypserv デーモンのどちらかが実行されていない場合は、それらをいったん強制終了してから、次のように入力して再起動します。
# /usr/lib/netsvc/yp/ypstop
# /usr/lib/netsvc/yp/ypstart
ypbind と ypserv の両プロセスが NIS サーバーで実行中の場合は、ypwhich を使用します。
ypwhich が応答しない場合は、ypserv がハングしたと考えられるため再起動が必要です。サーバーに root としてログインして、ypserv をいったん強制終了し、次のように入力して再起動します。
# /usr/lib/netsvc/yp/ypstop # /usr/lib/netsvc/yp/ypstart |
NIS はマップをサーバー間で伝播するので、ネットワーク上のさまざまな NIS サーバーに、同じマップの異なるバージョンが存在することがあります。相違点が長時間継続しない場合には、このバージョンの違いは許容可能です。
マップの不一致のもっとも一般的な原因は、マップの正常な伝播を妨げる何かが存在するためです。たとえば、NIS サーバーまたはルーターが、NIS サーバー間でダウンしている場合です。すべての NIS サーバーとそれらの間に設置されたルーターが実行中の場合には、ypxfr は成功します。
サーバーとルーターが正常に機能している場合には、次のことをチェックします。
ypxfr 出力のログをとる (ypxfr 出力のログを参照)
制御ファイルをチェックする (crontab ファイルと ypxfr シェルスクリプトをチェックするを参照)
マスターサーバー上の ypservers マップをチェックする (ypservers マップをチェックするを参照)。
特定のスレーブサーバーでマップの更新に問題がある場合には、そのサーバーにログインして ypxfr を対話形式で実行します。ypxfr が失敗すると ypxfr がその理由を通知するので、問題の修正が可能になります。ypxfr が成功するが時々失敗するような場合には、メッセージのログを取るためのログファイルを作成します。ログファイルを作成する場合は、スレーブサーバーで次のように入力します。
ypslave# cd /var/yp
ypslave# touch ypxfr.log
これによって、ypxfr からのすべての出力を保存する ypxfr.log ファイルが作成されます。
この出力は、ypxfr が対話形式で実行しているときに表示する出力と似ていますが、ログファイルの各行にはタイムスタンプが記録されます。タイムスタンプは通常とは異なる順番になる可能性がありますが、問題はありません。タイムスタンプは ypxfr が実行し始めたことを示します。ypxfr のコピーが同時に実行されても作業時間が異なる場合は、起動時とは異なる順番でサマリーステータス行がログファイルに書き込まれることがあります。断続的に発生するあらゆる種類の障害がログに示されます。
問題を解決したら、ログファイルを削除してログを停止します。削除しないと、ログは制限なく大きくなります。
root の crontab ファイルを調べて、それが起動した ypxfr シェルスクリプトをチェックします。これらファイルにタイプミスがあると、伝播に関する問題が発生します。/var/spool/cron/crontabs/root ファイル内でシェルスクリプトを参照できない場合や、任意のシェルスクリプト内でマップを参照できない場合にも、エラーが発生します。
NIS スレーブサーバーが、そのドメインのマスターサーバー上の ypservers マップにリストされていることも確認してください。リストされていない場合でも、スレーブサーバーはサーバーとして正しく機能しますが、yppush はマップの変更をスレーブサーバーに伝播しません。
NIS スレーブサーバーの問題が明白ではない場合には、rcp または ftp を使ってデバッグし、一貫性のないマップの最新バージョンを問題のない NIS サーバーからコピーして問題を解決できます。以下に問題のあるマップを転送する方法を示します。
ypslave# rcp ypmaster:/var/yp/mydomain/ map.\* /var/yp/mydomain
* の文字はコマンド行でエスケープされて、ypslave でローカルにではなく ypmaster で展開されます。
ypserv プロセスがほとんど即座にクラッシュして、何度再起動しても安定しないときは、デバッグプロセスは、ypbind のクラッシュで説明する内容と実質的に同じです。rpcbind デーモンの存在を次のようにチェックしてください。
ypserver% ps -e | grep rpcbind
デーモンが見つからない場合は、サーバーをリブートします。デーモンが見つかった場合は、デーモンが実行中であれば次のように入力して同様の出力を検索します。
% rpcinfo -p ypserver
% program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100068 2 udp 32813 cmsd ... 100007 1 tcp 34900 ypbind 100004 2 udp 731 ypserv 100004 1 udp 731 ypserv 100004 1 tcp 732 ypserv 100004 2 tcp 32772 ypserv |
使用中のマシンには、異なる複数のポート番号があることがあります。ypserv プロセスを表す 4 つのエントリは、次のとおりです。
100004 2 udp 731 ypserv 100004 1 udp 731 ypserv 100004 1 tcp 732 ypserv 100004 2 tcp 32772 ypserv |
エントリが 1 つもなく、ypserv がそのサービスを rpcbind で登録できない場合にはマシンをリブートしてください。エントリがある場合には、rpcbind からサービスの登録を解除してから ypserv を再起動します。rpcbind からサービ スの登録を解除するには、サーバーで次のように入力します。
# rpcinfo -d number 1
# rpcinfo -d number 2
number は、rpcinfo によって通知される ID 番号です (前述の例では、100004)。