マスターサーバーの設定では、マスターサーバーの情報源 (入力テキストファイル) の NIS マスターサーバーマップへの変換が必要です。これを行う前にすべき準備があります。
入力ファイルはマスターサーバーの /etc ディレクトリか、その他のディレクトリに置かれます。/etc に置くのは望ましくありません。マップの内容が、マスターサーバーのローカルファイルの内容と同じになるからです。これは passwd と shadow のファイルに特有の問題です。ユーザー全員がマスターサーバーのマップにアクセスして、passwd マップを通じて YP クライアントのすべてに root のパスワードが渡されるためです。この詳細は、「passwd ファイルと名前空間のセキュリティ」を参照してください。
他のディレクトリにソースファイルを置く場合に、your-choice がソースファイルの格納に使用するディレクトリの名前であるときは、/var/yp 内の Makefile を修正して、DIR=/etc 行を DIR=/your-choice に変更する必要があります。これによって、クライアント上のファイルのようにサーバー上のローカルファイルを取り扱うことができます。Makefile を編集する前に、編集前の Makefile を別の名前のファイルに保存しておくことをお勧めします。
passwd マップは特殊なケースです。古い Solaris 1.x の passwd ファイル形式の他に、この NIS の実装は、NIS のパスワードマップの構築用の入力として Solaris 8 リリースの/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 マップへのファイルの変換 | ||||||||
マスターサーバーの準備 |
|
ypinit を使用して設定する |
| ||||||
NIS マップへの変換用の入力ファイルを準備します。
マスターサーバーの入力ファイルを確認して、システム環境の最新の状態が反映されていることを確認します。
次のファイルを確認します。
auto.home または auto_home
auto.master または auto_master
bootparams
ethers
group
hosts
ipnodes
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 のコメントを解除 (有効化) します。
# # Copyright (c) 1996-1999, by Sun Microsystems, Inc. # All rights reserved. # #pragma ident "@(#)Makefile 1.25 99/06/01 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 ipnodes (IPv6 hosts file) lives in a directory other than # /etc/inet, then you'll need to change the following line. # INETDIR=/etc/inet # # 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` NOPUSH = "" ALIASES = /etc/mail/aliases YPDIR=/usr/lib/netsvc/yp SBINDIR=/usr/sbin YPDBDIR=/var/yp YPPUSH=$(YPDIR)/yppush MAKEDBM=$(SBINDIR)/makedbm MULTI=$(YPDIR)/multi REVNETGROUP=$(SBINDIR)/revnetgroup STDETHERS=$(YPDIR)/stdethers STDHOSTS=$(YPDIR)/stdhosts MKNETID=$(SBINDIR)/mknetid MKALIAS=$(YPDIR)/mkalias CHKPIPE= || ( echo "NIS make terminated:" $@ 1>&2; kill -TERM 0 ) k: @if [ ! $(NOPUSH) ]; then $(MAKE) $(MFLAGS) -k all; ¥ else $(MAKE) $(MFLAGS) -k all NOPUSH=$(NOPUSH);fi all: passwd group hosts ipnodes ethers networks rpc services protocols ¥ netgroup bootparams aliases publickey netid netmasks c2secure ¥ timezone auto.master auto.home ¥ auth.attr exec.attr prof.attr user.attr audit.user c2secure: -@if [ -f $(PWDIR)/security/passwd.adjunct ]; then ¥ if [ ! $(NOPUSH) ]; then $(MAKE) $(MFLAGS) -k ¥ passwd.adjunct.time group.adjunct.time; ¥ else $(MAKE) $(MFLAGS) -k NOPUSH=$(NOPUSH) ¥ passwd.adjunct.time group.adjunct.time; ¥ fi; ¥ fi 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; ¥ elif [ -f $(PWDIR)/shadow ]; then ¥ (nawk 'BEGIN { FS=":"; OFS=":"; while ( getline < "$(PWDIR)/shadow" > 0) ¥ shadow[$$1] = $$2; } /^[a-zA-Z0-9_]/ { $$2 = shadow[$$1]; ¥ printf "%s¥t%s¥n",$$1,$$0 }' $(PWDIR)/passwd $(CHKPIPE))| ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/passwd.byname; ¥ (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 ipnodes.time: $(INETDIR)/ipnodes @($(MULTI) -n $(B) -l $(INETDIR)/ipnodes); @($(STDHOSTS) -n $(INETDIR)/ipnodes $(CHKPIPE))| ¥ (awk 'BEGIN { OFS="¥t"; } $$1 !‾ /^#/ { print $$1, $$0 }' $(CHKPIPE)) | ¥ $(MAKEDBM) $(B) - $(YPDBDIR)/$(DOM)/ipnodes.byaddr; @touch ipnodes.time; @echo "updated ipnodes"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) ipnodes.byname; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) ipnodes.byaddr; fi @if [ ! $(NOPUSH) ]; then echo "pushed ipnodes"; fi hosts.time: $(DIR)/hosts @($(MULTI) $(B) -l $(DIR)/hosts); @($(STDHOSTS) $(DIR)/hosts $(CHKPIPE))| ¥ (awk 'BEGIN { OFS="¥t"; } $$1 !‾ /^#/ { print $$1, $$0 }' $(CHKPIPE)) | ¥ $(MAKEDBM) $(B) - $(YPDBDIR)/$(DOM)/hosts.byaddr; @touch hosts.time; @echo "updated hosts"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) hosts.byname; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) hosts.byaddr; fi @if [ ! $(NOPUSH) ]; then echo "pushed hosts"; fi ethers.time: $(DIR)/ethers @($(STDETHERS) $(DIR)/ethers $(CHKPIPE)) ¥ |(awk '{print $$1, $$0; for (i = 3;i <= NF;i++) print $$i,$$0}' $(CHKPIPE)) ¥ | $(MAKEDBM) - $(YPDBDIR)/$(DOM)/ethers.byaddr @(awk 'BEGIN { OFS="¥t"; } $$1 !‾ /^#/ { print $$2, $$0 }' ¥ $(DIR)/ethers $(CHKPIPE)) | ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/ethers.byname; @touch ethers.time; @echo "updated ethers"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) ethers.byname; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) ethers.byaddr; fi @if [ ! $(NOPUSH) ]; then echo "pushed ethers"; fi networks.time: $(DIR)/networks @(sed -e "/^#/d" -e s/#.*$$// $(DIR)/networks $(CHKPIPE)) |( awk ¥ '{print $$1, $$0; for (i = 3;i <= NF;i++) print $$i,$$0}' ¥ $(CHKPIPE) )| $(MAKEDBM) - $(YPDBDIR)/$(DOM)/networks.byname; @(awk 'BEGIN { OFS="¥t"; } $$1 !‾ /^#/ { print $$2, $$0 }' ¥ $(DIR)/networks $(CHKPIPE)) | $(MAKEDBM) - $(YPDBDIR)/$(DOM)/networks.byaddr; @touch networks.time; @echo "updated networks"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) networks.byname; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) networks.byaddr; fi @if [ ! $(NOPUSH) ]; then echo "pushed networks"; fi services.time: $(DIR)/services @(awk 'BEGIN { OFS="¥t"; } $$1 !‾ /^#/ { print $$2, $$0 }' ¥ $(DIR)/services $(CHKPIPE))| $(MAKEDBM) - $(YPDBDIR)/$(DOM)/services.byname; @(awk 'BEGIN { OFS="¥t"; } ¥ $$1 !‾ /^#/ { split($$2,pp,"/"); printf("%s/%s %s¥n", $$1, pp[2], $$0);¥ if (seen[$$1] == "") {¥ printf("%s %s¥n", $$1, $$0); seen[$$1]=$$1;} ¥ for (i = 3; i <= NF && $$i !‾ /^#/; i++) ¥ printf("%s/%s %s¥n", $$i, pp[2], $$0)}' ¥ $(DIR)/services $(CHKPIPE)) | ¥ $(MAKEDBM) $(B) - $(YPDBDIR)/$(DOM)/services.byservicename @touch services.time; @echo "updated services"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) services.byname; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) services.byservicename; fi @if [ ! $(NOPUSH) ]; then echo "pushed services"; fi rpc.time: $(DIR)/rpc @(awk 'BEGIN { OFS="¥t"; } $$1 !‾ /^#/ { print $$2, $$0 }' ¥ $(DIR)/rpc $(CHKPIPE))| $(MAKEDBM) - $(YPDBDIR)/$(DOM)/rpc.bynumber; @touch rpc.time; @echo "updated rpc"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) rpc.bynumber; fi @if [ ! $(NOPUSH) ]; then echo "pushed rpc"; fi protocols.time: $(DIR)/protocols @(awk 'BEGIN { OFS="¥t"; } $$1 !‾ /^#/ { print $$2, $$0 }' ¥ $(DIR)/protocols $(CHKPIPE)) | $(MAKEDBM) - ¥ $(YPDBDIR)/$(DOM)/protocols.bynumber; @(sed -e "/^#/d" -e s/#.*$$// $(DIR)/protocols $(CHKPIPE)) |( awk ¥ '{print $$1,$$0; for (i = 3;i <= NF;i++) print $$i, $$0}' ¥ $(CHKPIPE))| $(MAKEDBM) - $(YPDBDIR)/$(DOM)/protocols.byname; @touch protocols.time; @echo "updated protocols"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) protocols.byname; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) protocols.bynumber; fi @if [ ! $(NOPUSH) ]; then echo "pushed protocols"; fi netgroup.time: $(DIR)/netgroup @$(MAKEDBM) $(DIR)/netgroup $(YPDBDIR)/$(DOM)/netgroup @($(REVNETGROUP) < $(DIR)/netgroup -u $(CHKPIPE))| $(MAKEDBM) - $(YPDBDIR)/$(DOM)/netgroup.byuser @($(REVNETGROUP) < $(DIR)/netgroup -h $(CHKPIPE))| $(MAKEDBM) - $(YPDBDIR)/$(DOM)/netgroup.byhost @touch netgroup.time; @echo "updated netgroup"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) netgroup; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) netgroup.byuser; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) netgroup.byhost; fi @if [ ! $(NOPUSH) ]; then echo "pushed netgroup"; fi bootparams.time: $(DIR)/bootparams @(sed -e '/^#/d' -e s/#.*$$// -e 's/[ ][ ]*$$//' ¥ -e '/¥¥$$/s/¥¥$$/ /' $(DIR)/bootparams $(CHKPIPE))¥ |( awk '/ $$/ {printf "%s", $$0} !/ $$/ {print}' $(CHKPIPE))¥ |( sed -e 's/[ ][ ]*/ /g' $(CHKPIPE))¥ | $(MAKEDBM) - $(YPDBDIR)/$(DOM)/bootparams; @touch bootparams.time; @echo "updated bootparams"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) bootparams; fi @if [ ! $(NOPUSH) ]; then echo "pushed bootparams"; fi aliases.time: $(ALIASES) @cp $(ALIASES) $(YPDBDIR)/$(DOM)/mail.aliases; @/usr/lib/sendmail -bi -oA$(YPDBDIR)/$(DOM)/mail.aliases; $(MKALIAS) $(YPDBDIR)/$(DOM)/mail.aliases $(YPDBDIR)/$(DOM)/mail.byaddr; @rm $(YPDBDIR)/$(DOM)/mail.aliases; @touch aliases.time; @echo "updated aliases"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) mail.aliases; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) mail.byaddr; fi @if [ ! $(NOPUSH) ]; then echo "pushed aliases"; fi netmasks.time: $(DIR)/netmasks $(MAKEDBM) $(DIR)/netmasks $(YPDBDIR)/$(DOM)/netmasks.byaddr; @touch netmasks.time; @echo "updated netmasks"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) netmasks.byaddr; fi @if [ ! $(NOPUSH) ]; then echo "pushed netmasks"; fi publickey.time: $(DIR)/publickey @(sed "/^#/d" < $(DIR)/publickey $(CHKPIPE))| $(MAKEDBM) - $(YPDBDIR)/$(DOM)/publickey.byname; @touch publickey.time; @echo "updated publickey"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) publickey.byname; fi @if [ ! $(NOPUSH) ]; then echo "pushed publickey"; fi netid.time: $(PWDIR)/passwd $(DIR)/group $(DIR)/hosts $(DIR)/netid @$(MKNETID) -q -p $(PWDIR)/passwd -g $(DIR)/group -h $(DIR)/hosts -m $(DIR)/netid > .ypjunk; @$(MAKEDBM) .ypjunk $(YPDBDIR)/$(DOM)/netid.byname; @rm -f .ypjunk; @touch netid.time; @echo "updated netid"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) netid.byname; fi @if [ ! $(NOPUSH) ]; then echo "pushed netid"; fi # Old way. Could be restored by PSARC decision. # #passwd.adjunct.time: $(PWDIR)/security/passwd.adjunct # @(awk 'BEGIN { FS=":"; OFS="¥t"; } /^[a-zA-Z0-9_]/ { print $$1, $$0 }' $(PWDIR)/security/passwd.adjunct $(CHKPIPE)) | ¥ # $(MAKEDBM) -s - $(YPDBDIR)/$(DOM)/passwd.adjunct.byname; # @chmod 600 $(YPDBDIR)/$(DOM)/passwd.adjunct.byname.dir; # @chmod 600 $(YPDBDIR)/$(DOM)/passwd.adjunct.byname.pag; # @touch passwd.adjunct.time # @echo "updated passwd.adjunct"; # @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) passwd.adjunct.byname; fi # @if [ ! $(NOPUSH) ]; then echo "pushed passwd.adjunct"; fi passwd.adjunct.time: $(PWDIR)/security/passwd.adjunct $(PWDIR)/shadow -@if [ -f $(PWDIR)/shadow ]; then ¥ (nawk 'BEGIN { FS=":"; while (getline < "$(PWDIR)/shadow" > 0) ¥ shadow[$$1] = $$2; } /^[a-zA-Z0-9_]/ { $$2 = shadow[$$1]; OFS=":"; ¥ printf "%s¥t%s¥n", $$1, $$0 }' $(PWDIR)/security/passwd.adjunct $(CHKPIPE)) | ¥ $(MAKEDBM) -s - $(YPDBDIR)/$(DOM)/passwd.adjunct.byname; ¥ else ¥ (awk 'BEGIN { FS=":"; OFS="¥t"; } /^[a-zA-Z0-9_]/ { print $$1, $$0 }' ¥ $(PWDIR)/security/passwd.adjunct $(CHKPIPE)) | ¥ $(MAKEDBM) -s - $(YPDBDIR)/$(DOM)/passwd.adjunct.byname; ¥ fi @chmod 600 $(YPDBDIR)/$(DOM)/passwd.adjunct.byname.dir; @chmod 600 $(YPDBDIR)/$(DOM)/passwd.adjunct.byname.pag; @touch passwd.adjunct.time @echo "updated passwd.adjunct"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) passwd.adjunct.byname; fi @if [ ! $(NOPUSH) ]; then echo "pushed passwd.adjunct"; fi group.adjunct.time: $(PWDIR)/security/group.adjunct @(awk 'BEGIN { FS=":"; OFS="¥t"; } /^[a-zA-Z0-9_]/ { print $$1, $$0 }' $(PWDIR)/security/group.adjunct $(CHKPIPE)) | ¥ $(MAKEDBM) -s - $(YPDBDIR)/$(DOM)/group.adjunct.byname; @chmod 600 $(YPDBDIR)/$(DOM)/group.adjunct.byname.dir; @chmod 600 $(YPDBDIR)/$(DOM)/group.adjunct.byname.pag; @touch group.adjunct.time @echo "updated group.adjunct"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) group.adjunct.byname; fi @if [ ! $(NOPUSH) ]; then echo "pushed group.adjunct"; fi timezone.time: $(DIR)/timezone -@if [ -f $(DIR)/timezone ]; then ¥ sed -e "/^#/d" -e s/#.*$$// $(DIR)/timezone ¥ | awk '{for (i = 2; i<=NF; i++) print $$i, $$0}' ¥ | $(MAKEDBM) - $(YPDBDIR)/$(DOM)/timezone.byname; ¥ touch timezone.time; ¥ echo "updated timezone"; ¥ if [ ! $(NOPUSH) ]; then ¥ $(YPPUSH) timezone.byname; ¥ echo "pushed timezone"; ¥ else ¥ : ; ¥ fi ¥ else ¥ echo "couldn't find $(DIR)/timezone"; ¥ fi auto.master.time: $(DIR)/auto_master -@if [ -f $(DIR)/auto_master ]; then ¥ sed -e "/^#/d" -e s/#.*$$// $(DIR)/auto_master ¥ | $(MAKEDBM) - $(YPDBDIR)/$(DOM)/auto.master; ¥ touch auto.master.time; ¥ echo "updated auto.master"; ¥ if [ ! $(NOPUSH) ]; then ¥ $(YPPUSH) auto.master; ¥ echo "pushed auto.master"; ¥ else ¥ : ; ¥ fi ¥ else ¥ echo "couldn't find $(DIR)/auto_master"; ¥ fi auto.home.time: $(DIR)/auto_home -@if [ -f $(DIR)/auto_home ]; then ¥ sed -e "/^#/d" -e s/#.*$$// $(DIR)/auto_home ¥ | $(MAKEDBM) - $(YPDBDIR)/$(DOM)/auto.home; ¥ touch auto.home.time; ¥ echo "updated auto.home"; ¥ if [ ! $(NOPUSH) ]; then ¥ $(YPPUSH) auto.home; ¥ echo "pushed auto.home"; ¥ else ¥ : ; ¥ fi ¥ else ¥ echo "couldn't find $(DIR)/auto_home"; ¥ fi auth.attr.time: $(DIR)/auth_attr -@if [ -f $(DIR)/auth_attr ]; then ¥ sed -e "/^#/d" -e s/#.*$$// $(DIR)/auth_attr ¥ |sed -e '/¥¥$$/{:l' -e 'N;s/¥¥¥n//;t h' -e ':h' ¥ -e 's/¥¥$$/¥¥/;t l' -e } ¥ | (nawk 'BEGIN { FS=":"; OFS=":" } /^[a-zA-Z0-9_]/ ¥ {printf "%s:%s¥n", $$1, $$0 }' $(CHKPIPE)) ¥ | $(MAKEDBM) -S ":" -E - $(YPDBDIR)/$(DOM)/auth_attr; ¥ touch auth.attr.time; ¥ echo "updated auth_attr"; ¥ if [ ! $(NOPUSH) ]; then ¥ $(YPPUSH) auth_attr; ¥ echo "pushed auth_attr"; ¥ else ¥ : ; ¥ fi ¥ else ¥ echo "couldn't find $(DIR)/auth_attr"; ¥ fi exec.attr.time: $(DIR)/exec_attr -@if [ -f $(DIR)/exec_attr ]; then ¥ sed -e "/^#/d" -e s/#.*$$// $(DIR)/exec_attr ¥ |sed -e '/¥¥$$/{:l' -e 'N;s/¥¥¥n//;t h' -e ':h' ¥ -e 's/¥¥$$/¥¥/;t l' -e } ¥ | (nawk 'BEGIN { FS=":"; OFS=":" } /^[a-zA-Z0-9_]/ ¥ {printf "%s:%s:%s¥n", ¥ $$1, $$6, $$0 }' $(CHKPIPE)) ¥ | $(MAKEDBM) -S ":" -E -D 1 - $(YPDBDIR)/$(DOM)/exec_attr; ¥ touch exec.attr.time; ¥ echo "updated exec_attr"; ¥ if [ ! $(NOPUSH) ]; then ¥ $(YPPUSH) exec_attr; ¥ echo "pushed exec_attr"; ¥ else ¥ : ; ¥ fi ¥ else ¥ echo "couldn't find $(DIR)/exec_attr"; ¥ fi prof.attr.time: $(DIR)/prof_attr -@if [ -f $(DIR)/prof_attr ]; then ¥ sed -e "/^#/d" -e s/#.*$$// $(DIR)/prof_attr ¥ |sed -e '/¥¥$$/{:l' -e 'N;s/¥¥¥n//;t h' -e ':h' ¥ -e 's/¥¥$$/¥¥/;t l' -e } ¥ | (nawk 'BEGIN { FS=":"; OFS=":" } /^[a-zA-Z0-9_]/ ¥ {printf "%s:%s¥n", $$1, $$0 }' $(CHKPIPE)) ¥ | $(MAKEDBM) -S ":" -E - $(YPDBDIR)/$(DOM)/prof_attr; ¥ touch prof.attr.time; ¥ echo "updated prof_attr"; ¥ if [ ! $(NOPUSH) ]; then ¥ $(YPPUSH) prof_attr; ¥ echo "pushed prof_attr"; ¥ else ¥ : ; ¥ fi ¥ else ¥ echo "couldn't find $(DIR)/prof_attr"; ¥ fi user.attr.time: $(DIR)/user_attr -@if [ -f $(DIR)/user_attr ]; then ¥ sed -e "/^#/d" -e s/#.*$$// $(DIR)/user_attr ¥ |sed -e '/¥¥$$/{:l' -e 'N;s/¥¥¥n//;t h' -e ':h' ¥ -e 's/¥¥$$/¥¥/;t l' -e } ¥ | (nawk 'BEGIN { FS=":"; OFS=":" } /^[a-zA-Z0-9_]/ ¥ {printf "%s:%s¥n", $$1, $$0 }' $(CHKPIPE)) ¥ | $(MAKEDBM) -S ":" -E - $(YPDBDIR)/$(DOM)/user_attr; ¥ touch user.attr.time; ¥ echo "updated user_attr"; ¥ if [ ! $(NOPUSH) ]; then ¥ $(YPPUSH) user_attr; ¥ echo "pushed user_attr"; ¥ else ¥ : ; ¥ fi ¥ else ¥ echo "couldn't find $(DIR)/user_attr"; ¥ fi audit.user.time: $(DIR)/audit_user -@if [ -f $(DIR)/audit_user ]; then ¥ sed -e "/^#/d" -e s/#.*$$// $(DIR)/audit_user ¥ |sed -e '/¥¥$$/{:l' -e 'N;s/¥¥¥n//;t h' -e ':h' ¥ -e 's/¥¥$$/¥¥/;t l' -e } ¥ | (nawk 'BEGIN { FS=":"; OFS="¥t" } /^[a-zA-Z0-9_]/ ¥ {print $$1, $$0 }' $(CHKPIPE)) ¥ | $(MAKEDBM) -s - $(YPDBDIR)/$(DOM)/audit_user; ¥ touch audit.user.time; ¥ echo "updated audit_user"; ¥ if [ ! $(NOPUSH) ]; then ¥ $(YPPUSH) audit_user; ¥ echo "pushed audit_user"; ¥ else ¥ : ; ¥ fi ¥ else ¥ echo "couldn't find $(DIR)/audit_user"; ¥ fi passwd: passwd.time group: group.time hosts: hosts.time ipnodes: ipnodes.time ethers: ethers.time networks: networks.time rpc: rpc.time services: services.time protocols: protocols.time netgroup: netgroup.time bootparams: bootparams.time aliases: aliases.time publickey: publickey.time netid: netid.time passwd.adjunct: passwd.adjunct.time group.adjunct: group.adjunct.time netmasks: netmasks.time timezone: timezone.time auto.master: auto.master.time auto.home: auto.home.time auth.attr:auth.attr.time exec.attr:exec.attr.time prof.attr:prof.attr.time user.attr:user.attr.time audit.user:audit.user.time $(DIR)/netid: $(DIR)/timezone: $(DIR)/auto_master: $(DIR)/auto_home: $(PWDIR)/shadow: $(DIR)/auth_attr: $(DIR)/exec_attr: $(DIR)/prof_attr: $(DIR)/user_attr: $(DIR)/audit_user: |
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 ファイルまたは /etc/inet/ipnodes ファイルを編集して、NIS サーバーのそれぞれの名前と IP アドレスを追加します。
次のように入力して、新しいマップをマスターサーバーで構築します。
# /usr/sbin/ypinit -m |
ypinit は、NIS スレーブサーバーになる他のマシンの入力を要求します。作業中のサーバー名と NIS スレーブサーバー名を入力します。
致命的ではないエラーが発生したときすぐに手続きを終了するか、または致命的ではないエラーが発生しても継続するかを ypinit が問い合わせます。y を入力します。
y を選択すると、ypinit は最初の問題が発生すると終了します。問題を解決して、ypinit を再開できます。ypinit を最初に実行する場合には、この手順を実行するようにしてください。継続する場合には、発生する問題をすべて手作業で解決してから、ypinit を再度実行します。
マップファイルの一部が存在しない場合に、致命的ではないエラーが表示されることがあります。これは NIS の機能に影響するエラーではありません。自動的に作成されない場合には、マップを手作業で追加できます。デフォルトの NIS マップすべての説明は表 10-3 を参照してください。
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 マップを、マスターサーバーが属するドメインではなく目的のドメインに転送します。