The Linux NIS(YP)/NYS/NIS+ HOWTO Thorsten Kukuk 中野武雄 - (日本語訳) v1.1.1, 18 November 2000 この文書では 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 7.6.1. Linux 7.6.2. Solaris 7.6.3. PAM 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. 再起動時の自動実行 11.1. NIS 用の起動スクリプト 11.2. NIS ドメイン名 11.3. ディストリビューション固有の話題 11.3.1. Caldera 2.x 11.3.2. Debian 11.3.3. Red Hat 6.x 11.3.4. SuSE Linux 12. NIS でよくおこる問題とその解決方法 13. よくある質問 (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.suse.de/~kukuk/nis-howto/HOWTO/NIS-HOWTO.html です。 このドキュメントの最新版は、 Linux 関連の WWW サイトや FTP サイトにも登 録されます。もちろん LDP のホームページにもあります。 翻訳文書へのリンクは http://www.suse.de/~kukuk/nis-howto/ に集められて います。 訳注:日本語版の文書の最新版は JF Project のページ に置かれます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2. 免責 この文章は私の知識を最大限集めて書いたつもりですが、正確でない部分もあ るかもしれません。この文書で紹介しているプログラムについては、それぞれ に付属している README ファイルを必ず読んで下さい。それらにはより詳しい 説明やより正確な情報が書かれているはずですので。もちろんこのドキュメン トもできるだけ間違いのないものにしていきたいと考えています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3. フィードバックと今後の改版 この文書に関する質問やコメントがありましたら、お気軽に Thorsten Kukuk までメールを下さい。アドレスは です。提案や批判も歓迎し ます。この文書に誤りを見つけたら、私に連絡して下されば次の版で訂正しま す。よろしくお願いします。 訳注:翻訳に対するコメントは中野武雄 までお願 いします。 なお、あなたの Linux 配布パッケージに特有の問題に関しては私にメールを送 らないで下さい!私はすべての配布パッケージを知っている訳ではありません 。ただ、もし解決法も送っていただければ、文書に追加したいとは思っていま す。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4. 謝辞 このドキュメントを作成するにあたって、直接的あるいは間接的にお世話にな りました以下の方々に感謝します。アルファベット順に: Byron A Jeff Markus Rex Miquel van Smoorenburg Dan York 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 libraly)。 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+ の管理はずっと大変です (クライアント側ではそれほどでもありま せんが、サーバー管理は地獄です)。それに Linux 上での NIS+ はまだ開発段 階なのです。利用するには最新版の glibc 2.1 が必要があります。ちょっと試 してみたい場合には、glibc の NIS+ サポートを libc5 に移植したものも存在 します (ただしこれは未サポート)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 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 ポートマッパ これから説明していくソフトウェアを動かすためには、まず /usr/sbin/ rpc.portmap を動作させておく必要があります。 Linux の配布パッケージの中 には、このデーモンを立ち上げるためのコマンドが /sbin/init.d/ や /etc/ rc.d/ に書き込んであるものもありますので、その場合は該当部分をアンコメ ントしてリブートするだけです。実際のやり方はディストリビューションのド キュメントを読みましょう。 RPC ポートマッパ (portmap(8)) は、 RPC プログラム番号を TCP/IP ポート番 号に変換するサーバプログラムです。 NIS クライアントプログラムがやってい るように、 RPC サーバ (NIS サーバなど) に RPC 呼びだしを行うには、 RPC ポートマッパが動いている必要があります。 RPC サーバプログラムは、監視す る TCP/IP ポート番号とデータを提供する RPC プログラム番号を、起動時にポ ートマッパに伝えます。クライアントプログラムが、ある RPC プログラム番号 にコールを行う際には、まずサーバマシン上の RPC ポートマッパと交信して、 どの TCP/IP ポート番号に RPC のパケットを送れば良いのかを決定します。 RPC サーバプログラムは inetd(8) からも起動できますが、その場合は inetd より前に RPC ポートマッパを起動するようにして下さい。 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 yp-tools-2.4.tar.gz ypbind-mt-1.7.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 ドメイン名を知らない場合はシステム管理者かネットワー ク管理者に尋ねて下さい。 ・ /usr/sbin/rpc.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 PAM は NIS 上での shadow パスワードをサポートしません。特に pam_pwdb/ libpwdb がだめなんです。これは RedHat 5.x ユーザにとって大きな問題です 。 glibc と PAM を使っている場合は、 /etc/pam.d/* のエントリを変更する 必要があります。 pam_unix_* モジュールにある pam_pwdb のルールを置き換 えて下さい。しかし pam_unix_auth.so モジュールにはバグがあるので、これ は必ず動作するとは限りません。 /etc/pam.d/login の例を以下にあげます。 #%PAM-1.0 auth required /lib/security/pam_securetty.so auth required /lib/security/pam_unix.so auth required /lib/security/pam_nologin.so account required /lib/security/pam_unix.so password required /lib/security/pam_unix.so session required /lib/security/pam_unix.so ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8. NIS+ の設定 8.1. ソフトウェア Linux の NIS+ クライアントコードは GNU C ライブラリのバージョン 2 用に 開発されてきました。これを libc5 へ移植したものもあります。商用アプリケ ーションのほとんどは libc5 にリンクされていますし、これらアプリケーショ ンを glibc 向けに再コンパイルすることはできませんから。ただし libc5 と NIS+ を同時に使う際には問題があります。スタティックなプログラムは libc5 にリンクすることはできませんし、このライブラリでコンパイルしたプログラ ムは他のバージョンの libc5 では動作しません。 GNU C Library 2.1 を手に入れ、コンパイルする必要があります。 64bit プラ ットフォームなら GNU C Library 2.1.1 です。ベースのシステムとして、 glibc ベースの配布パッケージも必要になります。 Debian, RedHat, SuSE Linux などです。 どのディストリビューションでも、 gcc/g++ コンパイラ、 libstdc++, ncurses を再コンパイルしなければなりません。 Redhat では PAM の設定を大 幅に変更しなければなりません。 SuSE Linux 6.0 では shadow パッケージを 再コンパイルしなければなりません。 NIS+ クライアントのソフトウェアは以下から入手できます。 Site and Directory Filename ftp.funet.fi:/pub/gnu/funet libc-* glibc-crypt-* glibc-linuxthreads-* ftp.kernel.org:/pub/linux/utils/net/NIS+ nis-utils-1.3.tar.gz http://www.suse.de/~kukuk/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-1.3.11.tar.gz http://www.suse.de/~kukuk/nis/ に、より詳しい情報があります。 サーバのセットアップ方法は trad-NIS / NYS どちらの場合でも同じです。 コンパイルして ypserv と makedbm を作ります。 securenets ファイルを使う か tcp_wrapper を使うかを設定できます。 tcp_wrapper の方がずっと柔軟で すが、これが問題の原因となる場合も多く知られています。 tcp_wrapper は設 定ファイルの書き方によってはメモリーリークを起こすこともあります。もし tcp_wrapper を使うように ypserv をコンパイルして問題が起こった場合には 、 securenets ファイルを用いるようにコンパイルしなおしてください。 ypserv --version とすればどちらのバージョンを使っているか分かります。 サーバをマスターとして起動する場合は、 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/ yps-0.21.tar.gz NYS/servers ftp.kernel.org:/pub/linux/ yps-0.21.tar.gz 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 などは古いので使う必要はあ りませんし、また今後使うべきではありません。 ypserv 1.3.2 の rpc.yppasswdd は shadow を完全にサポートしています。 yppasswd は yp-tools-2.2.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 がサーバやクライアントで正しく設定できたら、この設定が起動時にも正 しく反映されるかを確認しなければなりません。 チェックする点は 2 つあります。起動スクリプトがあるかどうかと、 NIS ド メイン名が正しい場所に保存されているかどうか、です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.1. NIS 用の起動スクリプト あなたの使っている Linux での起動スクリプトの置場所になっているディレク トリを調べましょう。 /etc/init.d, /etc/rc.d/init.d, /sbin/init.d などに なっていると思います。 NIS の起動スクリプトがあるかどうか確認しましょう 。ファイルの名前はふつう ypbind とか ypclient となっているようです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.2. NIS ドメイン名 おそらくある種の人々にとって、 NIS を使う上での最大の難関は、 NIS ドメ イン名を再起動後にも取得できるようにすることでしょう。 Solaris 2.x では 、NIS ドメイン名は /etc/defaultdomain に 1 行で書かれていました。しかし、ほとんどの Linux ディストリビューシ ョンではこのファイルは使っていないようです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3. ディストリビューション固有の話題 現在のところ、いろいろな Linux ディストリビューションにおける NIS ドメ イン名の保管場所は、以下のようになっているようです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.1. Caldera 2.x Caldera は /etc/nis.conf ファイルを用いているようです。書式は通常の / etc/yp.conf と同じです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.2. Debian Debian は Sun と同じく /etc/defaultdomain を使っているようです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.3. Red Hat 6.x /etc/sysconfig/network ファイルの YP_DOMAINNAME 変数を (なければ作成し て) 修正してください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.4. SuSE Linux /etc/rc.config ファイルの YP_DOMAINNAME 変数を修正して、 SuSEconfig コ マンドを実行してください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12. 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 doesn't show the shadow map. This is correct, the name of the shadow map is shadow.byname, not shadow. 8. Solaris は必ずしも特権ポートを用いません。従って Solaris のクライア ントがある場合はパスワード mangling を用いてはいけません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13. よくある質問 (FAQ) あなたが疑問に思っていたことはここまでに大部分が解決されたことと思いま すが、まだ疑問点が残っていましたら、 comp.os.linux.networking などに質問すると良いと思います。 訳注:日本語のニュースグループとしては fj.os.linux japan.comp.linux などが良いでしょう。 訳者のページ (http://surf.ap.seikei.ac.jp/~nakano/linux/NIS-j.html) に は、個人的なインストール体験記が書いてあるほか、この文書で紹介されてい るソフトウェア入手先のミラーのうち、国内のものを紹介しています。