主サーバーの設定では、主サーバーの情報源 (入力テキストファイル) の NIS 主サーバーマップへの変換が必要です。これを行う前に、予防措置を取る必要があります。
入力ファイルは主サーバーの /etc ディレクトリか、その他のディレクトリに置かれます。/etc に置くのは望ましくありません。マップの内容が、主サーバーのローカルファイルの内容と同じになるからです。これは passwd と shadow のファイルに特有の問題です。ユーザー全員が主サーバーのマップにアクセスして、passwd マップを通じて YP クライアントのすべてにルートのパスワードが渡されるためです。この詳細は、「passwd ファイルと名前空間のセキュリティ」を参照してください。
他のディレクトリにソースファイルを置く場合に、your-choice がソースファイルの格納に使用するディレクトリの名前であるときは、/var/yp 内の Makefile を修正して、DIR=/etc 行を DIR=/your-choice に変更する必要があります。これによって、クライアント上のファイルのようにサーバー上のローカルファイルを取り扱うことができます。(Makefile を編集する前に、編集前の Makefile を別の名前のファイルに保存しておいた方がいいでしょう。)
passwd マップは特殊なケースです。古い Solaris 1.x の passwd ファイル形式の他に、この NIS の実装は、NIS のパスワードマップの構築用の入力として Solaris 2.x リリースの/etc/passwd と /etc/shadow ファイル形式を受け付けます。
セキュリティ上の理由で未承認のルートアクセスを防ぐために、NIS のパスワードマップの構築に使用されるファイルには、root に対するエントリを含めないでください。このため、パスワードマップは主サーバーの /etc ディレクトリに置かれたファイルから構築しないでください。パスワードマップの構築に使用されるパスワードファイルは、root エントリが削除されていなければならず、また未承認アクセスから保護されるディレクトリに置かれる必要があります。
たとえば、主サーバーのパスワード入力ファイルは、/var/yp のようなディレクトリや、または選択した任意のディレクトリに格納し、ファイル自体は他のファイルへのリンクにはせず、またその位置を Makefile に指定します。/usr/lib/netsvc/yp/ypstart スクリプトは、Makefile に指定された構成に従って自動的に正確なディレクトリオプションを設定します。
入力ファイルが /etc 以外のディレクトリにある場合には、PWDIR
(パスワードマクロ) を変更して、passwd と shadow のファイルのあるディレクトリを参照するようにします。passwd マップ入力ファイルの格納に使用するディレクトリ名が your-choice の場合には、PWDIR=/etc の行を PWDIR=/your-choice に変更します。
ディレクトリ内で PWDIR
によって指定された passwd ファイルに root に対するエントリが含まれないようにしてください。
NIS マップへの変換用の入力ファイルを準備します。
主サーバーの入力ファイルを確認して、システム環境の最新の状態が反映されていることを確認します。
次のファイルを確認します。
auto.home または auto_home
auto.master または auto_master
bootparams
ethers
group
hosts
netgroup
netmasks
networks
passwd
protocols
rpc
services
shadow
passwd ファイルを選択した PWDIR ディレクトリにコピーします。
他の入力ファイルと異なり、/etc/mail/aliases ファイルは別のディレクトリに移動できません。このファイルは /etc/mail ディレクトリになければなりません。ドメイン全体で利用しようとするメールエイリアスがすべて含まれていることを検証して、/etc/mail/aliases ファイルが完全なことを確認します。詳細は、aliases(4) のマニュアルページを参照してください。
入力ファイルからすべてのコメント、その他の余計な行や情報を取り除きます。
これら操作は、sed または awk のスクリプトを通じて、またはテキストエディタを使用して行えます。(Makefile は入力ファイルから不要なエントリをある程度自動的に削除しますが、手作業で検証し、取り除いてから、実行するようにしてください)。
すべての入力ファイルのデータが正しい形式になっていることを確認します。
入力ファイルのデータは、それぞれのファイル用の形式になっている必要があります。該当するマニュアルページを参照して、各ファイルが正しい形式になっていることを確認します。
入力ファイルを確認して、それを入力ファイルディレクトリにコピーした後に、NIS サービスが使用する ndbm 形式のマップに、その入力ファイルを変換する必要があります。「ypinit による主サーバーの設定」の節で説明するとおり、これは主サーバーで ypinit が実行されると自動的に行われます。
ypinit スクリプトは、プログラム make を呼び出します。このプログラムは、/var/yp ディレクトリに置かれた Makefile を使用します。例 10-1 のようなデフォルトの 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 1.15 95/05/05 SMI" # # It is somewhat confusing to note that Solaris 2.x uses # /etc/auto_master instead of the 4.x /etc/auto.master file name # because of NIS+ treating a "." in a special way. # # Set the following variable to "-b" to have NIS servers use the # domain name resolver for hosts not in the current domain. #B=-b B= DIR =/etc # # If the passwd, shadow and/or adjunct files used by rpc.yppasswdd # live in directory other than /etc then you'll need to change the # following line. # DO NOT indent the line, however, since /etc/init.d/yp attempts # to find it with grep "^PWDIR" ... # PWDIR =/etc DOM = `domainname` all: passwd group hosts ethers networks rpc services protocols ¥ netgroup bootparams aliases publickey netid netmasks c2secure ¥ timezone auto.master auto.home passwd.time: $(PWDIR)/passwd $(PWDIR)/shadow -@if [ -f $(PWDIR)/security/passwd.adjunct ]; then ¥ (nawk 'BEGIN { FS=":"; OFS=":" } /^[a-zA-Z0-9_]/¥ { $$2 = "##" $$1; printf "%s¥t%s¥n", ¥ $$1, $$0 }' $(PWDIR)/passwd $(CHKPIPE)) | ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/passwd.byname; ¥ (nawk 'BEGIN { FS=":"; OFS=":" } /^[a-zA-Z0-9_]/ ¥ { $$2 = "##" $$1; printf "%-10d¥t%s¥n", $$3, $$0 }'¥ $(PWDIR)/passwd $(CHKPIPE)) | ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/passwd.byuid; ¥ (nawk 'BEGIN { FS=":"; OFS=":"; while ( getline ¥ < "$(PWDIR)/shadow" > 0) shadow[$$1] = $$2; } /^[a-zA-Z0-9_]/ { $$2 = shadow[$$1]; ¥ printf "%-10d¥t%s¥n",$$3,$$0 }' ¥ $(PWDIR)/passwd $(CHKPIPE))| ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/passwd.byuid; ¥ else ¥ (awk 'BEGIN { FS=":"; OFS="¥t"; } /^[a-zA-Z0-9_]/ ¥ { print $$1, $$0 }' $(PWDIR)/passwd $(CHKPIPE))| ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/passwd.byname; ¥ (awk 'BEGIN { FS=":"; OFS="¥t"; } /^[a-zA-Z0-9_]/ ¥ { printf("%-10d ", $$3); print $$0 }' $(PWDIR)/passwd¥ $(CHKPIPE))| $(MAKEDBM) - $(YPDBDIR)/$(DOM)/passwd.byuid; ¥ fi @touch passwd.time; @echo "updated passwd"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) passwd.byname; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) passwd.byuid; fi @if [ ! $(NOPUSH) ]; then echo "pushed passwd"; fi group.time: $(DIR)/group @(awk 'BEGIN { FS=":"; OFS="¥t"; } /^[a-zA-Z0-9_]/ ¥ { print $$1, $$0 }' $(DIR)/group $(CHKPIPE))| ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/group.byname; @(awk 'BEGIN { FS=":"; OFS="¥t"; } /^[a-zA-Z0-9_]/ ¥ { printf("%-10d ", $$3); print $$0 }' ¥ $(DIR)/group $(CHKPIPE)) | $(MAKEDBM) - ¥ $(YPDBDIR)/$(DOM)/group.bygid; @touch group.time; @echo "updated group"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) group.byname; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) group.bygid; fi @if [ ! $(NOPUSH) ]; then echo "pushed group"; fi. . passwd: passwd.time group: group.time hosts: hosts.time ethers: ethers.time networks: networks.time netmasks: netmasks.time timezone: timezone.time auto.master: auto.master.time auto.home: auto.home.time $(DIR)/netid: $(DIR)/timezone: $(DIR)/auto_master: $(DIR)/auto_home: $(PWDIR)/shadow:
Makefile は、all の下にリストされるデータベースのそれぞれに対して、適切な NIS マップを作成します。データは、makedbm で処理され、mapname.dir と mapname.pag の 2 つのファイルに保存されます。この両方は主サーバーの /var/yp/domainname ディレクトリに置かれます。
Makefile は、/PWDIR/passwd、/PWDIR/shadow、/PWDIR/security/passwd.adjunct ファイルから passwd マップを適宜作成します。
/usr/sbin/ypinit シェルは、主サーバー、スレーブサーバー、クライアントが NIS を使用するように設定します。また最初に make を実行して、主サーバー上にマップを作成します。
ypinit を使用して、新規に NIS マップを主サーバーに構築するには、次の手順に従います。
主サーバーの root になって、確実にネームサービスが NIS ではなく /etc ファイルから情報を得るようにします。次のように入力します。
# cp /etc/nsswitch.files /etc/nsswitch.conf
/etc/hosts ファイルを編集して、NIS サーバーのそれぞれの名前と IP アドレスを追加します。
次のように入力して、新しいマップを主サーバーで構築します。
# /usr/sbin/ypinit -m
ypinit は、NIS スレーブサーバーになる他のマシンの入力を要求します。作業中のサーバー名と NIS スレーブサーバー名を入力します。
致命的ではないエラーが発生したときすぐに手続きを終了するか、または致命的ではないエラーが発生しても継続するかを ypinit が問い合わせます。y を入力します。
y を選択すると、ypinit は最初の問題が発生すると終了します。問題を解決して、ypinit を再開できます。ypinit を最初に実行する場合には、この手順を実行するようにしてください。継続する場合には、発生する問題をすべて手作業で解決してから、ypinit を再度実行します。
マップファイルの一部が存在しない場合に、致命的ではないエラーが表示されることがあります。これは NIS の機能に影響するエラーではありません。自動的に作成されない場合には、マップを手作業で追加できます。デフォルトの NIS マップすべての説明は表 10-1 を参照してください。
ypinit が、/var/yp/domainname ディレクトリ内の既存のファイルを破棄してもよいかを問い合わせます。
このメッセージは、NIS が以前に設定されている場合にだけ表示されます。これに yes と回答して、NIS の新しいマップを設定します。
いったんサーバーのリストを構築すると、ypinit は make を起動します。
# 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 ターゲットです。このコマンドは password マップを、主サーバーが属するドメインではなく目的のドメインに転送します。