7. NIS クライアントの設定

7.1. ypbind デーモン

ソフトウェアがうまくコンパイルできたらインストールしましょう。 ypbind デーモンは /usr/sbin ディレクトリに入れると良いでしょう。 NYS のシステムでは ypbind は必要ないと言う人がいるようですが、 これは間違っています。 ypwhichypcat は、 かならず ypbind を必要とします。

ypbind のインストールはもちろんスーパーユーザで行う必要があります。 他のバイナリ (ypwhich, ypcat, yppoll, ypmatch) はすべてのユーザーからアクセス可能なディレクトリに置きましょう。 通常は /usr/bin が良いでしょう。

最近の ypbind には設定ファイル /etc/yp.conf があります。 ここに NIS サーバを直に書いておくこともできます。 詳しくは ypbind(8) のマニュアルを読んで下さい。 このファイルは NYS でも必要です。以下は例です。

ypserver 10.10.0.1
ypserver 10.0.100.8
ypserver 10.3.1.1

NIS なしでもホスト名の解決ができるシステムでは、 IP アドレスでなく名前を用いることができます。 そうでなければ IP アドレスを用います。 ypbind 3.3 にはバグがあり、最後のエントリ (上記の例では ypserver 10.3.1.1) しか用いられず、 他は全て無視されます。 ypbind-mt では正しく扱うことができ、 最初に返事したサーバが用いられます。

ypbind をスタートアップファイルに入れる前に テストしておくことをお勧めします。 ypbind のテストは以下のようにして行います。

ここまで来れば ypcat のような NIS クライアントプログラムを実行できるはずです。 例えば NIS のパスワードデータベースを参照したい場合には、 ypcat passwd.byname とします。

重要: もし上述の ypbind のテストを省略した場合、 少なくともドメインネームが設定してあることと /var/yp という名前のディレクトリが作ってあることを確認して下さい。 /var/yp がないと ypbind は正常に起動できません。

ドメインネームの設定が正しいかどうかをチェックするには、 yp-tools 2.2 の /bin/ypdomainname を使って下さい。 このプログラムは yp_get_default_domain() 関数を使うので、 より厳しいチェックができます。 例えば Linux でデフォルトになっている (そして多くの問題の原因になっている) "(none)" のようなドメイン名は、 このプログラムでは許可されません。

テストがうまくいったらスタートアップファイルを変更して、ブート時に ypbind が起動されるようにしておくと良いでしょう。 自動的に NIS クライアントとしての活動が開始されます。 ypbind の起動前に、 ドメインネームが設定されるようにするのも忘れないこと。

以上で設定は終了しました。リブートして、ブートメッセージで ypbind が正常に動作しているかどうか確認して下さい。

7.2. trad-NIS を用いた NIS クライアントをセットアップする

ホストの名前解決に NIS を用いるには、 /etc/host.conf ファイルで解決順を指定する行に "nis" を指定 (または追加) して下さい。 詳細に付いては resolv+(8) のマニュアルを読んで下さい。

以下の行を NIS クライアントの /etc/passwd に追加して下さい。

+::::::

+ や - といった文字を使えば、 ユーザーを追加/削除したり状態を変更したりできます。 例えばユーザ guest を削除したいなら /etc/passwd ファイルに -guest を追加すれば OK です。 ユーザ "linux" に違ったシェル (例えば ksh) を使わせたいですって? 大丈夫、"+linux::::::/bin/ksh" を /etc/passwd に追加するだけです (引用符は取って下さい)。 変更したくないフィールドは空のままにしておく必要があります。 ユーザのコントロールにはネットグループを用いることもできます。

例えば「ログインアクセスを miquiels, dth, ed とネットグループ sysadmin のメンバーだけに限りたいが、アカウントデータは他のユーザ全員分が必要」 というような場合は以下のようになります。

+miquels:::::::
+ed:::::::
+dth:::::::
+@sysadmins:::::::
-ftp
+:*::::::/etc/NoShell

Linux ではパスワードのフィールドも上書きできることに注意して下さい。や り方は今の例と全く同じです。この例では "ftp" のログインも 削除しています。従ってこのユーザは存在しなくなり、 anonymous ftp は機能しなくなります。

/etc/netgroup ファイルは以下のようになっていると思います。

sysadmins (-,software,) (-,kukuk,)

重要:ネットグループの機能は libc 4.5.26 から実装されました。 4.5.26 以前の libc を使っている Linux マシンで ypbind を実行すると、 NIS のパスワードデータベースにエントリを持つすべてのユーザは そのマシンにアクセスできてしまいます!

7.3. NYS を用いた NIS クライアントをセットアップする

必要なのは NIS の設定ファイル (/etc/yp.conf) で正しいサーバ(群)から情報をもらえるようにしておくこと、 そしてネームサービススイッチの設定ファイル (/etc/nsswitch.conf) を正しく設定することです。

ypbind もインストールしておきましょう。 libc には必要ありませんが、 NIS(YP) の各ツールにはこれが必要になります。

ユーザの追加・排除機能 (+/-guest/+@admins) を用いたい場合は、 "passwd: compat" と "group: compat" を nsswitch.conf で指定する必要があります。 "shadow: compat" という指定はありません。 この場合は "shadow: files nis" のようにして下さい。

NYS のソースは libc 5 のソースに同梱されています。 configure を実行し、 "Values correct" の問いに対して一度目は "NO" と答えて下さい。そして "Build a NYS libc from nys" に対して "YES" と答えて下さい。

7.4. glibc 2.x を用いた NIS クライアントをセットアップする

glibc は trad-NIS を利用します。従って ypbind を起動する必要があります。 またネームサービススイッチの設定ファイル (/etc/nsswitch.conf) も正しく設定する必要があります。 passwd/, shadow, group に compat モードを使う場合は、これらのファイルの最後に "+" を追加する必要があります。 ユーザの追加・削除機能を用いることもできます。 設定は Solaris 2.x のものとまったく同じです。

7.5. nsswitch.conf ファイル

ネットワークサービススイッチのファイル /etc/nsswitch.conf は、 情報へのアクセス要求が来たときに行う検索の順番を決定するものです。 ホスト名の検索で用いられる /etc/host.conf ファイルと似ています。 例えばこのファイルにおいて

hosts: files nis dns

と指定すれば、ホスト名の検索機能はまずローカルの /etc/hosts ファイルを探し、 次に NIS、そしてドメインネームサービス (/etc/resolv.confnamed) という順番で検索を行います。 最後までマッチするものがなければ、 エラーが返されることになります。このファイルは全てのユーザから 読み取り可能でなければなりません!より詳細な情報は nsswitch.5 か nsswitch.conf.5 のマニュアルページを見てください。

NIS 用の /etc/nsswitch.conf ファイルとしては、 以下のようなものが良いでしょう。

#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Legal entries are:
#
#	nisplus			Use NIS+ (NIS version 3)
#	nis			Use NIS (NIS version 2), also called YP
#	dns			Use DNS (Domain Name Service)
#	files			Use the local files
#	db			Use the /var/db databases
#	[NOTFOUND=return]	Stop searching if not found so far
#

passwd:     compat
group:      compat
# For libc5, you must use shadow: files nis
shadow:     compat

passwd_compat: nis
group_compat: nis
shadow_compat: nis

hosts:      nis files dns

services:   nis [NOTFOUND=return] files
networks:   nis [NOTFOUND=return] files
protocols:  nis [NOTFOUND=return] files
rpc:        nis [NOTFOUND=return] files
ethers:     nis [NOTFOUND=return] files
netmasks:   nis [NOTFOUND=return] files
netgroup:   nis
bootparams: nis [NOTFOUND=return] files
publickey:  nis [NOTFOUND=return] files
automount:  files
aliases:    nis [NOTFOUND=return] files

passwd_compat, group_compat, shadow_compat は glibc 2.x でのみサポートされています。 /etc/nsswitch.conf に shadow ルールがなければ、 glibc はパスワードの検索に passwd ルールを用います。 glibc 用の検索モジュールとして、 hesoid のようなものも存在しています。 これについては glibc の文書を読んでください。

7.6. Shadow パスワードと NIS

NIS に shadow パスワードを流通させるのは良い考えではありません。 shadow システムのメリットであるセキュリティが失われてしまうからです。 それにこれがサポートされている Linux C ライブラリは少数に過ぎません。 NIS 上に shadow を流さないようにするには、 ローカルシステムのユーザだけを /etc/shadow に登録することです。 NIS に流すユーザエントリを shadow データベースから削除し、 それらのパスワードは passwd に書いて下さい。 こうすれば root ログインには shadow を、 一般の NIS ユーザには passwd を用いることができるようになります。 この方法なら、すべての NIS クライアントでうまく動作します。

7.6.1. Linux

NIS で shadow パスワードを用いることができる唯一の Linux libc は GNU C Library 2.x です。 Linux libc5 はこれをサポートしていません。 Linux libc5 を NYS と一緒にコンパイルした場合は、 多少のコードが含まれることにはなります。 でもこのコードは状況によってはひどく壊れてしまい、 shadow エントリが全て正しい場合でも動作しないことがあります。

7.6.2. Solaris

Solaris は NIS 上での shadow パスワードをサポートしていません。

7.6.3. PAM

PAM は NIS 上での shadow パスワードをサポートしません。 特に pam_pwdb/libpwdb がだめなんです。 これは RedHat 5.x ユーザにとって大きな問題です。 glibc と PAM を使っている場合は、 /etc/pam.d/* のエントリを変更する必要があります。 pam_unix_* モジュールにある pam_pwdb のルールを置き換えて下さい。 しかし pam_unix_auth.so モジュールにはバグがあるので、 これは必ず動作するとは限りません。

/etc/pam.d/login の例を以下にあげます。

#%PAM-1.0
auth       required	/lib/security/pam_securetty.so
auth       required	/lib/security/pam_unix.so
auth       required	/lib/security/pam_nologin.so
account    required	/lib/security/pam_unix.so
password   required	/lib/security/pam_unix.so
session    required	/lib/security/pam_unix.so