18 December 2012

NISの設定方法をメモっておきます。

最初に RHEL/CentOS での方法を記載し、最後に Ubuntu の場合の差分を記載します。

RHEL/CentOS編

CentOS 6.3でやってみました。

NISに関連するパッケージは以下です。

  • ypserv : NISサーバ
  • ypbind : NISクライアントとNISドメインをバインドするデーモン
  • yp-tools: NISクライアントプログラム集

ypbind と yp-tools はデフォルトで入っているはず。 ypserv はサーバー側にだけ必要になります。

NISサーバー側の設定

# yum install ypserv

でインストールします。

/etc/sysconfig/network に以下のようにNISドメイン名を追加する。NISドメイン名はとりあえずサーバーとクライアントで共通であればよいです。普通、ホスト名のドットより後ろの部分を使います。

NISDOMAIN=<NISドメイン名>

ypserv サービスを起動しておく。

/var/yp/Makefileall: ターゲットの部分を見ればどのマップ(=NISで管理されるファイル)が作成されるかがわかります。 とりあえずデフォルトのままでOKです。

NISデータベースを初期化します。

32bit OSなら

# /usr/lib/yp/ypinit -m

64bit OSなら

# /usr/lib64/yp/ypinit -m

を実行する。

NISクライアント側の設定

RHEL/CentOS なら ypbind と yp-tools はデフォルトで入っているので、特にインストールするものはなし。

/etc/yp.conf に以下のような設定を記載する

domain <NISドメイン名> server <NISサーバー名>

/etc/nsswitch.conf を開き

passwd:  files
shadow:  files
group:   files

のようになっているところを

passwd:   nis files
shadow:   nis files
group:    nis files

のように書きかえます。

これで、passwd, shadow, group は NIS ⇒ ローカルファイルの順番に見にいってくれるようになります。

/etc/nsswitch.conf の設定を間違えると最悪起動しなくなるので、ご注意ください。(filesfile と書き間違えて、起動しなくなった経験あり)。 もし起動しなくなった場合、KNOPPIX とかで起動して、ハードディスクをマウントし、 /etc/nsswitch.conf を正しく修正するのが手っ取り早いと思います。

そして ypbind のサービスを起動する。

# ypwhich

を実行し、でNISサーバーとバインドできているのを確認できればOKです。

ちゃんと動いていれば

# ypcat passwd

とすることでマップの中身が読めるはず。

ユーザー認証を NISで管理できても、ホームディレクトリが作られていなかったら、まともにログインできません。したがって、NIS単独で使うことはあまりなくて、NIS と NFS (さらには autofsも)と組み合わせるのが通常の運用形態だと思います。

NFSのセットアップ方法は次回まとめます。

最後に yppasswd コマンドでNIS経由でパスワード変更できるようにします。

NISサーバー側で yppasswdd サービスを起動させておきます。すると、NISクライアント側は yppasswd コマンドでパスワード変更できるようになります。

ちゃんと設定したつもりなのに、最初は

$ yppasswd

とすると

yppasswd: yppasswdd not running on NIS master host ("localhost.localdomain")

というエラーメッセージが出てうまくいきませんでした。

しばらく考えて、エラーの意味がわかった。

NISサーバーもNISクライアントもホスト名が localhost.localdomain になっていて、混同されていたようです。

CentOS6.3 はインストーラーがバグっているみたいで、インストール時にホスト名に何を入力しても、結局 localhost.localdomain になってしまう。 (RHELのインストーラーは大丈夫です。)

で、そのままほったらかしにして、サーバー側もクライアント側も localhost.localdomain でかぶっていると yppasswd が動きません。

ホスト名は /etc/sysconfig/network

HOSTNAME=<ホスト名>

で設定できるので、ここで NISサーバーとNISクライアントに別々の名前をつけてあげましょう。

例えば、 HOSTNAME=my.nisserver というホスト名にしたとする。

そして、もう一回

# /usr/lib/yp/ypinit -m

としてあげると

              next host to add:    my.nisserver
              next host to add:

のように 今つけた、NIS サーバー名が入っている。

そして、クライアント側の /etc/hosts

192.168.11.5     my.nisserver

のように NIS サーバーのIPアドレスとの対応を書いておけば yppasswd がうまくいきます。

以上が、RHEL/CentOSの場合のやり方です。

Ubuntu編

Ubuntu 12.04LTS でのやり方も簡単にまとめておきます。

Ubuntu の場合、サーバーもクライアントも

$ sudo apt-get install nis

でインストールします。

インストール途中で NISドメインを聞かれると思いますので適当なドメイン名を入れます。 このNISドメイン名は /etc/defaultdomain に書き込まれます。

NISサーバー側は /etc/default/nis という設定ファイルを開いて

NISSERVER=false

という行を

NISSERVER=master

に変更します。

ypserv サービスを起動し

$ sudo /usr/lib/yp/ypinit -m

でデータベース作成します。

NISクライアント側は /etc/yp.conf を編集して

domain <NISドメイン名> server <NISサーバー名>

という設定を記載します。

/etc/nsswitch.conf を開き

passwd: compat
shadow: compat
group:  compat

のようになっている部分を

passwd:   nis compat
shadow:   nis compat
group:    nis compat

のように変更。

ypbind サービスを起動します。

なお、Ubuntu 12.04 ではデスクトップマネジャーが lightdm になっていて、ローカルに存在するアカウント名しか選択できないようになっております。 そのままでは任意のアカウント名が入力できないので NISで管理しているアカウント名を入力ができないことになります。

そこで、以下のように入力します。

$ /usr/lib/lightdm/lightdm-set-defaults -m true

ログイン画面に「ログイン」という項目が出てきて、任意のアカウント名が入力ができるようになります。



blog comments powered by Disqus