NIS&NFS

目次

NISとNFSは組みで使うとネットワーク上の一意のユーザやホームディレクトリを提供できます。対で利用することが多いので、ここではNISとNFSのセットでまとめました。

NISマップの共有
NISマスターサーバーの設定
NISクライアントの設定
NISスレーブサーバーの設定
NISの管理
NFSサーバーの構築
NFSクライアントの設定
オートファイルシステム
キャッシュファイルシステム

戻る

NISマップの共有

NISを使ってどのマップ(情報)を共有するのかをまず初めに決めておいてください。そして導入前には必ずNISクライアントと、NISサーバーとのUIDとGIDを一致させておいてください。そしてNISが何かの障害で機能しなかった時の事を考えて リモートで操作する場合は少なくともルート以外の1ユーザーはNISマップを利用しない様にするべきです。

<準備>
NISとは/etcの設定を複数で共有するサービスです。NISを利用する目的は、ユーザー管理、グループ管理、そしてオートマウントテーブル等の共有ではないでしょうか。ところが/etc/passwdにはroot情報も入っていますし、/etc/shadowには他に知れてはならないパスワードも含まれています。これらは共有するべき情報ではありません。ですから共有したくない情報のために/etc以下のファイルを別 の場所に移し、
ファイルを編集してから用いる方が良いでしょう。それが一般的なNISの利用方法です。/etc以下の共有したいファイルだけを/var/yp/etc/にコピーして下さい。そして、移したファイルから不要な情報は削除してください。 得に、wheelユーザーのpasswd共有には注意してください。ypcatコマンドを使えばshadowファイルも見る事ができますので、rootユーザーはもちろんのこと、wheelユーザーも共有情報から削除しておくべきです。(wheelユーザーの場合に限りauto_homeのみの共有をお勧めします。

# mkdir -p /var/yp/etc
# cp /etc/passwd /var/yp/etc/ (ルートの行やその他システムユーザーの行は削除)
# cp /etc/shadow /var/yp/etc/ (passwdファイルで削除したユーザーの行を削除)
# cp /etc/auto_* /var/yp/etc/
# cp /etc/group /var/yp/etc/ (システムユーザーグループやルートグループを削除)
# cp /etc/hosts /var/yp/etc/
   

その他用意するべきファイルは
ethers ipnodes networks publickey netgroup rpc bootparams netmasks protocols services timezone
です。この中でもbootparams ethers netgroup ipnodes timezoneは必要ですので絶対に作成してください。
もしsendmailを利用しているのであれば /etc/aliasesも必要です。共有しないファイルは空のファイルを作成してください。必要な情報であれば/etcからコピーしてください。

# touch /var/yp/etc/ethers
# touch /var/yp/etc/ipnodes
# touch /var/yp/etc/networks
# touch /var/yp/etc/publickey
# touch /var/yp/etc/netgroup
# touch /var/yp/etc/rpc
# touch /var/yp/etc/bootparams
# touch /var/yp/etc/hosts
# touch /var/yp/etc/netmasks
# touch /var/yp/etc/protocols
# touch /var/yp/etc/services
# touch /var/yp/etc/timezone
   

/var/yp/Makefileを修正してください。

DIR =/var/yp/etc
PWDIR =/var/yp/etc
ALIASES = /etc/mail/aliases (qmailを利用している場合は削除)

all: passwd group hosts ipnodes ethers networks rpc services protocols netgroup bootparams aliases publickey netid netmasks c2secure timezone auto.master auto.home auth.attr exec.attr prof.attr user.attr audit.user(使わないマップを削除)
   

(例)
auth.attr exec.attr prof.attr user.attr audit.user はRBDBのデータファイルでしょうから削除しました。
aliases qmailを使っているので削除しました。

最後にdomainnameとNISサーバーのhostsテーブルを定義してください。

# domainname [ドメイン名]
# echo "[IPアドレス] [ホスト名]" >> /etc/hosts (スレーブサーバーを用意する場合はスレーブサーバーのホスト名も追記します)
# echo "[ドメイン名]" > /etc/defaultdomain

NISマスターサーバーの設定

共有する情報(NISマップ)とhostsテーブル及びdomainnameの準備ができればサーバーを立ち上げることができます。
まず初めにマップをmakeします。

# ypinit -m   

ここでスレーブサーバーを入力するように求められますが、後で説明するスレーブサーバーのホスト名を入力して下さい。(スレーブは無くてもかまいません。)
次はY、N、Yの返答でうまく完了すると思います。

そしてNISサーバーの起動です。

# /usr/lib/netsvc/yp/ypstart   

サーバーが立っているのか確認する場合は次の様にしてください。

# ypcat [NISマップ]   

NISサーバーを停止する場合は次の様にしてください。

# /usr/lib/netsvc/yp/stop   

一度NISサーバーを稼動させれば、次回再起動後もNISサーバーはrpcdにより自動で立ち上がります。しかし domainnameにセットしたNISドメインは再起動後クリアされてしまいますので/etc/defaultdomainに記述しておいてください。

NISクライアントの設定

NISクライアント側でもdomainnameのセットは必要です。次の様にdomainnameとNISサーバーのhostsテーブルを定義してください。

# domainname [ドメイン名]
# echo "[IPアドレス] [ホスト名]" >> /etc/hosts (スレーブサーバーを用意する場合はスレーブサーバーのホスト名も追記します)
# echo "[ドメイン名]" > /etc/defaultdomain

NISクライアント側で次の様に実行します。

# ypinit -c   

マスターサーバー スレーブサーバーのホスト名を入力してください。(スレーブが無い場合はマスターのホスト名だけて結構です。)

# /usr/lib/netsvc/yp/ypstart   

動作の確認はマスターサーバーと同じようにNISマップを確認してみましょう。NISマップが引いてきているのなら、NISクライアントは動作しています。

# ypcat [NISマップ]   

NISマップが共有されていることが分かれば、実際にローカルの/etc以下のファイルからNISマップへの乗り換えです。/etc/nsswitch.confにどの情報をどこから引いてくるかを定義していますので、編集してください。

passwd: files nis
group: files nis
# You must also set up the /etc/resolv.conf file for DNS name
# server lookup. See resolv.conf(4).
hosts: files
nis dns
ipnodes: files
# Uncomment the following line and comment out the above to resolve
# both IPv4 and IPv6 addresses from the ipnodes databases. Note that
# IPv4 addresses are searched in all of the ipnodes databases before
# searching the hosts databases. Before turning this option on, consult
# the Network Administration Guide for more details on using IPv6.
#ipnodes: files dns

networks: files
protocols: files
rpc: files
ethers: files
netmasks: files
bootparams: files
publickey: files
# At present there isn't a 'files' backend for netgroup; the system will
# figure it out pretty quickly, and won't use netgroups at all.
netgroup: files
nis
automount: files nis
aliases: files
services: files
[NOTFOUND=return] nis
sendmailvars: files
printers: user files

auth_attr: files
prof_attr: files

NISを利用するサービスには「nis」と追記すると良いでしょう。ここではfiles(/etc以下のファイル)を先に調べて、情報が無ければNISから引くことにしています。前から順に情報を取得していくので、順序は重要です。
[NOTFOUND=return]
というのは情報が見つからなかった場合にそれ以上の処理を行わないというものです。ただし、ファイルが存在しなかった場合のみ、次の情報を取得します。

SUCCESS : 取得成功
UNAVAIL : サービスが応答しない。
NOTFOUND : 要求されたデータが存在しなかった。
TRYAGAIN : サービスはビジー状態なので後で再試行する。

これらの
ステータスを利用してnsswitch.confの検索をより効率よく行うことができます。
files [NOTFOUND=return SUCCESS=return UNAVAIL=continue TRYAGAIN=continue] nis

ネームサービスの検索のデフォルト [NOTFOUND=continue SUCCESS=return UNAVAIL=continue TRYAGAIN=continue]

次回再起動後もNISクライアントは有効ですが、domainnameにセットされたNISドメインは再起動後クリアされてしまいます。ですから/etc/defaultdomainに記述しておいて下さい。

<Intel Solarisのエラー報告>
x86 Solaris8でNISを利用する際、NISマップのhostsが上手く共有できません。> ypcat hosts とすればNISマップのhostsが参照されるのですが、/etc/nsswitch.confのhost検索が上手く行えませんでした。SPARC版では問題なく動作しています。このエラーについての
情報があればこちらまでご連絡いただければ助かります。

NISスレーブサーバーの設定

NISが落ちると致命的な障害になりかねませんのでスレーブはできる限り用意するべきです。構築は常時稼動しているマシンに対して、NISサーバーとNISクライアントを兼ねて動作させれば良いだけのことです。実行後にはマスターサーバーとスレーブサーバーのホスト名を入力してください。

# ypinit -c  

一度クライアントとして動作しているのであれば、そのクライアントマシン上で次のコマンドラインを実行して下さい。以上です。

# ypinit -s [マスターサーバーのホスト名]
# /usr/lib/netsvc/yp/ypstop
# /usr/lib/netsvc/yp/ypstart
   

マスターサーバーと同様に次回再起動後もNISスレーブサーバー、クライアント共に立ち上がります。


NISの管理

<NISマップの更新>
マスターサーバーのNISマップを更新するだけで動的にクライアントにもスレーブサーバーにも伝わります。更新したいマップ(/var/yp/etc/以下)を編集後、次の様に実行してください。

# cd /var/yp
# make
   

特定のマップのみを更新する場合は次の様に実行してください。

# make [変更したファイル名]   

もしNISを利用したユーザーがパスワードを変更した場合、動的にNISサーバーに更新されますので管理者の作業は必要ありません。

<セキュリティーの設定>
/var/yp/securenetsファイルを作成することでNISマップを共有するホストを制限できます。

255.255.255.0  192.168.0.0
host        192.168.1.1
 

ネットマスクを先に書きます。hostはネットマスク255.255.255.255を意味します。1台を許可する時はhostの記述を使って下さい。
(注)/var/yp/securenetsには空の行を入れないでください。

<NISの確認コマンド>
ypcat : 指定したマップの内容を表示します。
ypmatch : 指定したマップから指定されたキーに一致するデータを返します。
ypwhich : NISサーバーまたはマップマスタの名前を返します。-mオプションでマップのリストを表示します。

NFSサーバーの構築

Solarisでは OS起動時に /etc/dfs/dfstabファイルをチェックして NFS共有の設定を調べます。/etc/dfs/dfstabの記述があれば そこでnfsdを起動します。ですから今から説明する手順で /etc/dfs/dfstabを編集した後で リブートするか次の様に起動させてください。

#/etc/init.d/nfs.server start

/etc/dfs/dfstab の例1

share -F nfs /export/

基本的な動作でかまわない場合は上記の1行を記述して下さい。意味はnfsで共有する(接続許可を与える)ディレクトリを指定しただけです。-F nfs はNFS共有である事です。これで/export/以下のものがNFSクライアントから共有する事ができます。もし複雑な管理をする場合は

/etc/dfs/dfstab の例2

share -F nfs -o rw -d "Home Dir" /export/   

オプション-o rw は 読み書きの許可を /export/以下に与えました。-dNFS共有に対するコメントです。 ではユーザーごとに許可を与える場合を最後に紹介します。

/etc/dfs/dfstab の例3

share -F nfs -o rw=client1:client2,ro,root=client2 -d "Home Dir" /export/   

接続側のマシンclientclient2にだけ読み書きが可能(rw)、それ以外のマシンからは読み込みのみ(ro)、接続側のマシンclient2には rootアカウントでのアクセスを許可しました(root=client2)これで サーバー側(ファイル提供側)の設定は完了です。


NFSクライアントの設定

とりあえず 適当な場所にmkdirして NFSマウント専用の空ディレクトリを作る必要があります。

# mkdir /nfs
# mount -F nfs server:/export /nfs

これでNFSサーバー名「server」のファイルが /nfs から共有されているはずです。-F nfs はファイルシステムを指定しています(NFSの場合は省略できます)。これをブート時にマウントする方法を使うと便利ですがここでは説明しません。

これから NFSを使い始めようと考えている方がいるのなら 僕はブート時にNFSをマウントする方法は断じてお勧めしません。なぜならBOOT時に NFSサーバーが落ちていたら クライアント側がBOOT時にマウントできずプロセスが先に進まなくなってしまうからです。またshutdown時にも時間かかります。よって僕はAUTO_MOUNTの方法をお勧めします。


オートマウントファイルシステム

アクセスがある時に自動でマウントし、アクセスが10分間なければアンマウントするといった効率の良い自動マウントが可能になります。

/etc/auto_masterの記述例

/-   auto_direct
/home  auto_home (auto_***
はなんでも良い)
+auto_nfs (+auto_*** NISなどのディレクトリサービスから情報を得る為の設定)   

/-という記述は直接マップの事を示し,/etc/auto_directを参照します。/homeは関節マップ/etc/auto_homeを参照します。
直接マップは絶対パスを記入して下さい。

/etc/auto_directの記述例

/usr/local/bin -ro  server:/usr/local/bin
/var/apache      server:/var/apache
 

/etc/auto_homeの記述例 (auto_***はなんでも良い)

user1        server:/export/home/user1
user2        server:/export/home/user2
guest   -ro   server:/export/home/guest

以上で設定完了。autofsをリブートしてください。

#/etc/init.d/autofs stop
#/etc/init.d/autofs start


キャッシュファイルシステム

CacheFSをNFS対してマウントしておくと、リモートからアクセスするNFSリソースをローカルのNFSクライアントのキャッシュに書き込む事ができます。それによりデータにアクセスする速度が増し、ネットワークトラフィックへの負荷が軽減されます。

CacheFSの作成

# cfsadmin -c -o maxfilesize=100 /cache

これで/cacheに上限100MBのキャッシュファイルシステムが作成できます。確認する場合は次のコマンドラインを使用します。

# cfsadmin -l /cache

キャッシュファイルシステムの削除は、次のコマンドラインを使用します。

# cfsadmin -d /cache

キャッシュファイルシステムが作成できれば、次の様にNFSをマウントします。

# mount -F cachefs -o backfstype=nfs,cachedir=/cache server:/export /nfs

" -F cachefs -o backfstype=nfs,cachedir=/cache"オプションが追加されているだけですから、一般 のNFSマウントとかわりありません。また-F cacheはファイルシステムを指定しています。

 


<関連書籍の購入>
NFS&NIS 第2版

<戻る>