## The Linux NIS(YP)/NYS/NIS+ HOWTO

Thorsten
Kukuk
中野武雄
(日本語訳)
v1.3j1 2003-10-19 (原文 1 July 2003)

この文書では Linux を NIS(YP) または NIS+ のクライアントに設定する方法、 および NIS サーバをインストールする方法について述べます。

## はじめに

Linux マシンはどんどんネットワークに接続されるようになってきました。 またネットワーク管理の簡略化のために、ほとんどのネットワーク (特に Sun がベースになっているネットワーク) では NIS が動いています。 Linux マシンでは、これらの NIS サービスを余すところなく受けたり、 また提供したりすることができます。 また Linux マシンは、完全に機能する NIS+ クライアントとして動作させることもできます。 ただしこちらはまだベータの段階です。

この文書は Linux マシンに NIS(YP) と NIS+ をセットアップする方法について記述したものです。 いずれを採用するにしても は必ず読んで下さい。

NIS-HOWTO は

Thorsten Kukuk kukuk@suse.de

によって編集・管理されています。

以前の NIS-HOWTO は、以下の人々によって執筆されました。彼らに感謝します。

Andrea Dell'Amico | <adellam@ZIA.ms.it>
Mitchum DSouza | <Mitch.DSouza@NetComm.IE>
Erwin Embsen | <erwin@nioz.nl>
Peter Eriksson | <peter@ifm.liu.se>

訳注： v0.2 の日本語訳は根岸良征さんによって公開されました。 0.6 への追随と以降の管理は中野武雄が行っています。

### この文書の最新版

この文書の最新版はいつでも WWW で閲覧することができます。 URL は http://www.linux-nis.org/nis-howto/HOWTO/NIS-HOWTO.html です。

このドキュメントの最新版は、 Linux 関連の WWW サイトや FTP サイトにも登録されます。 もちろん LDP のホームページにもあります。

翻訳文書へのリンクは http://www.linux-nis.org/nis-howto/ にまとめてあります。

訳注： 日本語版の文書の最新版は JF Project のページ に置かれます。

### 免責

この文章は私の知識を最大限集めて書いたつもりですが、 正確でない部分もあるかもしれません。 この文書で紹介しているプログラムについては、 それぞれに付属している README ファイルを必ず読んで下さい。 それらにはより詳しい説明やより正確な情報が書かれているはずですので。 もちろんこのドキュメントも できるだけ間違いのないものにしていきたいと考えています。

### フィードバックと今後の改版

この文書に関する質問やコメントがありましたら、お気軽に Thorsten Kukuk までメールを下さい。アドレスは kukuk@linux-nis.org です。提案や批判も歓迎します。 この文書に誤りを見つけたら、私に連絡して下されば次の版で訂正します。 よろしくお願いします。

訳注：翻訳に対するコメントは中野武雄 nakano@apm.seikei.ac.jp までお願いします。

なお、あなたの Linux 配布パッケージに特有の問題に関しては 私にメールを送らないで下さい！ 私はすべての配布パッケージを知っている訳ではありません。 ただ、もし解決法も送っていただければ、文書に追加したいとは思っています。

### 謝辞

このドキュメントを作成するにあたって、直接的あるいは間接的にお世話になり ました以下の方々に感謝します。アルファベット順に：

Byron A Jeff | <byron@cc.gatech.edu>
Markus Rex | <msrex@suse.de>
Miquel van Smoorenburg | <miquels@cistron.nl>
Dan York | <dyork@lodestar2.com>
Christoffer Bromberg | <christoffer@web.de>

yp-clients のオリジナルコードは Theo de Raadt によって作成されました。 Swen Thuemmler が yp-clients のコードを Linux に移植し、 yp 関連のルーチン (これも Theo の仕事) を libc に移植しました。 Thorsten Kukuk は GNU libc 2.x 向けの NIS(YP) と NIS+ のルーチンをスクラッチから書きました。

訳注：日本語訳にあたっては、詳細な校正をして下さった 松本庄司さん、武井伸光さん、かねこさんをはじめ、 JF メーリングリストの皆さんにお世話になりました。

## 用語集と一般的な情報

### 用語集

このドキュメント中では多くの省略語が使われています。 以下に重要なものの説明を簡単に挙げておきます。

DBM

  データベースマネジメント (DataBase Management)。 検索キーとデータとのペアを管理するデータベース機能を 持ったライブラリのこと。

DLL

  動的リンクライブリ (Dynamically Linked Library)。 プログラムの実行時にリンクされるライブラリのこと。

domainname

  NIS サーバが発行するキーワード。 NIS クライアント側が使用する NIS サーバを特定するのに用いられる。 この domainname は DNS の "domain" と 同じものにする必要はなく、むしろ別にすべきである。

FTP

  ファイル転送プロトコル (File Transfer Protocol)。 コンピュータ間でファイルを転送する時に用いられるプロトコルの一つ。

libnsl

  ネームサービスライブラリ (Name services library)。 SVR4 Unix におけるネームサービス関連の命令 (getpwnam, getservbyname など) のライブラリ。 GNU libc では NIS (YP) および NIS+ 機能にこのライブラリを用いる。

libsocket

  SVR4 Unix で、 ソケット関係のシステムコール (socket, bind, listen など) を提供するライブラリ。

NIS

  ネットワーク情報サービス (Network Information Service)。 ネットワーク上のすべての計算機で必要な情報を共有するサービスのこと。 Linux の標準 libc ライブラリには NIS のサポートが含まれており、 これをこの文書では "trad-NIS" と記す。

  (訳注：原文では "traditional NIS" でしたが、長いので訳者が 勝手に造語しました)

NIS+

  Network Information Service (Plus)。 基本的には NIS を機能アップしたもの。 NIS+ は Sun Microsystems Inc. によって設計され、 NIS を後継するものとされている。 セキュリティが強化され、 大きなシステムに導入するのが容易になっている。

NYS

  NYS は「NIS+, YP, Switch」を表すプロジェクト名である。 Peter Eriksson pen@signum.se が管理している。 このプロジェクトでは NIS(=YP) のコードを 0 から再実装しており、 NYS ライブラリのネームサービススイッチ機能を利用するようになっている。

NSS

  ネームサービススイッチ (Name Service Switch)。 `/etc/nsswitch.conf` ファイルによって、 各種の情報のリクエストに対してどんな順番で検索を行うかを決定する。

RPC

  リモートプロシジャーコール (Remote Procedure Call)。 C プログラム内で RPC ルーチンを利用すれば、 ネットワーク上にある他の計算機上の手続き (サブルーチン) を呼びだすことができる。 通常の文脈においては Sun の RPC 実装の意味で用いられることが多い。

YP

  イエローページ (Yellow Pages (TM)) Yellow Pages は 英国 British Telecom 社の登録商標。

TCP-IP

  Transmission Control Protocol/Internet Protocol の略。 TCP/IP は Unix で非常によく使われているデータ通信プロトコルである。

### 一般的な情報

以下の内容は Sun(tm) System & Network Administration Manual からの引用です。

> NIS はかつて サン・イエローページ (Sun Yellow Pages, YP) と呼ばれていました。 しかし「Yellow Pages」は英国 British Telecom 社の登録商標で、 許可無く使用することができませんので、NIS と呼ぶことにしました。

NIS は Network Information Service の略です。 ネットワーク上のすべての計算機で共有すべき情報を提供するために用いられます。 NIS で提供される情報とは、例えば以下のようなものです。

- ログイン名、パスワード、ホームディレクトリ (`/etc/passwd`)

- グループ情報 (`/etc/group`)

例えば、あなたのパスワードが NIS のパスワードデータベースに登録されているとしましょう。 するとあなたは、 そこで NIS のクライアントプログラムが動いていれば、 ネットワーク上のどの計算機にもログインすることができるようになるのです。

Sun は Sun Microsystems 社の商標であり、 SunSoft 社にライセンス供与されています。

## NIS か NYS か NIS+ か

### libc 4/5 では trad-NIS か、それとも NYS ライブラリか？

trad-NIS を用いるか NYS ライブラリの NIS コードを用いるかは、 「低機能だが安定」をとるか「柔軟だが冒険」をとるかの選択と言えます。

trad-NIS のコードは標準 C ライブラリに入ってからだいぶ経っています。 生まれが古い分、やや柔軟性に欠けるところがあります。

一方 NYS ライブラリの NIS コードを用いるには、 libc ライブラリを再コンパイルして libnsl のコードを libc の中に含める必要があります (そのようにコンパイルされた libc ライブラリを入手できるかもしれません)。

もう一つの相違点として、 trad-NIS のコードでは NIS のネットグループ機能が使えますが、 NYS のコードには実装されていません。逆に NYS のコードでは Shadow Password を透過的に扱うことができるようになっていますが、 trad-NIS のコードは NIS 経由の Shadow パスワードをサポートしていません。

### glibc 2 と NIS/NIS+

GNU C Library 2.x (libc6) を使っている場合は、 以上の全ては忘れて下さい。 libc6 では NSS (ネームスイッチサービス) を完全にサポートしており、 非常に柔軟な運用ができるようになっています。 また以下の NIS／NIS+ マップがサポートされています: aliases, ethers, group, hosts, netgroups, networks, protocols, publickey, passwd, rpc, services, shadow. GNU C Library では、 shadow パスワードを NIS でまったく問題なく扱うことができます。

### NIS か NIS+ か？

NIS と NIS+ の選択は簡単です。 特にセキュリティに過敏になる必要がなければ、NIS を使いましょう。 NIS+ の管理はずっと大変です (クライアント側ではそれほどでもありませんが、サーバー管理は地獄です)。 それに Linux 上での NIS+ には多くのバグがありますし、 開発は止まってしまっています。

## 動作原理

### NIS の動作原理

少なくとも 1 台の NIS のサーバーがネットワーク上に必要です。 複数のサーバを稼動させることもできます。 この場合はそれぞれを異なった NIS 「ドメイン」のサーバとするか、 あるいは 2 台のサーバをひとつのドメイン上で協調して動作させることになります。 後者の構成では 1 台のサーバが「マスターサーバ」となり、 その他のサーバは全て「スレーブサーバ」と呼ばれます (これは 1 つの「ドメイン」を用いた場合の構成です)。 この両方を用い、ドメインを複数、それぞれに対するサーバも複数、 といった構成も可能です。

スレーブサーバは、 マスターサーバの NIS データベースのコピーを持つだけで、 マスターサーバの NIS データベースが変更されると、逐一それを受け取ります。 ネットワークに接続されている計算機の台数とネットワークの信頼性を考慮し、 スレーブサーバをインストールするかどうか (インストールする場合はその台数) を決めて下さい。 NIS クライアントは、NIS サーバが「落ちて」いたり、 レスポンスが遅かったりする場合には、 落ちていないサーバやもっとレスポンスの速いサーバとの接続を試みます。

NIS データベースは ASCII 形式のデータベースから変換された、 いわゆる DBM フォーマットになっています。例えば `/etc/passwd` や `/etc/group` といったファイルは、 ASCII-DBM 変換プログラム (サーバソフトウェアに含まれている `makedbm`) を用いて直接 DBMフォーマットに変換できます。NIS のマスターサーバは、 ASCII 形式と DBM 形式のデータベースとの両方を持っていなくてはなりません。

スレーブサーバは NIS マップが変更されると通知を受けます (`yppush` プログラムが用いられます)。 するとスレーブサーバは必要な変更を自動的に行い、 データベースを同期させます。 NIS クライアントにこのような作業をする必要はありません。 クライアントは常に最新の DBM データベースの内容を NIS サーバに読みに行くからです。

`ypbind` の古いバージョンでは、 動作中の NIS サーバを探すのにブロードキャストを用いていました。 これにはセキュリティ上の問題がありました。 なぜなら誰かが NIS サーバをインストールして、 ブロードキャストの問い合わせに答えるようにできるからです。 新しいバージョンの `ypbind` (ypbind-3.3 または ypbind-mt) では、 サーバを設定ファイルから取得できます - したがってブロードキャストは不要です。

### NIS+ の動作原理

NIS+ は Sun による新しいネットワークインフォメーションサービスです。 NIS と NIS+ の最も大きな違いは、NIS+ ではデータの暗号化と secure RPC を通した認証とが可能になっている点です。

NIS+ の命名モデルはツリー構造に基づいています。 ツリーのそれぞれのノードが NIS+ のオブジェクトに対応しており、 これには六つのタイプがあります。

- ディレクトリ (directory)
- エントリ (entry)
- グループ (group)
- リンク (link)
- テーブル (table)
- プライベート (private)

です。

NIS+ の名前空間でルートとなる NIS+ ディレクトリは root ディレクトリと呼ばれます。 NIS+ には二つの特別なディレクトリが存在します。 `org_dir` と `groups_dir` です。 `org_dir` ディレクトリにはすべての管理テーブルが含まれます。 例えば `passwd`, `hosts`, `mail_aliases` などです。 `groups_dir` ディレクトリにはアクセスコントロールに用いられる NIS+ グループオブジェクトが含まれます。 `org_dir` と `groups_dir` およびそれらの親ディレクトリを集めたものが NIS+ ドメインとして参照されます。

## RPC ポートマッパ

これから説明していくソフトウェアを動かすためには、まず `/sbin/portmap` を動作させておく必要があります。 Linux の配布パッケージの中には、 このデーモンを立ち上げるためのコマンドが `/sbin/init.d/` や `/etc/rc.d/` に書き込んであるものもありますので、 その場合は該当部分を有効になるようにしてリブートするだけです。 実際のやり方はディストリビューションのドキュメントを読みましょう。

RPC ポートマッパ (portmap(8)) は、 RPC プログラム番号を TCP/IP ポート番号に変換するサーバプログラムです。 RPC サーバ (NIS/NIS+ サーバなど) に RPC 呼びだしを行う (NIS/NIS+ クライアントはこれを行っています) ためには、そのマシンで RPC ポートマッパが動いている必要があります。 RPC サーバプログラムは、 監視する TCP/IP ポート番号とデータを提供する RPC プログラム番号を、 起動時にポートマッパに伝えます。 クライアントプログラムが、 ある RPC プログラム番号にコールを行う際には、 まずサーバマシン上の RPC ポートマッパと交信して、 どの TCP/IP ポート番号に RPC のパケットを送れば良いのかを決定します。

RPC サーバプログラムは inetd(8) からも起動できますから、 RPC ポートマッパは inetd より前に起動するようにしてください。

secure RPC を用いる場合には、ポートマッパは time サービスを必要とします。 すべてのホストの `/etc/inetd.conf` で、 以下のように time サービスが利用可能になっていることを確認して下さい。

    #
    # Time service is used for clock syncronization.
    #
    time    stream  tcp     nowait  root    internal
    time    dgram   udp     wait    root    internal

重要：設定ファイル変更したあと inetd を再起動するのを忘れないこと!

## NIS の設定

### マスターサーバ、スレーブサーバ、クライアントを決める

まず以下の二つの場合を考える必要があります。

1. 接続するネットワーク上に NIS サーバがある場合。

2. 接続するネットワーク上に NIS サーバがない場合。

最初のケースでは `ypbind`, `ypwhich`, `ypcat`, `yppoll`, `ypmatch` といったクライアントプログラムを起動するだけで 使えるようになります。一番重要なのは `ypbind` で、 このプログラムは常に実行されている必要があります (つまり `ps` コマンドを実行したときにプロセステーブルに表示されなければなりません)。 `ypbind` はいわゆるデーモンプロセスで、 システムのスタートアップファイルから起動する必要があります (つまり `/etc/init.d/nis`, `/sbin/init.d/ypclient`, `/etc/rc.d/init.d/ypbind`, `/etc/rc.local` など)。 `ypbind` が起動されれば、 その計算機は その時点から NIS クライアントとなります。

二番目のケース、つまり NIS サーバがない場合には、 NIS サーバプログラム (通常は `ypserv`) も必要となります。 この文書の では、この `ypserv` デーモンを用いて Linux マシンを NIS サーバに設定する方法について説明しています。

### ソフトウェア

バージョン 4.4.2 以降のシステムライブラリ `/usr/lib/libc.a` もしくは共有ライブラリ `/lib/libc.so.x` には、 NIS のクライアント・サーバプログラムのコンパイルに必要なシステムコールが すべて含まれています。 GNU C Library 2 (glibc 2.x) では `/lib/libnsl.so.1` も必要です。

NIS は `/usr/lib/libc.a` のバージョン 4.5.21 以上でしか動かないという報告がありますので、 安全のためには古いものは使わない方が良いでしょう。 NIS のクライアントプログラムは以下で入手できます。

Site and Directory | Filename
--- | ---
ftp.kernel.org:/pub/linux/utils/net/NIS | yp-tools-2.8.tar.gz
ypbind-mt-1.13.tar.gz
ypbind-3.3.tar.gz
ypbind-3.3-glibc5.diff.gz

ソフトを手に入れたら、同梱されている説明にしたがって下さい。 yp-clients 2.2 は libc4 または 5.4.20 までの libc5 と共に用いて下さい。 libc 5.4.21 以降と glibc 2.x には yp-tools 1.4.1 以降が必要です。 新しい yp-tools のバージョン 2.4 は、すべての Linux libc で動作します。 5.4.21 から 5.4.35 までの libc は、 NIS のコードにバグがあるので使わない方が良いでしょう。 libc 5.4.36 以降を使わないと、ほとんどの YP プログラムは動作しないでしょう。 ypbind 3.3 もすべてのライブラリで動作します。 gcc 2.8.x 以降か egcs、 glibc 2.x を利用している場合は、 `ypbind-3.3-glibc5.diff` パッチを ypbind 3.3 に当てる必要があります。 セキュリティに問題があるので、 可能なら ypbind 3.3 は使わないほうが良いでしょう。 ypbind-mt は、新しく開発されたマルチスレッドのデーモンです。 これには Linux 2.2 カーネルと glibc 2.1 以降が必要です。

## NIS クライアントの設定

### ypbind デーモン

ソフトウェアがうまくコンパイルできたらインストールしましょう。 `ypbind` デーモンは `/usr/sbin` ディレクトリに入れると良いでしょう。 NYS のシステムでは `ypbind` は必要ないと言う人がいるようですが、 これは間違っています。 `ypwhich` と `ypcat` は、 かならず `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` のテストは以下のようにして行います。

- YP のドメインネームが設定されていることを確認して下さい。 設定されていない場合は以下のようにします。

      /bin/domainname nis.domain

  `nis.domain` は通常適当な文字列で、 あなたのマシンの DNS ドメインネームとは 違うものにすべきです。 こうしておけば、外部のクラッカーがサーバから NIS パスワードデータベースを盗んでいくのがわずかながら困難になります。 NIS ドメイン名を知らない場合は システム管理者かネットワーク管理者に尋ねて下さい。

- `/sbin/portmap` が起動されていなければ起動します。

- `/var/yp` というディレクトリがなければ作成します。

- `/usr/sbin/ypbind` を起動します。

- ypbind がサービス内容をポートマッパに登録できたかどうか確かめるために、 `rpcinfo `-p` localhost` というコマンドを実行して下さい。 以下のような出力が現われるはずです。

      program vers proto   port
       100000    2   tcp    111  portmapper
       100000    2   udp    111  portmapper
       100007    2   udp    637  ypbind
       100007    2   tcp    639  ypbind

  あるいは使っているバージョンによっては

      program vers proto   port
       100000    2   tcp    111  portmapper
       100000    2   udp    111  portmapper
       100007    2   udp    758  ypbind
       100007    1   udp    758  ypbind
       100007    2   tcp    761  ypbind
       100007    1   tcp    761  ypbind

  のようになるかもしれません。

- `rpcinfo `-u` localhost ypbind` も実行してみて下さい。以下のような表示が出るはずです。

      program 100007 version 2 ready and waiting

  あるいはインストールした ypbind のバージョンによっては

      program 100007 version 1 ready and waiting
      program 100007 version 2 ready and waiting

  のような出力になるかもしれません。 重要なのは "version 2" のメッセージだけです。

ここまで来れば `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` が正常に動作しているかどうか確認して下さい。

### 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 のパスワードデータベースにエントリを持つすべてのユーザは そのマシンにアクセスできてしまいます！

### 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" と答えて下さい。

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

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

### nsswitch.conf ファイル

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

    hosts: files nis dns

と指定すれば、ホスト名の検索機能はまずローカルの `/etc/hosts` ファイルを探し、 次に NIS、そしてドメインネームサービス (`/etc/resolv.conf` と named) という順番で検索を行います。 最後までマッチするものがなければ、 エラーが返されることになります。このファイルは全てのユーザから 読み取り可能でなければなりません！より詳細な情報は 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 の文書を読んでください。

### Shadow パスワードと NIS

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

#### Linux

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

#### Solaris

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

#### 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

## NIS+ の設定

### ソフトウェア

Linux の NIS+ クライアントコードは GNU C ライブラリのバージョン 2 用に 開発されてきました。かっては商用アプリケーションのほとんどが libc5 にリンクされていて、それらを glibc で再コンパイルすることはできなかったため、 この NIS+ コードを libc5 へ移植したものもあります。 ただし libc5 と NIS+ の組み合わせには問題があります。 スタティックなプログラムは libc5 にリンクすることはできませんし、 libc5 ライブラリ環境でコンパイルしたプログラムは 他のバージョンの libc5 (を使ったシステム) では動作しません。

ベースとなるシステムとして、Debian, Red Hat Linux, SuSE Linux のような glibc ベースのディストリビューションが必要です。 glibc 2.1.1 以降を備えていないディストリビューションを使っている場合は、 新しい版にアップデートする必要があります。

NIS+ クライアントのソフトウェアは以下から入手できます。

Site and Directory | Filename
--- | ---
ftp.gnu.org:/pub/gnu/glibc/ | glibc-2.3.2.tar.gz
glibc-linuxthreads-2.3.2.tar.gz
ftp.kernel.org:/pub/linux/utils/net/NIS+ | nis-utils-1.4.1.tar.gz

http://www.linux-nis.org/nisplus/ には、より詳細な情報と最新のソースがあります。

### NIS+ クライアントのセットアップ

重要： NIS+ クライアントをセットアップする前に、 Solaris の NIS+ ドキュ メントを読んでサーバ側で必要な作業を行って下さい。この文書ではクライア ント側でどうすればよいかについてしか述べていません！

新しい libc と nis-tools をインストールしたら、 NIS+ サーバ上でこの新たなクライアント用の信任証 (credential) を作成します。 portmap が動作していることを確認するようにして下さい。 次にクライアントにする Linux PC の時刻が NIS+ サーバと一致しているかチェックして下さい。 secure RPC の場合は、信任証の有効期間は 3 分しかありません。すべてのホストで xntpd を走らせるのが良いでしょう。 これらが確認できたら以下を実行します。

    domainname nisplus.domain.
    nisinit -c -H <NIS+ server>

これによって cold スタートファイルが初期化されます。 他のオプションについては `nisinit` のマニュアルページを読んで下さい。 ドメインネームはリブートのたびに設定されるようにしておいて下さい。 あなたのネットワークの NIS+ ドメインネームがわからない場合は、 システムかネットワークの管理者に尋ねて下さい。

次に `/etc/nsswitch.conf` ファイルを変更します。 publickey に書けるサービスは nisplus だけ ("publickey: nisplus") で、 他のものは書いてはならないことに注意して下さい。

次に `keyserv` を起動して下さい。これはブート時に、 必ず portmap の直後に起動されるようにしておいて下さい。こうして

    keylogin -r

とすればシステムの root の秘密鍵が保管されます (もうこの新しいホストの公開鍵を NIS+ のサーバに追加しましたよね？)。

`niscat passwd.org_dir` とすれば、 passwd データベースのすべてのエントリを見ることができるはずです。

### NIS+ と keylogin, login, PAM

ログインしたときに、ユーザは自分の秘密鍵を keyserv にセットする必要があります。 これには `keylogin` を用います。 glibc 2.1 とコンパイルした場合には、 shadow パッケージの `login` はこれをユーザの代わりに実行してくれます。 PAM を認識する `login` を用意するには、 `pam_keylogin-1.2.tar.gz` をインストールし、 `/etc/pam.d/login` ファイルを変更して pwdb の代わりに pam&_unix_auth を使うようにする必要があります (pwdb は NIS+ をサポートしません)。例を示します。

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

### nsswitch.conf ファイル

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

    hosts: files nisplus dns

と指定すれば、ホスト名の検索機能はまずローカルの `/etc/hosts` ファイルを探し、次に NIS+、そしてドメインネームサービス (`/etc/resolv.conf` と named) と言う順番で検索を行います。 最後までマッチするものがなければエラーが返されることになります。

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
    shadow:     compat

    passwd_compat: nisplus
    group_compat:  nisplus
    shadow_compat: nisplus

    hosts:      nisplus files dns

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

## NIS サーバの設定

### サーバプログラム ypserv

この文書では、 NIS サーバとしては "ypserv" の 設定方法のみを記します。

NIS サーバのソフトは以下にあります。

Site and Directory | Filename
--- | ---
ftp.kernel.org:/pub/linux/utils/net/NIS | ypserv-2.9.tar.gz
ypserv-2.9.tar.bz2

http://www.linux-nis.org/nis/ に、より詳しい情報があります。

サーバのセットアップ方法は trad-NIS / NYS どちらの場合でも同じです。

コンパイルして `ypserv` と `makedbm` を作ります。 `securenets` ファイルを使うか ypserv-2.x では、アクセス制限には `securenets` ファイルを用いる方法のみをサポートしています。

サーバをマスターとして起動する場合は、 NIS を用いて共有させるファイルを決めてください。 そして `/var/yp/Makefile` の "all" ルールに必要なものを加えたり、不要なものを削除したりしてください。 また Makefile の先頭の方も必ず見て、 オプションを自分の環境にあわせて編集しておくべきです。

ypserv 1.1 と ypserv 1.2 との間では、大きな変更が行われました。 1.2 以降では、ファイルハンドルがキャッシュされるようになったのです。 これにより、新しいマップを生成するときには必ず makedbm に -c オプションをつけなければならなくなりました。 `/var/yp/Makefile` が ypserv 1.2 以降に付属の新しいものであることを確認して下さい。 あるいは Makefile 中の makedbm に -c フラグを加えて下さい。 これを忘れると、ypserv は更新されたマップではなく、 古いマップを使い続けてしまいます。

次に `/var/yp/securenets` と `/etc/ypserv.conf` を編集します。 詳細は ypserv(8) と ypserv.conf(5) のマニュアルページを読んで下さい。

ポートマッパ (`rpc.portmap`) が動いているか確認して下さい。 確認できたら `ypserv` を動かします。

    % rpcinfo -u localhost ypserv

というコマンドを実行してみて、

    program 100004 version 1 ready and waiting
    program 100004 version 2 ready and waiting

と出力されることを確認して下さい。

"version 1" の行は、 ypserv のバージョンや用いた設定によっては 出ないかもしれません。これが必要になるのは昔の SunOS 4.x を クライアントとして使う場合だけです。

ここで NIS (YP) データを作成します。 マスターサーバで以下を実行して下さい。

    % /usr/lib/yp/ypinit -m

スレーブサーバで `ypwhich `-m`` が機能することを確認して下さい。 つまり、スレーブにするホストは、 まず NIS クライアントとして動作できなければならないのです。 確認できたら以下を実行して、このホストを NIS スレーブにします。

    % /usr/lib/yp/ypinit -s masterhost

これでおしまい、サーバは動作しているはずです。

何か大きな問題が生じたら、 `ypserv` や `ypbind` を別の xterm からデバッグモードで起動してみましょう。 デバッグ出力から何が問題なのかが判断できるはずです。

マップを更新する必要が生じた場合は、 NIS マスターの `/var/yp` ディレクトリで `make` を実行してください。 ソースファイルが新しい場合にはマップが更新され、スレーブサーバに push されます。マップの更新には `ypinit` は用いないようにしてください。

「スレーブ」サーバ上では root の `crontab` を編集し、 以下のような行を追加しておくと良いかもしれません。

    20 *    * * *    /usr/lib/yp/ypxfr_1perhour
    40 6    * * *    /usr/lib/yp/ypxfr_1perday
    55 6,18 * * *    /usr/lib/yp/ypxfr_2perday

万が一マスタサーバでの更新の際にスレーブがダウンしていてデータを 受け損なっても，これによって NIS マップを最新に保つことができます。

スレーブはいつでも追加することができます。 まず新しくインストールしたスレーブサーバが NIS マスターに接続する許可を持っているかを確認しましょう。 次に

    % /usr/lib/yp/ypinit -s masterhost

を新しいスレーブで実行します。 マスターサーバでは、この新しいスレーブサーバの名前を `/var/yp/ypservers` に追加し、 `/var/yp` で `make` を実行してマップを更新します。

NIS サーバへのユーザアクセスを制限したい場合は、 NIS サーバのホストをクライアントとしても実行する必要があります。 つまり `ypbind` を実行して "+" の付いたエントリをパスワードファイル `/etc/passwd` の 途中 に追加します。 ライブラリ関数は NIS エントリ以降に置かれた通常のエントリを全て無視し、 残りを NIS を通して取得します。このようにすると NIS のアクセスルールを 管理することができます。例を示します。

    root:x:0:0:root:/root:/bin/bash
    daemon:*:1:1:daemon:/usr/sbin:
    bin:*:2:2:bin:/bin:
    sys:*:3:3:sys:/dev:
    sync:*:4:100:sync:/bin:/bin/sync
    games:*:5:100:games:/usr/games:
    man:*:6:100:man:/var/catman:
    lp:*:7:7:lp:/var/spool/lpd:
    mail:*:8:8:mail:/var/spool/mail:
    news:*:9:9:news:/var/spool/news:
    uucp:*:10:50:uucp:/var/spool/uucp:
    nobody:*:65534:65534:noone at all,,,,:/dev/null:
    +miquels::::::
    +:*:::::/etc/NoShell
    [ All normal users AFTER this line! ]
    tester:*:299:10:Just a test account:/tmp:
    miquels:1234567890123:101:10:Miquel van Smoorenburg:/home/miquels:/bin/zsh

このようにユーザ "tester" は存在しますが、シェルが /etc/NoShell になります。 miquels は通常のアクセス権を持つことになります。

あるいは `/var/yp/Makefile` ファイルを編集し、 NIS が使うパスワードファイルを別に指定することもできます。 大きなシステムでは、NIS のパスワードファイルとグループファイルは通常 `/var/yp/ypfiles` に置くことが多いようです。 このようにするとパスワードファイル関連の管理ツールは使えなくなります。 つまり `passwd`, `chfn`, `adduser` などに対し、特別なツールが必要になります。

しかし `yppasswd`, `ypchsh`, `ypchfn` は当然動作します。

### サーバプログラム yps

NIS サーバ yps の設定は 前のセクションを参考にして下さい。 大体似ていますが完全に同じではないので、 ypserv の説明を適用する際には注意して下さい。 yps はもはや誰もサポートしていませんし、 いくつかセキュリティホールも存在しています。使うべきではありません！

yps のソフトは以下のサイトにあります。

Site and Directory | Filename
--- | ---
ftp.lysator.liu.se:/pub/NYS/servers | yps-0.21.tar.gz
ftp.kernel.org:/pub/linux/utils/net/NIS | yps-0.21.tar.gz

### rpc.ypxfrd プログラム

rpc.ypxfrd は非常に大きな NIS マップを NIS マスターから NIS スレーブサーバーに転送する際に、転送を高速化するために 用いられます。 NIS スレーブサーバーは、新しいマップがあるというメッセージを 受け取ると、そのマップを取得するために ypxfr を起動します。 ypxfr は yp_all() 関数を用いてマップの内容をマスターサーバー から読み込もうとします。この情報はデーターベースライブラリを 通して保存されるため、マップのサイズが非常に大きくなると、 このプロセスは数分もかかってしまうことがあります。

rpc.ypxfrd サーバーは、 NIS スレーブサーバーにマスターの マップファイルを単純にコピーさせ、転送プロセスを高速化します。 スレーブサーバーがゼロから自前のマップを生成するのに比べ、 これはずっと短時間ですみます。 rpc.ypxfrd は RPC ベースの転送プロトコルを用いるので、 新しいマップを生成する必要はありません。

rpc.ypxfrd は inetd から起動することもできますが、 起動には時間がかかるので、 ypserv と一緒にデーモンとして 起動しておくほうがいいでしょう。 rpc.ypxfrd は NIS マスターサーバでだけ起動しておけば OK です。

### rpc.yppasswdd プログラム

ユーザがパスワードを変更したときには、 NIS のパスワードデータベースや、 それに依存した他の NIS データベースも変更されなければなれません。 これを行なうのが `rpc.yppasswdd` です。 このプログラムはパスワード変更を取り扱い、 NIS の情報が正しく更新されるようにします。 現在 `rpc.yppasswdd` は ypserv の一部となっています。 別パッケージになっている `yppasswd-0.9.tar.gz` や `yppasswd-0.10.tar.gz` などは古いので使う必要はありませんし、また今後使うべきではありません。

rpc.yppasswdd を実行するのは NIS マスターサーバのみです。デフォルトで は、ユーザーはフルネームやログインシェルを変更することができないように なっています。これを許可するには、それぞれ -e chfn および -e chsh オプ ションを指定します。

passwd と shadow ファイルが /etc 以外にある場合は、 -D オプションを 指定する必要があります。例えば全てのソースファイルを `/etc/yp` に置いて、ユーザにシェルの変更を可能にしたい場合は、 `rpc.yppasswdd` を以下のパラメータで実行しなければなりません:

    # rpc.yppasswdd -D /etc/yp -e chsh

または

    # rpc.yppasswdd -s /etc/yp/shadow -p /etc/yp/passwd -e chsh

でも OK です。

他には特にすることはありません。ただ、 `rpc.yppasswdd` が `/var/yp/Makefile` と同じファイルを使っているかどうかは気をつけておいてください。 エラーは syslog を通して記録されます。

## NIS/NYS インストールのチェック

すべてがうまく行ったら、 簡単なコマンドを使ってインストールのチェックを行って下さい。 例えばパスワードファイルが NIS/NYS で共有されている場合は、

    % ypcat passwd

というコマンドで NIS のパスワードファイルの内容が見られるはずです。 また

    % ypmatch userid passwd

とすれば、 指定したユーザのエントリがパスワードファイルから取り出されて表示されます (userid には適当なユーザのログイン名を入れます)。 なお `ypcat` や `ypmatch` は、 trad-NIS や NYS の配布パッケージに入っています。

ユーザーによるログインができない場合には、 以下のプログラムをクライアントで実行してみて下さい。

    #include <stdio.h>
    #include <pwd.h>
    #include <sys/types.h>

    int
    main(int argc, char *argv[])
    {
      struct passwd *pwd;

      if(argc != 2)
        {
          fprintf(stderr,"Usage: getwpnam username\n");
          exit(1);
        }

      pwd=getpwnam(argv[1]);

      if(pwd != NULL)
        {
          printf("name.....: [%s]\n",pwd->pw_name);
          printf("password.: [%s]\n",pwd->pw_passwd);
          printf("user id..: [%d]\n", pwd->pw_uid);
          printf("group id.: [%d]\n",pwd->pw_gid);
          printf("gecos....: [%s]\n",pwd->pw_gecos);
          printf("directory: [%s]\n",pwd->pw_dir);
          printf("shell....: [%s]\n",pwd->pw_shell);
        }
      else
        fprintf(stderr,"User \"%s\" not found!\n",argv[1]);

      exit(0);
    }

このプログラムをユーザ名をパラメータとして実行しますと、 そのユーザに対して getpwnam 関数が返す情報が全て表示されます。 これによって、どのエントリが間違っているかがわかるでしょう。 よくある間違いとしては、パスワードのフィールドが "*" によって上書きされている、などがあります。

GNU C Library 2.1 (glibc 2.1) には `getent` というツールがついてきます。 そのようなシステムでは、上記の代わりにこちらを使いましょう。

    % getent passwd

や

    % getent passwd login

のように試してみましょう。

## NIS マップの生成と更新

### NIS マップの生成

最初の NIS マップは、次のコマンドを実行して生成します。

    % /usr/lib/yp/ypinit -m

これは NIS マスターサーバをはじめて設定したときに行います。 これに関する詳細は を見てください。 サーバに新しいマップを追加したり、古いマップを削除したりしたい場合は、 `/var/yp/Makefile` を編集して all: ルールを変更します。 マップを生成するルールの名前をここに追加・削除します。

マップを削除する場合は、対応する実際のファイルも削除しなければなりません。

この変更を行ったら、

    % make -C /var/yp

を実行すればマップが生成されるはずです。

### NIS マップを更新する

NIS マップのソースを変更したら (例えば新しいユーザのアカウントを passwd ファイルに追加した場合など)、 NIS マップを再生成する必要があります。 単に次のコマンドを実行するだけです。

    % make -C /var/yp

このコマンドはどのソースが変更されたかを調べ、 新しいマップを生成し、ypserv にマップが変更されたことを伝えます。

### マップのエントリの長さ

NIS プロトコルでは、ひとつのエントリの長さは 1024 文字までに制限されています。 この値を単純に増やして再コンパイルすることは出来ません。 NIS v2 を使っているシステムはすべて、 キーとデータの値が 1024 バイト以下のサイズに収まることを想定しているためです。 自分の管理しているクライアントとサーバで 突然 YPMAXRECORD を増やすと、 ネットワークで NIS を利用している他のマシンとの 相互運用性を損なうことになります。 正しく動作させるには、NIS をサポートしているすべてのベンダのところにいって、 同時に変更を行わせる必要があります。 まずこんなことは無理でしょう。

glibc 2.1 以降では、この制限は glibc の NIS 実装からは無くなっています。 従って Linux では、より長いエントリを利用できます。 しかしこれは上記の通り、 ネットワークに他の NIS クライアントやサーバが無い場合に限ります。

長いエントリの NIS マップを生成するには、 `/var/yp/Makefile` が `makedbm` を呼ぶ際に、 `--no-limit-check` オプションを追加するようにします。

以下のような感じになります:

    DBLOAD = $(YPBINDIR)/makedbm -c -m `$(YPBINDIR)/yphelper --hostname` --no-limit-check

警告: この変更は NIS プロトコルに反しています。 Linux 自身はサポートしているとはいえ、 Linux 上で動作するアプリケーションが、 この変更後に動作するかどうかはわかりません!

`/etc/group` エントリの場合には、 この問題を回避するための別法があります。 このアイディアは Ken Cameron から寄せられました。

    1. エントリを複数の行に分け、各グループの名前をちょっとずつ
       変えます。

    2. この各グループの GID は全部同じにします。

    3. 最初のエントリには、正しいグループ名と GID を与えます。
       私はここにはユーザ名は置かないようにしています。

    この結果、プログラムがこのマップを読むと、指定したユーザ名に対して
    GID が帰ります。次に GID にマッチする最初のエントリを見つけると、
    その名前を返して停止します。美しくはありませんが、動作します!

## 再起動時の自動実行

NIS がサーバやクライアントで正しく設定できたら、 この設定が起動時にも正しく反映されるかを確認しなければなりません。

チェックする点は 2 つあります。 起動スクリプトがあるかどうかと、 NIS ドメイン名が正しい場所に保存されているかどうか、です。

### NIS 用の起動スクリプト

あなたの使っている Linux での 起動スクリプトの置場所になっているディレクトリを調べましょう。

- `/etc/init.d`
- `/etc/rc.d/init.d`
- `/sbin/init.d`

などになっていると思います。 NIS の起動スクリプトがあるかどうか確認しましょう。 ファイルの名前はふつう `ypbind` とか `ypclient` となっているようです。

### NIS ドメイン名

おそらく一部の人々にとって、 NIS を使う上での最大の難関は、 NIS ドメイン名を再起動後にも取得できるようにすることでしょう。 Solaris 2.x では、NIS ドメイン名は `/etc/defaultdomain` に 1 行で書かれていました。 しかし、ほとんどの Linux ディストリビューションは このファイルを使っていないようです。

### ディストリビューション固有の話題

現在のところ、いろいろな Linux ディストリビューションにおける NIS ドメイン名の保管場所は、以下のようになっています。

#### Caldera 2.xx

Caldera は `/etc/nis.conf` ファイルを用いています。書式は通常の `/etc/yp.conf` と同じです。

#### Debian

Debian は Sun と同じく `/etc/defaultdomain` を使っているようです。

#### Red Hat Linux 6.x, 7.x, 8, 9

`/etc/sysconfig/network` ファイルの `NISDOMAIN` 変数を修正 (なければ作成) してください。

#### SuSE Linux 6.x と 7.x

`/etc/rc.config` ファイルの `YP_DOMAINNAME` 変数を修正して `SuSEconfig` コマンドを実行してください。

#### SuSE Linux 8.x 以降

8.0 以降の SuSE Linux では、Sun と同じく `/etc/defaultdomain` を使うようになりました。

## rpasswd でパスワードを変更する

NIS パスワードを変更する標準的な方法は `yppasswd` を呼ぶことで、 これはシステムによっては単に `passwd` のエイリアスになっていることもあります。 このコマンドは yppasswd プロトコルを用いるので、 NIS マスターサーバで `rpc.yppasswdd` プロセスが動作している必要があります。 このプロトコルには、 古いパスワードがネットワークに平文で流れてしまうという欠点があります。 パスワードの変更に成功すれば、これはそれほど問題ではありません。 この場合古いパスワードは新しいパスワードに置き換わるからです。 しかしパスワードの変更に失敗すると、 攻撃者はこの平文のパスワードを用い、 そのユーザとしてログインできてしまいます。 さらにまずいことには、 システム管理者が他のユーザの NIS パスワードを変更する場合、 NIS マスターサーバの root パスワードがネットワークを平文で流れてしまいます。 そしてこのパスワードは変更されないのです。

解決策のひとつは、パスワードの変更に yppasswd を用いないことです。 代わりに使える良いプログラムが、 pwdutils パッケージに入っている `rpasswd` です。

Site and Directory | Filename
--- | ---
ftp.kernel.org:/pub/linux/utils/net/NIS | pwutils-2.3.tar.gz
ftp.suse.com:/pub/people/kukuk/pam/pam_pwcheck | pam_pwcheck-2.2.tar.bz2
ftp.suse.com:/pub/people/kukuk/pam/pam_unix2 | pam_unix2-1.16.tar.bz2

`rpasswd` はリモートサーバのユーザアカウントのパスワードを、 安全な SSL 接続を通して変更します。 通常のユーザは自分のパスワードだけを変更でき、 管理者のパスワード (現在はサーバの root のパスワード) を知っているユーザは、 `rpasswd` に -a オプションをつければ あらゆるユーザのパスワードを変更できます。

### サーバの設定

サーバではまず証明書 (certificate) が必要です。 証明書のデフォルトのファイル名は `/etc/rpasswdd.pem` です。このファイルは次のコマンドで作成できます。

    openssl req -new -x509 -nodes -days 730 -out /etc/rpasswdd.pem -keyout /etc/rpasswdd.pem

`rpasswdd` 用の PAM 設定も必要です。 NIS アカウントが `/etc/passwd` に保存されている場合は、 次のようなものを見本に設定してみると良いでしょう。

    #%PAM-1.0
    auth     required       pam_unix2.so
    account  required       pam_unix2.so
    password required       pam_pwcheck.so
    password required       pam_unix2.so    use_first_pass use_authtok
    password required       pam_make.so     /var/yp
    session  required       pam_unix2.so

NIS パスワードマップのソースが別の場所 (例えば /etc/yp など) にある場合には、 pam_unix2 の `nisdir` オプションを使うと、この場所を参照できます。

    #%PAM-1.0
    auth     required       pam_unix2.so
    account  required       pam_unix2.so
    password required       pam_pwcheck.so  nisdir=/etc/yp
    password required       pam_unix2.so    nisdir=/etc/yp use_first_pass use_authtok
    password required       pam_make.so     /var/yp
    session  required       pam_unix2.so

ここで、NIS マスターサーバで `rpasswdd` デーモンを起動します。

パスワードの変更は PAM モジュールで行われますから、 `rpasswdd` は NIS+ や LDAP など、 PAM モジュールがサポートされていれば 他のサービスのパスワードも変更できます。

#### クライアントの設定

クライアントでは、設定ファイル `/etc/rpasswd.conf` にサーバの名前を書いておくだけで OK です。 サーバがデフォルト以外のポートで動作している場合は、 ここにそのポートも書いておきます。

    # rpasswdd runs on master.example.com
    server master.example.com
    # Port 774 is the default port
    port 774

##### NIS でよくおこる問題とその解決方法

以下のような問題が多くのユーザから報告されています。

1. バージョン 4.5.19 のライブラリは壊れており NIS は動作しません。

2. ライブラリを 4.5.19 から 4.5.24 にアップグレードすると `su` コマンドが使えなくなります。 この場合は `su` コマンドを Slackware 1.2.0 から入手します。ついでに最新のライブラリも導入してしまうと良いでしょう。

3. NIS サーバを再起動させた際、`ypbind` が

       yp_match: clnt_call:
       RPC: Unable to receive; errno = Connection refused

   のようなメッセージを表示し、 NIS のデータベースに登録されている人がログインできなくなることがあります。 root でログインして `ypbind` を kill し、`ypbind` を起動しなおしてみて下さい。 ypbind 3.3 以降にアップデートしても解決できると思います。

4. libc を 5.4.20 以上の版にアップグレードすると、 YP tools が動作しなくなります。 libc >= 5.4.21 および glibc 2.x には yp-tools 1.2 が必要です。 それ以前の版の libc には yp-clients 2.2 が必要です。 yp-tools 2.x ならすべてのライブラリで動作します。

5. libc 5.4.21-5.4.35 の yp_maplist は壊れています。 yp-tools 1.x を用いるには 5.4.36 以降が必要です。 さもないと ypwhich などの YP プログラムは segfault してしまうはずです。

6. libc5 と trad-NIS は shadow パスワードの NIS での配布をサポートしていません。 libc5 + NYS または glibc 2.x を用いる必要があります。

7. ypcat は "shadow" マップを表示しません。これは正しい動作です。 shadow マップの名前は shadow ではなく、"shadow.byname" ですから。

8. Solaris は必ずしも特権ポートを用いません。従って Solaris のクライアントがある場合はパスワード mangling を用いては いけません。

##### よくある質問 (FAQ)

あなたが疑問に思っていたことはここまでに大部分が解決されたことと思いま すが、まだ疑問点が残っていましたら、

- comp.os.linux.networking

などに質問すると良いと思います。

訳注：日本語のニュースグループとしては

- fj.os.linux
- japan.comp.linux

などが良いでしょう。

訳者のページ (http://surf.ap.seikei.ac.jp/~nakano/linux/NIS-j.html) には、個人的なインストール体験記が書いてあるほか、 この文書で紹介されているソフトウェア入手先のミラーのうち、 国内のものを紹介しています。