Solaris ネーミングの設定と構成

マスターサーバーの準備

マスターサーバーの設定では、マスターサーバーの情報源 (入力テキストファイル) の NIS マスターサーバーマップへの変換が必要です。これを行う前にすべき準備があります。

入力ファイルディレクトリ

入力ファイルはマスターサーバーの /etc ディレクトリか、その他のディレクトリに置かれます。/etc に置くのは望ましくありません。マップの内容が、マスターサーバーのローカルファイルの内容と同じになるからです。これは passwdshadow のファイルに特有の問題です。ユーザー全員がマスターサーバーのマップにアクセスして、passwd マップを通じて YP クライアントのすべてに root のパスワードが渡されるためです。この詳細は、「passwd ファイルと名前空間のセキュリティ」を参照してください。

他のディレクトリにソースファイルを置く場合に、your-choice がソースファイルの格納に使用するディレクトリの名前であるときは、/var/yp 内の Makefile を修正して、DIR=/etc 行を DIR=/your-choice に変更する必要があります。これによって、クライアント上のファイルのようにサーバー上のローカルファイルを取り扱うことができます。Makefile を編集する前に、編集前の Makefile を別の名前のファイルに保存しておくことをお勧めします。

passwd ファイルと名前空間のセキュリティ

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 (パスワードマクロ) を変更して、passwdshadow のファイルのあるディレクトリを参照するようにします。passwd マップ入力ファイルの格納に使用するディレクトリ名が your-choice の場合には、PWDIR=/etc の行を PWDIR=/your-choice に変更します。


注意 - 注意 -

ディレクトリ内で PWDIR によって指定された passwd ファイルに root に対するエントリが含まれないようにしてください。


マスターサーバーの準備 - タスクマップ

表 10-1 マスターサーバーの準備
 

タスク 

 

説明 

 

指示の参照先 

 
 

マスターサーバーの準備 

 

NIS マップへのファイルの変換 

 

「NIS マップへの変換用ソースファイルの準備」

 
 

マスターサーバーの準備 

   

ypinit を使用して設定する

   

ypinit によるマスターサーバーの設定」

 
       

NIS マップへの変換用ソースファイルの準備

NIS マップへの変換用の入力ファイルを準備します。

  1. マスターサーバーの入力ファイルを確認して、システム環境の最新の状態が反映されていることを確認します。

    次のファイルを確認します。

    • auto.home または auto_home

    • auto.master または auto_master

    • bootparams

    • ethers

    • group

    • hosts

    • ipnodes

    • netgroup

    • netmasks

    • networks

    • passwd

    • protocols

    • rpc

    • services

    • shadow

  2. passwd 以外のこれら入力ファイルのすべてを、選択した DIR ディレクトリにコピーします。

  3. passwd ファイルを選択した PWDIR ディレクトリにコピーします。

  4. /etc/mail/aliases ファイルを確認します。

    他の入力ファイルと異なり、/etc/mail/aliases ファイルは別のディレクトリに移動できません。このファイルは /etc/mail ディレクトリになければなりません。ドメイン全体で利用しようとするメールエイリアスがすべて含まれていることを検証して、/etc/mail/aliases ファイルが完全なことを確認します。詳細は、aliases(4) のマニュアルページを参照してください。

  5. 入力ファイルからすべてのコメント、その他の余計な行や情報を取り除きます。

    これら操作は、sed または awk のスクリプトを通じて、またはテキストエディタを使用して行えます。Makefile は入力ファイルから不要なエントリをある程度自動的に削除しますが、手作業で検証し、取り除いてから、実行するようにしてください。

  6. すべての入力ファイルのデータが正しい形式になっていることを確認します。

    入力ファイルのデータは、それぞれのファイル用の形式になっている必要があります。該当するマニュアルページを参照して、各ファイルが正しい形式になっていることを確認します。

Makefile の準備

入力ファイルを確認して、それを入力ファイルディレクトリにコピーした後に、NIS サービスが使用する ndbm 形式のマップに、その入力ファイルを変換する必要があります。ypinit によるマスターサーバーの設定」の節で説明するとおり、これはマスターサーバーで ypinit が実行されると自動的に行われます。

ypinit スクリプトは、プログラム make を呼び出します。このプログラムは、/var/yp ディレクトリに置かれた Makefile を使用します。例 10-1 のようなデフォルトの Makefile が、/var/yp ディレクトリで提供されます。この Makefile は、入力ファイルの ndbm 形式マップへの変換に必要なコマンドを含みます。

Makefile はそのまま使用でき、必要なら修正もできます。デフォルトの Makefile を修正するときは、将来必要な場合に備えて最初にオリジナルのデフォルト Makefile をコピーして格納してください。次の Makefile への修正のうちの 1 つまたは複数を実行する必要がある場合があります。


例 10-1 修正前のデフォルトの Makefile


#
# 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.dirmapname.pag の 2 つのファイルに保存されます。この両方はマスターサーバーの /var/yp/domainname ディレクトリに置かれます。

Makefile は、/PWDIR/passwd/PWDIR/shadow/PWDIR/security/passwd.adjunct ファイルから passwd マップを適宜作成します。

ypinit によるマスターサーバーの設定

/usr/sbin/ypinit シェルは、マスターサーバー、スレーブサーバー、クライアントが NIS を使用するように設定します。また最初に make を実行して、マスターサーバー上にマップを作成します。

ypinit を使用して、新規に NIS マップをマスターサーバーに構築するには、次の手順に従います。

  1. マスターサーバーの root になって、確実にネームサービスで NIS ではなく /etc ファイルから情報を得るようにします。次のように入力します。


    # cp /etc/nsswitch.files /etc/nsswitch.conf
    

  2. /etc/hosts ファイルまたは /etc/inet/ipnodes ファイルを編集して、NIS サーバーのそれぞれの名前と IP アドレスを追加します。

  3. 次のように入力して、新しいマップをマスターサーバーで構築します。


    # /usr/sbin/ypinit -m
    

  4. ypinit は、NIS スレーブサーバーになる他のマシンの入力を要求します。作業中のサーバー名と NIS スレーブサーバー名を入力します。

  5. 致命的ではないエラーが発生したときすぐに手続きを終了するか、または致命的ではないエラーが発生しても継続するかを ypinit が問い合わせます。y を入力します。

    y を選択すると、ypinit は最初の問題が発生すると終了します。問題を解決して、ypinit を再開できます。ypinit を最初に実行する場合には、この手順を実行するようにしてください。継続する場合には、発生する問題をすべて手作業で解決してから、ypinit を再度実行します。


    注 -

    マップファイルの一部が存在しない場合に、致命的ではないエラーが表示されることがあります。これは NIS の機能に影響するエラーではありません。自動的に作成されない場合には、マップを手作業で追加できます。デフォルトの NIS マップすべての説明は表 10-3 を参照してください。


  6. ypinit が、/var/yp/domainname ディレクトリ内の既存のファイルを破棄してもよいかを問い合わせます。

    このメッセージは、NIS が以前に設定されている場合にだけ表示されます。これに yes と回答して、NIS の新しいマップを設定します。

  7. いったんサーバーのリストを構築すると、ypinitmake を起動します。


    # make
    

    このプログラムは、/var/yp に置かれる Makefile (デフォルトまたは修正されたもの) に含まれる命令を使用します。make コマンドは、指定したファイルにコメント行があれば、それを取り除き、それに対して makedbm を実行します。適切なマップを作成して、各マップにマスターサーバー名を設定します。

    マスターサーバー上で domainname コマンドを実行した時に返されるドメイン名以外のドメイン用のマップの転送が Makefile で行われる場合、次のように ypinit シェルスクリプト中で起動される make コマンドに適切なドメイン名を変数 DOM で指定することで、確実にマップが正しいドメインに転送されるようにすることができます。


    # make DOM=domainname password
    

    これは password マップを、マスターサーバーが属するドメインではなく目的のドメインに転送します。

  8. 次のように入力して、ネームサービスとして NIS を使用します。


    # cp /etc/nsswitch.nis /etc/nsswitch.conf
    

    これは、現在のスイッチファイルをデフォルトの NIS 用スイッチファイルに置き換えます。このファイルは必要に応じて編集可能です。

複数の NIS ドメインをサポートするマスターサーバー

通常 NIS マスターサーバーは、NIS ドメインだけをサポートします。しかしマスターサーバーを使用して、複数のドメインをサポートする場合には、追加ドメイン用にサーバーを設定する際に、前述の節で説明した手順を若干修正する必要があります。

サーバー上で domainname コマンドを実行します。コマンドが戻すドメイン名は、サーバーのデフォルトドメインです。前述の節で説明した手順は、そのドメインへのサービスの設定では正しく機能します。他のドメインに対してサービスを構成するには、ypinit シェルスクリプトを次のように修正する必要があります。


# make DOM=correct-domain passwd

correct-domain は、サービスを設定している他のドメインの名前であり、passwdmake ターゲットです。このコマンドは password マップを、マスターサーバーが属するドメインではなく目的のドメインに転送します。