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.3. PAM

Linux-PAM 0.75 以降では NIS 経由の shadow パスワードをサポートしています。 pam_unix.so モジュールか、拡張モジュールの pam_unix2.so を使います。 pam_pwdb や libpwdb を使っている古いシステム (Red Hat Linux 5.x など) では、 /etc/pam.d/* のエントリを変更する必要があります。 pam_pwdb のルールを、すべて pam_unix_* モジュール経由に置き換えます。

/etc/pam.d/login の例を次に示します。

#%PAM-1.0
auth     requisite      pam_unix2.so            nullok #set_secrpc
auth     required       pam_securetty.so
auth     required       pam_nologin.so
auth     required       pam_env.so
auth     required       pam_mail.so
account  required       pam_unix2.so
password required       pam_pwcheck.so          nullok
password required       pam_unix2.so            nullok use_first_pass use_authtok
session  required       pam_unix2.so            none # debug or trace
session  required       pam_limits.so