\documentstyle[a4j]{jarticle}
\topmargin -50pt
\oddsidemargin -20pt
\evensidemargin -20pt
\textwidth 480pt
\textheight 750pt

\begin{document}
\title{NIS}
\author{牧之内研 修士1年 兼子 譲}
\date{2002年7月4日}
\maketitle

\section{NISとは?}

NIS(Network Information Service)は、ある計算機(NISサーバ)が管理するファ
イルの内容を、その他の計算機(NISクライアント)に配布する仕組みです。

以下はNISで管理できるファイルの例です。

\begin{itemize}
 \item パスワードファイル
 \item /etc/hosts
 \item /etc/services
 \item amdのマップファイル
\end{itemize}

牧之内研究室では、NISによって個人のログイン名とパスワードを管理すること
によって、研究室内のマシンなら、自分のマシン以外にも、すべて同じログイン
名とパスワードでログインすることができ、一台一台にユーザを登録しなくても
利用することができます。

\section{NISドメイン}

NISによって一元管理するファイルを利用するUNIX計算機の集まりをNISドメイン
と呼びます。NISドメインはドメイン名によって区別します。

NISドメイン名がわかるとNISで管理している情報を簡単に取得されます。そこで

\begin{itemize}
 \item NISのドメインは簡単に想像できるようなものは避ける
 \item NISのドメインは知られてはいけない
 \item 外部の人に端末を触られないようにする
\end{itemize}

\section{NISサーバ}

NISを運用するためには、サーバとなるコンピュータが少なくとも1台は必要です。
これをNISサーバと呼び、NISドメインにおける情報を一括して管理する役割を持
ちます。NISサーバは同一ドメイン内に複数台設置することができます。

複数のNISサーバの内1台はマスターサーバとして動作させ、残りはスレーブサー
バとして動作させます。マスターサーバはすべてのNISクライアントで利用され
るファイルを保守し、NISクライアントが参照するファイルが置かれてあります。
スレーブサーバはNISマスターサーバのデータファイルのコピーをdbm(database
management)フォーマットで保持します。
マスターサーバは定期的にNISデータベースのコピーをスレーブサーバに送りま
す。一方、NISクライアントは、マスターまたはスレーブの全てのサーバから、
最初にレスポンスを返したサーバに接続します。

\section{NIS関係のコマンド}

\begin{itemize}
 \item ypserv\\
       NISサーバプログラム。サーバでのみ実行。
 \item ypbind\\
       NISクライアントプログラム。
 \item yppasswd\\
       NISサーバで管理するpasswdファイルの変更。
 \item ypcat\\
       NISの配っている情報を見る。例えばpasswdなら
       \begin{verbatim}
	% ypcat passwd
       \end{verbatim}
 \item ypinit\\
       NISデータベースの作成とインストール。マスターとスレーブで引数が違
       う。
 \item ypwhich\\
       NISサービスを与えているサーバ名を返す。
 \item domainname\\
       NISドメイン名を設定、表示する。引数なしで表示。ルートなら引数にド
       メイン名を与えて設定。
\end{itemize}

\section{研究室の設定}

\begin{itemize}
 \item NISマスターサーバ\\
       moon
 \item NISスレーブサーバ\\
       yoda(luke)\\
       ami(yumi)
\end{itemize}

NISドメインネームは秘密なのでここには書きませんがdomainnameコマンドを実
行することでわかります。

\subsection{NISのデータを更新するには?}

実際のデータはマスターサーバがテキストの形で保持している。これを変更する
と、マスターの持っているdbm形式のデータを変更し、スレーブに再度配布しな
ければならない。

実際のデータは/var/yp/nis.inputs/以下にある。

例えば、新しいユーザを追加する場合
\begin{enumerate}
 \item NISマスターサーバmoonにloginする
 \item /var/yp/nis.inputs/master.passwdにエントリ追加
 \item /var/yp/でmake
\end{enumerate}

\subsection{クライアントでNISの設定を有効にするには?}

\begin{itemize}
 \item 起動時にNISドメイン名をセットし、ypbindを起動させるために
       /etc/rc.confに以下の行を書きます。\\
       nisdomainname="×××"\\
       nis\_client\_enable="YES"\\
       これはdomainnameでドメイン名を設定し、ypbindを動かすのと同じです。
       NISサーバの場合にはさらに以下の行が必要です。(サーバはクライアン
       トでもあるので上の行はもちろん必要)\\
       nis\_server\_enable="YES"\\
       nis\_yppasswdd\_enable="YES"
 \item NISサーバにあるすべてのパスワードエントリを取り込むため、vipwコマ
       ンドで以下の行を/etc/master.passwdに追加します。\\
       +:::::::::\\
       この際必ずvipwを使いましょう。
 \item 今度はviを用いて/etc/groupに以下の行を追加します。\\
       +:::
 \item 同様に/etc/passwdに以下の行を追加します。\\
       +:*:::::
\end{itemize}

\section{本日の課題}

NISのスレーブサーバを立ち上げよう。

\begin{itemize}
 \item ルートでログイン
 \item ypinit -s moon.db.is.kyushu-u.ac.jp\\
       何か聞かれたらn
 \item ypserv
 \item ps -ax $|$ grep yp
 \item kill ypbindのプロセス番号
 \item ypbind -ypset
 \item ypset あなたのマシン名
 \item ypwhichで自分のマシンに聞きにいっているのを確認
 \item ypcat お好みの情報\\
       いろいろ試してみよう
 \item ps -ax $|$ grep yp
 \item kill ypservのプロセス番号
 \item kill ypbindのプロセス番号
 \item ypbind
 \item rm -r /var/yp/NISドメイン名のディレクトリ
 \item ypwhichでyumiになっていればOK
\end{itemize}

\subsection*{注意すべき点}

本来なら/etc/rc.confに変更を加え、再起動の際ypservが立ち上がるようにしな
ければならない。また、moon(マスターサーバ)でypinit -mを実行し、新たなスレー
ブを登録しなければ、データベースが更新されたとき新しいデータベースが送ら
れてこない。

今回は実習なのでこれらを実施しない。

\section{Reference}

\begin{verbatim}
	最新UNIXハンドブック、伊藤 和人著
	フリーUNIXで作るネットワークサーバ構築ガイド、國安和広+秀和システム出版編集部編著
	http://www.freebsd.org/ja/handbook/nis.html
	http://www.kuis.kyoto-u.ac.jp/imel/tebiki/rvsettei/node2.html
\end{verbatim}

\end{document}