レンタルサーバ + Webシステム開発 = E-business

■レンタルサーバご利用参考資料
サーバご利用の参考にJF Project によるJF (Japanese FAQ)を掲載しています。

Linux JF(Japanese FAQ)Project.
JF は, Linux に関する解説文書・FAQ などを作成・収集・配布するプロジェクトです.

グリーンネット・トップページへ戻る


一覧に戻る
The Linux NIS(YP)/NYS/NIS+ HOWTO

Thorsten Kukuk

中野武雄 - (日本語訳)

v1.3j1 2003-10-19 (原文 1 July 2003)

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

Table of Contents
1. はじめに
   
    1.1. この文書の最新版
    1.2. 免責
    1.3. フィードバックと今後の改版
    1.4. 謝辞
   
2. 用語集と一般的な情報
   
    2.1. 用語集  
    2.2. 一般的な情報  
   
3. NIS か NYS か NIS+ か
   
    3.1. libc 4/5 では trad-NIS か、それとも NYS ライブラリか?  
    3.2. glibc 2 と NIS/NIS+  
    3.3. NIS か NIS+ か? 
   
4. 動作原理
   
    4.1. NIS の動作原理 
    4.2. NIS+ の動作原理 
   
5. RPC ポートマッパ  
6. NIS の設定 
   
    6.1. マスターサーバ、スレーブサーバ、クライアントを決める 
    6.2. ソフトウェア 
   
7. NIS クライアントの設定
   
    7.1. ypbind デーモン  
    7.2. trad-NIS を用いた NIS クライアントをセットアップする 
    7.3. NYS を用いた NIS クライアントをセットアップする 
    7.4. glibc 2.x を用いた NIS クライアントをセットアップする 
    7.5. nsswitch.conf ファイル  
    7.6. Shadow パスワードと NIS 
   
8. NIS+ の設定
   
    8.1. ソフトウェア 
    8.2. NIS+ クライアントのセットアップ 
    8.3. NIS+ と keylogin, login, PAM 
    8.4. nsswitch.conf ファイル  
   
9. NIS サーバの設定 
   
    9.1. サーバプログラム ypserv  
    9.2. サーバプログラム yps  
    9.3. rpc.ypxfrd プログラム  
    9.4. rpc.yppasswdd プログラム  
   
10. NIS/NYS インストールのチェック  
11. NIS マップの生成と更新 
   
    11.1. NIS マップの生成 
    11.2. NIS マップを更新する 
    11.3. マップのエントリの長さ 
   
12. 再起動時の自動実行
   
    12.1. NIS 用の起動スクリプト
    12.2. NIS ドメイン名
    12.3. ディストリビューション固有の話題
   
13. rpasswd でパスワードを変更する 
   
    13.1. サーバの設定 
    13.2. クライアントの設定 
   
14. NIS でよくおこる問題とその解決方法  
15. よくある質問 (FAQ) 

1. はじめに

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

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

NIS-HOWTO は Thorsten Kukuk  によって編集・管理されてい
ます。

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

Andrea Dell'Amico       
Mitchum DSouza    
Erwin Embsen                
Peter Eriksson           

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.1. この文書の最新版

この文書の最新版はいつでも 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 のページ  に置かれます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.2. 免責

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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

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

訳注:翻訳に対するコメントは中野武雄  までお願
いします。

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

1.4. 謝辞

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

Byron A Jeff           
Markus Rex                   
Miquel van Smoorenburg  
Dan York               
Christoffer Bromberg    

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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2. 用語集と一般的な情報

2.1. 用語集  

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

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  が管理している。このプロジェクトでは 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 で非常によく使われているデータ通信プロトコルである。
   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2.2. 一般的な情報  

以下の内容は 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 社にライセンス供与され
ています。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3. NIS か NYS か NIS+ か

3.1. 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 パスワードをサポートしていません
。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.2. 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 でまったく問題なく扱うことができ
ます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3.3. NIS か NIS+ か? 

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4. 動作原理

4.1. 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) では、サーバを設定ファイルから取得できます - したがってブロ
ードキャストは不要です。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

4.2. 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+ ドメインとして参照されます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5. 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 を再起動するのを忘れないこと!

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6. NIS の設定 

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

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

 

 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) も必要となります。この文書の Section 9 では、この 
ypserv デーモンを用いて Linux マシンを NIS サーバに設定する方法について
説明しています。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.2. ソフトウェア 

バージョン 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     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 以降が必要です。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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

7.1. 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 が正
常に動作しているかどうか確認して下さい。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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.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 の文書
を読んでください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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 

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                                             

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

8. NIS+ の設定

8.1. ソフトウェア 

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-linuxthreads-2.3.2.tar.gz
ftp.kernel.org:/pub/linux/utils/net/    nis-utils-1.4.1.tar.gz         
NIS+                                                        

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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

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

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

 
┌──────────────────────────────────┐
│domainname nisplus.domain.                                          │
│nisinit -c -H                                          │
└──────────────────────────────────┘
 

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

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

次に keyserv を起動して下さい。これはブート時に、必ず portmap の直後に
起動されるようにしておいて下さい。こうして
┌──────────────────────────────────┐
│keylogin -r                                                         │
└──────────────────────────────────┘
とすればシステムの root の秘密鍵が保管されます (もうこの新しいホストの
公開鍵を NIS+ のサーバに追加しましたよね?)。

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

8.3. 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                     

 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

8.4. 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                              

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

9. NIS サーバの設定 

9.1. サーバプログラム ypserv  

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

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

Site and Directory                                   Filename          
ftp.kernel.org:/pub/linux/utils/net/NIS              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 は当然動作します。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

9.2. サーバプログラム yps  

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

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

Site and Directory                                      Filename       
ftp.lysator.liu.se:/pub/NYS/servers                                    
ftp.kernel.org:/pub/linux/utils/net/NIS                                

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

9.3. 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 です。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

9.4. 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 を通して記録されます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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

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

 
┌──────────────────────────────────┐
│% ypcat passwd                                                      │
└──────────────────────────────────┘
 

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

 
┌──────────────────────────────────┐
│% ypmatch userid passwd                                             │
└──────────────────────────────────┘
 

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

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

#include                                                      
#include                                                        
#include                                                  
                                                                       
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                                               │
└──────────────────────────────────┘
のように試してみましょう。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

11. NIS マップの生成と更新 

11.1. NIS マップの生成 

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

┌──────────────────────────────────┐
│% /usr/lib/yp/ypinit -m                                             │
└──────────────────────────────────┘

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

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

この変更を行ったら、

┌──────────────────────────────────┐
│% make -C /var/yp                                                   │
└──────────────────────────────────┘

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

11.2. NIS マップを更新する 

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

┌──────────────────────────────────┐
│% make -C /var/yp                                                   │
└──────────────────────────────────┘

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

11.3. マップのエントリの長さ 

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 にマッチする最初のエントリを見つけると、   │
│その名前を返して停止します。美しくはありませんが、動作します!       │
└──────────────────────────────────┘
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

12. 再起動時の自動実行

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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

12.1. NIS 用の起動スクリプト

あなたの使っている Linux での起動スクリプトの置場所になっているディレク
トリを調べましょう。 /etc/init.d, /etc/rc.d/init.d, /sbin/init.d などに
なっていると思います。 NIS の起動スクリプトがあるかどうか確認しましょう
。ファイルの名前はふつう ypbind とか ypclient となっているようです。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

12.2. NIS ドメイン名

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

12.3.1. Caldera 2.xx

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

12.3.2. Debian

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

12.3.4. SuSE Linux 6.x と 7.x

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

12.3.5. SuSE Linux 8.x 以降

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

13. 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                                
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 オプションをつければあらゆるユーザのパスワードを変更
できます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

13.1. サーバの設定 

サーバではまず証明書 (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 モジュールがサポートされていれば他のサービスのパスワー
ドも変更できます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

13.2. クライアントの設定 

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

┌──────────────────────────────────┐
│# rpasswdd runs on master.example.com                               │
│server master.example.com                                           │
│# Port 774 is the default port                                      │
│port 774                                                            │
└──────────────────────────────────┘

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

14. 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 を用いてはいけません。
   
 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

15. よくある質問 (FAQ) 

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

comp.os.linux.networking

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

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

fj.os.linux     
japan.comp.linux

などが良いでしょう。

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

一覧に戻る
グリーンネット・トップページへ戻る

http://www.green.ne.jp/