nisサーバ作成

NISサーバを作ってみる。NISドメイン名は所属するDNSドメイン名(chaperone.jp)でも、単に単語だけでも構わない。ここではxtalとしてみる。
最小構成で構築したマシンにypservをインストール

[root@nis ~]# yum install ypserv yp-tools
[root@nis ~]# chkconfig ypserv on

そして、定めたNISドメイン名は、/etc/sysconfig/networkに定義する

[root@nis ~]# echo "NISDOMAIN=xtal" >> /etc/sysconfig/network
[root@nis ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=nis.chaperone.jp
GATEWAY=192.168.0.1
NISDOMAIN=xtal
[root@nis ~]#

NISサーバから提供するマップは、
passwd group hosts auto.master auto.home
の5種として、passwdのshadowファイルやgroupのgshadowファイルは使用せず、/var/yp/etcをnis向けマスターソースの場所とした。
そのため、/var/yp/Makefile には下記のような修正を加える

[root@nis ~]# vi /var/yp/Makefile
MERGE_PASSWD=false                         */var/yp/etc/shadowを使わず、/var/yp/etc/passwdのみ管理する
MERGE_GROUP=false
YPSRCDIR = /var/yp/etc                     *マップにするソースのありか
YPPWDDIR = /var/yp/etc                     */etc/passwdになるフィルのありか
all:  passwd group hosts auto.master auto.home
[root@nis ~]#

そしてNISサーバから提供するマップのソースファイルを /var/yp/etc に配置します。

[root@nis ~]# mkdir -p /var/yp/etc
[root@nis ~]# cat <<_EOF_> /var/yp/etc/passwd
saber:*:2001:2000:Arturia Pendragon:/home/saber:/bin/bash
illya:*:2000:2000:Illyasviel von Einzbern:/home/illya:/bin/bash
_EOF_
 
[root@nis ~]# cat <<_EOF_> /var/yp/etc/group
fate::2000
_EOF_
 
[root@nis ~]# cat <<_EOF_> /var/yp/etc/hosts
192.168.0.41  nfs.chaperone.jp nfs
_EOF_
 
[root@nis ~]# cat <<_EOF_> /var/yp/etc/auto.master
/home   auto.home   --timeout 60
_EOF_
 
[root@nis ~]# cat <<_EOF_> /var/yp/etc/auto.home
saber    -rw nfs:/export/saber
illya    -rw nfs:/export/illya
_EOF_
 
[root@nis ~]#

ypservデーモンを起動後に、/var/ypにてmakeを実行して、ソースファイルからマップを作成する

[root@nis ~]# /etc/init.d/rpcbind start && /etc/init.d/ypserv start
[root@nis ~]# cd /var/yp
[root@nis yp]# make
gmake[1]: ディレクトリ `/var/yp/xtal' に入ります
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating auto.master...
Updating auto.home...
gmake[1]: ディレクトリ `/var/yp/xtal' から出ます
[root@nis yp]#

*ソースファイルを修正したら、/var/ypでmakeを実行し直します。
*ログにsecurenetsがないぞ!と怒られるがなくてもいい。セキュアにしたいなら参照先を書けばいい

yppasswd

NIS配下のノードからパスワード・シェル変更の要求を処理するためにyppasswdを設定する。
*パッケージは ypserv に同封されている

[root@nis ~]# vi /etc/sysconfig/yppasswdd
PASSWDFILE=/var/yp/etc/passwd
YPPASSWDD_ARGS="-e chsh -e chfn"
[root@nis ~]# chkconfig yppasswdd on
[root@nis ~]# /etc/init.d/yppasswdd start

NISクライアントではyppasswd <ユーザ名>にてパスワードの変更ができるのだが、
各NISクライアントの/etc/profile.d/nis.{sh,csh}らを用意してyppasswdのpasswdへのaliasを用意すべきかと。
もしくはユーザ作成時に使う/etc/skelに予め.bashrcや.cshrcにalias passwd yppasswdなど組み込むべきかと。

nisクライアント

# yum install ypbind autofs nfs-utils dbus

*ypbindにdbusの稼働が必要みたい
インストール後、nisの設定はauthconfig-tuiコマンドを使って設定します。これを使わず、/etc/nsswitch.confやpam関係を調整するのは面倒なので。

# authconfig-tui

起動すると初期画面が現れます。ここで「NISを使用」を選択して、[次]へ進みます。
2013y01m02d_215223382.png
次の画面「NIS設定」において、ドメインとNISサーバを指定します。NISドメインは「xtal」、サーバは「nis」とします。
ここで、NISサーバの名称が/etc/hostsに存在しなければ、NISサーバのIPアドレスを入力します。
2013y01m02d_215508349.png
そして[OK]へ進みます。すると画面が代わり、下記のように表記されます。

portmap を停止中:                   [失敗]
portmap を起動中:                   [ OK ]
NIS ドメインにバインド中:           [ OK ]
NIS ドメインサーバーを検索中
#

この操作で変更が加えられたファイルは下記となる

  • /etc/sysconfig/authconfig
  • /etc/pam.d/system-auth-ac
  • /etc/yp.conf
  • /etc/nsswitch.conf
  • /etc/sysconfig/network

どの項目がnisマップを使うかは、/etc/nsswitch.confによりほんとど定められるが、serviceは手動で定義する必要がある。

#vi /etc/nsswitch.conf
services:   nis files

とでもする。autofsデーモンも起動させておく

# /etc/init.d/autofs start

認証の初期状態に戻したいなら

# env LANG=C authconfig \
--useshadow --disablemd5 --disablenis --disableldap --disableldapauth --disablesmartcard \
--disablerequiresmartcard --disablefingerprint --disablekrb5 --disablewinbind --disablewinbindauth \
--disableipav2 --disablehesiod --disablesssd --disablesssdauth --disablecache  \
--enablelocauthorize --update

と実行する
nisサーバと接続できない場合は

# rpcinfo -p nis

を実行して、「ypserv」項目が引けるかを調べる。

nisクライアント---動作確認

nisサーバから提供されているマップのリストは

# ypwhich -m
services.byservicename nis.chaperone.jp
auto.home nis.chaperone.jp
passwd.byname nis.chaperone.jp
netgroup.byuser nis.chaperone.jp
group.bygid nis.chaperone.jp
passwd.byuid nis.chaperone.jp
services.byname nis.chaperone.jp
group.byname nis.chaperone.jp
netgroup.byhost nis.chaperone.jp
netgroup nis.chaperone.jp
hosts.byaddr nis.chaperone.jp
hosts.byname nis.chaperone.jp
auto.master nis.chaperone.jp

として得られる。個々のマップは

# ypcat passwd
sgeadmin::2222:2222::/home/sgeadmin:/bin/bash
user01::2000:2000::/home/user01:/bin/bash
# ypcat group
crystal::2000:
sgeadmin::2222:

として得られる。他にもgetent passwdやgetnet groupを行い、確認を済ませる。

nisクライアント---yppasswd

本来ならpasswdにaliasを付けてyppasswdを動かすのがいいみたい。
っで、これを実行すると下記のようになる

$ yppasswd
Changing NIS account information for user01 on nis.chaperone.jp.
Changing NIS password for user01 on nis.chaperone.jp.
Please enter new password:
Please retype new password:
 
The NIS password has been changed on nis.chaperone.jp.
 
#
# ypcat passwd
sgeadmin::2222:2222::/home/sgeadmin:/bin/bash
user01:TTncZtcwXb2JU:2000:2000::/home/user01:/bin/bash              *パスワード欄が更新される
#

っでこのパスワードは、/etc/sysconfig/authconfigのPASSWDALGORITHMにより作られる。
md5なので大丈夫なのだが、これが最新のcentos6になるとsha512が規定になる。
異種混在の環境ではsha512を理解できないマシンがあると混乱するので、まぁーmd5に合わせた方が無難みたい。

nisスレーブ鯖

CentOS6.3でnisサーバを作ったらシリグラ様(irix6.5)と会話できなくなった。なので急遽CentOS5.8をnisスレーブとして構築してみた次第。っで、これで問題は回避された。原因は不明なのだけど...
nisサーバ一台での運用でも問題ないのだが、冗長運用をするならという事でスレーブサーバ(nisslave)を作ってみる。
まず、nisサーバからデータを引き上げる事が必要なので、nisクライアントの機能は必要。加え当然サーバ機能も。なので

# yum install ypbind yp-tools ypserv

これで必要最低限のnisクライアント設定を行う

# vi /etc/sysconfig/network
(中略)
NISDOMAIN=xtal                                 *nisドメイン名を[NISDOMAIN]に付ける
# vi /etc/yp.conf
(中略)
domain xtal server nis                         *nisサーバ名[nis]は/etc/hostsに記載されていること
# /etc/init.d/portmap start
# /etc/init.d/ypbind start
# ypwhich -m
nis.chaperone.jp                               *ypwhichでnisサーバが引ければok
# /etc/init.d/ypbind stop                      *ypbindを停止
# chkconfig portmap on                         *portmapのみを再起動後でも稼動させる

*このマシンにnisアカウントをログインさせるつもりがないのでypbindは停止。/etc/nsswitch.confやpam関係はデフォのまま
そしてnisスレーブサーバを構築

# /usr/lib64/yp/ypinit -s nis                  *nisサーバを指定して実行
We will need a few minutes to copy the data from nis.
Transferring services.byservicename...
Trying ypxfrd ... not running                  *ypxfrdを使わずに、ypxfrでnisサーバのマップを取得
(中略)
# ls /var/yp/xtal/                             *nisサーバから取得したnisマップ
auto.home    group.byname  netgroup         passwd.byname    services.byservicename
auto.master  hosts.byaddr  netgroup.byhost  passwd.byuid
group.bygid  hosts.byname  netgroup.byuser  services.byname
# /etc/init.d/ypserv start
# ypcat -h nisslave hosts                      *データが引けるか確認 -hは参照ホストを指定してます
# chkconfig ypserv on

これでnisスレーブ側の設定は完了。
次に、nisサーバ側の調整。nisマップが変更されたときにnisスレーブにもデータが伝播するように調整する。

# ypcat -k ypservers > /tmp/ypservers
# vi /tmp/ypservers
nis       nis                      *マスターサーバ名
nisslave  nisslave                 *スレーブサーバ名を追加

*行単位でマシン名を登録。同じ名前を繰り返して記入。既存のypserversの確認は ypcat -k ypserversにて可能
そして、ypserversのnisマップを手動で作成します。

# cat /tmp/ypservers | /usr/lib64/yp/makedbm - /var/yp/`domainname`/ypservers

次に、更新されたnisマップをスレーブサーバに伝播させるには/var/yp/MakefileでNOPUSH=falseとする必要がある。
実際の伝播は/usr/sbin/yppushにて行われる。このyppushはnisのypserversを呼んで伝播させるホストを決める。そのため
nisサーバにはnisクライアントの機能も必要になる。そしてyppushはnisスレーブ側のypxfrを呼び、nisスレーブ側のypxfrがnisサーバを
訪ねて更新されたマップを取得する。取得方法にはもう一つあり、それがypxfrdなるデーモン。こっちの方が早いらしい。
これはnisスレーブ側で動かすもの。
っで、まずnisマスターサーバにnisクライアント機能を付与させる

# vi /etc/yp.conf
domain xtal server nis
# chkconfig ypbind
# /etc/init.d/ypbind start
# ypwhich
nis.chaperone.jp

そして、/var/yp/Makefileを修正します。

# vi /var/yp/Makefile
NOPUSH=false                       *NOPUSH=trueからfalseへ
#

これでnisマップが変更した際、伝播されることになります。
あと、rootのcrontabに下記を入れる。

20 *    * * *    /usr/lib64/yp/ypxfr_1perhour
40 6    * * *    /usr/lib64/yp/ypxfr_1perday
55 6,18 * * *    /usr/lib64/yp/ypxfr_2perday

ypデーモン関係一覧

nisのサービス提供で必要なデーモンを用途毎に整理

ypbindypservypxfrdportmap備考
nisサーバ○/××ypbindは、スレーブを持つなら○。そうでないなら×
nisスレーブ×
nisクライアント××

nisサーバ/スレーブにnisユーザのログインは不要と考えている


■freenas
freenasの7.2を使った。usbにインストールして、HDDは単体でufs。d1として/mntにマウント。そしてnfs公開。
nfs-クライアント側には
yum install nfs-utils
をインストール

初回ログインのとき/home/$userがないので、ログインできない。
その場合は、各自のマシンになるのだが、pamに
vi /etc/pam.d/system-auth

session     required      pam_mkhomedir.so skel=/etc/skel umask=0022

を加える。
そうすれば、一応ホームディレクトリーが作成される。
問題点発覚:ユーザがログインする際、NISはfreenasへ該当ユーザのホームディレクトリーマウント要求を出す。
しかし、freenas側はそんなユーザは存在しないので、ありませんと返事。するとマウントできずに、つまり
ホームディレクトリー作成前に終了してしまう。ユーザがログインする際、その一つ手前のマウントポジションが
マウントされればいいのか?つまり、/homeだけがマウントされ、その次にユーザのホームディレクトリーが
マウントされればいいように思える。

NISに接続できない

NISクライアントで ypbind で接続しようにも出来ない場合、まずは NISサーバ側で

[root@nis ~]# ypserv -d
[ypserv (ypserv) 2.19]
 
Find securenet: 255.255.255.0 192.168.0.0
ypserv.conf: dns: 0
ypserv.conf: files: 30
ypserv.conf: xfr_check_port: 1
ypserv.conf: 0.0.0.0/0.0.0.0:*:shadow.byname:2
ypserv.conf: 0.0.0.0/0.0.0.0:*:passwd.adjunct.byname:2

とデバックモードで起動して、そしてNISクライアントから接続を試みてみる。
下記のようなエラーがデバックモードで観測されるのなら、単にNISサーバでのmakeができてないだけみたい。

ypproc_domain_nonack("xtal") [From: 192.168.0.41:53554]
        -> Ignored (not a valid domain)
ypproc_domain_nonack("xtal") [From: 192.168.0.41:41510]
        -> Ignored (not a valid domain)

*192.168.0.41はNISクライアントのIPアドレス

NFSサーバマシンにログインさせない

NISの配下である必要はあるが、NFSサーバにログインされては困るなら
/etc/nsswitch.confを調整して

[root@nfs ~]# vi /etc/nsswitch.conf
passwd:     files
shadow:     files
group:      files
(略)
[root@nfs ~]#

/etc/passwdに記載されたユーザのみログイン可能とさせる。
あるいはnetgroupを使って、特定のNISアカウントのみログインできるような方策もある。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2014-12-20 (土) 22:39:24 (944d)