サーバ間での認証情報共有(NIS)

NISユーザ情報閲覧・編集コマンド

NISクライアントではローカルの/etc/passwd(ユーザ情報)、/etc/group(グループ情報)などの情報は意味を持たなくなる。これらに相当する情報を得るためのコマンド一覧はypcat -xで得られる。

【書式】NIS情報関係コマンド一覧表示
ypcat -x

ypcat passwd

NISクライアントでユーザパスワードを変更するには、ローカルユーザパスワードを変更するpasswdの代わりにyppasswdコマンドを用いる。

【書式】NISデータベースのパスワード、ログインシェル、GECOS フィールドのいずれかを変更する
yppasswd オプション ユーザ名

オプション指定がない場合、-pが既定のオプションとして処理される。ユーザ名を省略するとyppasswdコマンドを起動したユーザのアカウントが対象となる。なおユーザ名を指定して他のユーザの情報を変更できるのはスーパーユーザーのみである。

yppasswd -fyppasswd -lはそれぞれypchfnypchshと同等。

yppasswd -f
ypchfn
ユーザに関するコメント情報(GECOSフィールド)を表示・更新する。これを実行すると以下のようなプロンプトを表示する。角括弧で囲まれた値は既定値である。
[user@server ~]$ ypchfn
To accept the default, simply press return. To enter an empty
field, type the word "none".
Name [Taro User]: 
Location [4th floor, bldg 123]: 
Office Phone []: 
Home Phone []: 
NISを使用していない場合はローカルのユーザ情報を変更するchfnを用いる。
yppasswd -l
ypsh
ユーザのログインシェルを表示・更新する。NISを使用していない場合はローカルのユーザ情報を変更するchshを用いる。
-p
ユーザパスワードを更新する。

既定の設定では、chsh(ログインシェルの設定)、chfnのNIS版であるypchshypchfnは有効になっていない。有効にするには/etc/sysconfig/networkファイルに以下の情報を追記する。

【例】ypchsh、ypchfn共に使えるようにする
YPPASSWDD_ARGS="-e chsh -e chfn"

ユーザの追加・編集・削除

NISサーバ上でユーザの追加・編集・削除を行った後、各NISクライアントへユーザ情報を反映させる。

【例】ユーザの追加(要管理者権限)
[root@nissv ~]# useradd newuser ※パスが /usr/sbin に通っていない場合はフルパスでコマンド指定
[root@nissv ~]# cd /var/yp
[root@nissv ~]# make
gmake[1]: ディレクトリ `/var/yp/mynis' に入ります
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating netid.byname...
gmake[1]: ディレクトリ `/var/yp/mynis' から出ます

NISサーバの立ち上げ・設定

大まかに言うと、ypservをインストールし、各種設定を行った上でypinit -mを実行すれば良い[5]。 以下、CentOS 6の場合の例。

1. (未インストールなら)ypservをインストールする
[root@nissv ~]# yum install ypserv
2. 設定内容の確認・修正

/var/yp/Makefile の内容を確認し、必要に応じ修正する。Makefileの設定詳細は以下の通り。

項目 内容 既定値
NOPUSH trueに設定するとNISスレーブサーバに対するNIS情報(マップ)の送信は行われない。NISサーバが単一の場合はtrueでよい。スレーブサーバがいる場合は /var/yp/ypservers にスレーブサーバを記載した上で、この値をfalseに変更する。 true NOPUSH=false
MINUID NISクライアントに通知するユーザのuid最小値 500 MINUID=100
MINGID NISクライアントに通知するグループのgid最小値 500 MINGID=100
all: NISクライアントに通知する情報種別の指定 asswd group hosts rpc services netid protocols mail all: passwd group hosts rpc services netid protocols mail
3. NISドメイン名の設定

一時的には ypdomainname コマンドまたは nisdomainname コマンドで設定できる(両コマンドは機能としては同じ?)

# 現在の設定値を表示
$ ypdomainame
mynis
# 設定値を変更
$ ypdomainame NISドメイン名

OS再起動後も恒久的に設定を有効とするにはネットワーク設定に記述しておく。

$ cat /etc/sysconfig/network
...
NISDOMAIN="mynis"
...
4. NISクライアントの範囲設定

接続を許可するNISクライアントのネットワーク範囲を設定する。設定は /var/yp/securenets に記載する。このファイルが存在しなければ全てのネットワークからの接続を受け付ける(iptablesなど他のしくみでypservサービスに届く前にブロックされたりしない限り)。以下に securenets の例を示す[4]

# ローカルホストからの接続は全て許可する。これは必要
host 127.0.0.1
# 131.234.223.0 ネットワークにいるあらゆるホストからの接続を許可する
255.255.255.0   131.234.223.0
# 131.234.214.0 から 131.234.215.255 の範囲にいるあらゆるホストからの接続を許可する
255.255.254.0   131.234.214.0
5.
4. ローカル認証ファイル群の内容を確認

NISサーバを他から移行する場合は、あらかじめ認証情報をローカルにコピーしておく。

[root@nissv ~]# cp -p /etc/passwd /etc/passwd.bak
[root@nissv ~]# cp -p /etc/shadow /etc/shadow.bak
[root@nissv ~]# cp -p /etc/group /etc/group.bak
[root@nissv ~]# cp -p /etc/gshadow /etc/gshadow.bak
[root@nissv ~]# scp root@oldnissv:/etc/{passwd,shadow,group,gshadow} .
4. ypserv起動

必要に応じ、chkconfigの設定でOS起動時にypservが自動起動するよう設定する。

[root@nissv ~]# service ypserv start
YP サーバーサービスを起動中:                               [  OK  ]
[root@nissv ~]# chkconfig --list ypserv
ypserv         	0:off	1:off	2:off	3:off	4:off	5:off	6:off
[root@nissv ~]# chkconfig ypserv on
[root@nissv ~]# chkconfig --list ypserv
ypserv         	0:off	1:off	2:on	3:on	4:on	5:on	6:off
5. NISサーバ設定実行
[root@nissv ~]# cd /usr/lib64/yp
[root@nissv yp]# ./ypinit -m

At this point, we have to construct a list of the hosts which will run NIS
servers.  nissv is in the list of NIS server hosts.  Please continue to add
the names for the other hosts, one per line.  When you are done with the
list, type a <control D>.
	next host to add:  nissv
	next host to add:  nissv2
	next host to add:  (Ctrl + D)
The current list of NIS servers looks like this:

nissv
nissv2

Is this correct?  [y/n: y]  y
We need a few minutes to build the databases...
Building /var/yp/mynis/ypservers...
Running /var/yp/Makefile...
gmake[1]: ディレクトリ `/var/yp/mynis' に入ります
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: ディレクトリ `/var/yp/mynis' から出ます

nissv has been set up as a NIS master server.

Now you can run ypinit -s nissv on all slave server.

NISサーバの各種設定は /var/yp/Makefile に記載する。

NISスレーブサーバの設定

RHEL/CentOSにおける、NISスレーブサーバの追加方法。

1. スレーブサーバの準備

ypbindとypservがインストールされていなかったらyumコマンドなどを使ってインストールしておく。

これからNISスレーブサーバに設定するサーバを、まずはNISクライアントに設定し、問題なくNISサーバと通信できていることを確認する。

[root@nisslave ~]# nisdomainname
mynisworld
あとは/etc/nsswitch.confの内容チェック。
2. マスター側にて、スレーブサーバの指定を行う

NIS データーベースの作成とインストールを行うプログラムypinitを使って行う。

【例】
[root@nisserver ~]# cd /usr/lib64/yp
[root@nisserver ~]# ./ypinit -m

At this point, we have to construct a list of the hosts which will run NIS
servers.  nisserver is in the list of NIS server hosts.  Please continue to add
the names for the other hosts, one per line.  When you are done with the
list, type a <control D>.
	next host to add:  nisserver
	next host to add:nisslave
	next host to add:(Ctrl + D)
The current list of NIS servers looks like this:

nisserver
nisslave

Is this correct?  [y/n: y]  y
We need a few minutes to build the databases...
Building /var/yp/pdbj_nis/ypservers...
Running /var/yp/Makefile...
gmake[1]: ディレクトリ `/var/yp/pdbj_nis' に入ります
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: ディレクトリ `/var/yp/pdbj_nis' から出ます

nisserver has been set up as a NIS master server.

Now you can run ypinit -s nisserver on all slave server.
3. スレーブサーバの設定
[root@nisslave ~]# cd /usr/lib64/yp
[root@nisslave ~]# ./ypinit -s nisserver
We will need a few minutes to copy the data from nisserver.
Transferring hosts.byaddr...
Trying ypxfrd ... not running

Transferring rpc.byname...
Trying ypxfrd ... not running

Transferring hosts.byname...
Trying ypxfrd ... not running

Transferring ypservers...
Trying ypxfrd ... not running

Transferring protocols.byname...
Trying ypxfrd ... not running

Transferring netid.byname...
Trying ypxfrd ... not running

Transferring rpc.bynumber...
Trying ypxfrd ... not running

Transferring protocols.bynumber...
Trying ypxfrd ... not running

Transferring group.byname...
Trying ypxfrd ... not running

Transferring passwd.byname...
Trying ypxfrd ... not running

Transferring passwd.byuid...
Trying ypxfrd ... not running

Transferring services.byname...
Trying ypxfrd ... not running

Transferring group.bygid...
Trying ypxfrd ... not running

Transferring services.byservicename...
Trying ypxfrd ... not running

Transferring mail.aliases...
Trying ypxfrd ... not running


nisserver's NIS data base has been set up.
If there were warnings, please figure out what went wrong, and fix it.

At this point, make sure that /etc/passwd and /etc/group have
been edited so that when the NIS is activated, the data bases you
have just created will be used, instead of the /etc ASCII files.
# ypserv の自動起動をONにする
[root@nisslave ~]# chkconfig ypserv on
# 最初は手動で ypserv を起動
[root@nisslave ~]# service ypserv start
YP サーバーサービスを起動中:                               [  OK  ]
# ypbind 再起動
[root@nisslave ~]# service ypbind restart
NIS サービスを停止中:                                      [  OK  ]
NIS ドメインにバインド中:                                  [  OK  ]
NIS ドメインサーバーを検索中
4. NISクライアント動作チェック
NISクライアントがNISスレーブから情報を取得できるかチェックする。 NIS設定ファイルで参照するNISサーバリストからNISマスターに関する記述を一旦コメントアウトし、NISスレーブだけを参照するようにして問題なく動作するか確認する。
[root@nisclient ~]# vi /etc/yp.conf
...
domain mynisworld server nisserver
↓
#domain mynisworld server nisserver
domain mynisworld server nisslave
# ypbind 再起動
[root@nisclient ~]# service ypbind restart
NIS サービスを停止中:                                      [  OK  ]
NIS ドメインにバインド中:                                  [  OK  ]
NIS ドメインサーバーを検索中
# 参照先NISサーバ確認
[root@nisclient ~]# ypwhich
nisserver
# ユーザ情報一覧確認
[root@nisclient ~]# ypcat passwd
...(ユーザ情報一覧)
# 特定ユーザ情報確認
[root@nisclient ~]# id user
uid=500(user) gid=500(user) 所属グループ=1000(workgroup),5000(user)
5. 各NISクライアントの設定
NISスレーブの情報を各NISクライアントに追加する。
[root@nisclient ~]# vi /etc/yp.conf
...
domain mynisworld server nisserver
domain mynisworld server nisslave ←追記
# ypbind 再起動
[root@nisclient ~]# service ypbind restart
NIS サービスを停止中:                                      [  OK  ]
NIS ドメインにバインド中:                                  [  OK  ]
NIS ドメインサーバーを検索中

NISクライアントの設定

[3]

その他NIS関係コマンド

NISデータベースの作成とインストールを行う(ypinit)

NISマスタサーバおよびスレーブサーバの設定を行う。 コマンドのパスは /usr/lib/yp(32ビット環境)または /usr/lib64/yp(64ビット環境)。

【書式】
ypinit オプション
-m
自身(localhost)をNISマスターに設定する。
-s マスターサーバホスト名
指定したホストをNISサーバとしてここから情報を取得し、自身をNISスレーブサーバに設定する。

事例はNISスレーブサーバの設定「2. マスター側にて、スレーブサーバの指定を行う」「3. スレーブサーバの設定」参照のこと

NISクライアントがどのNISサーバを参照しているかを知る(ypwhich)

【例】
$ ypwhich
nisserver1

トラブルシューティング

ypcat passwdを実行すると「No such map passwd.byname. Reason: サーバドメインにそのようなマップはありません」と返る

NISサーバのホスト名での指定が、NISクライアントの/etc/yp.confと、NISサーバの/var/yp/ypserversで違っていると、ypcat passwdなど実行したときに表題のエラーが出ていた。