Solaris で NIS サーバ

Solaris 上で NIS サーバを動かし、passwd, group, hosts の 3つのファイルを管理する。 LAN 内からの問い合わせに応じて、これら 3つのファイルを配布する。動作確認まで行う。

LAN 内の問い合わせには応じるが、LAN 外の問い合わせには応じない設定にする。 passwd, group, hosts を管理し、これら 3つのファイル以外は配布しない。 ypserv, ypxfrd, yppasswdd を動かす。

NIS は Oracle Solaris 11 の将来のアップデートで削除が予告されている機能である。 新規に構築する場合は LDAP ネーミングサービスの利用を検討する。

事前に調べておく事項

NIS データの作成

NIS サーバで passwd, group, hosts の 3つを管理する。 ここでの手順では、passwd, group, hosts の簡単なサンプルを作る。

  1. NIS ファイル用のディレクトリ作成
    # mkdir /var/yp/nis.inputs
    
  2. NIS 用 passwd 作成
    # vi /var/yp/nis.inputs/passwd
    

    passwd の文法は次の通りである。

    -----
    <ユーザ名>:*:20001:800:<ユーザの説明>:/home/<ユーザ名>:/bin/bash
    -----
    
  3. NIS 用 hosts 作成
    # vi /var/yp/nis.inputs/hosts
    

    hosts には、次のように NIS サーバ自身の情報を含める。

    -----
    127.0.0.1 localhost
    <NIS サーバの IP アドレス> <NIS サーバのホスト名>.<DNS ドメイン名> <NIS サーバのホスト名>
    -----
    
  4. NIS 用 group 作成
    # vi /var/yp/nis.inputs/group
    

    group の文法は次の通りである。

    -----
    8th:*:800:
    -----
    

NIS サーバ設定(設定ファイルと ypinit -m の実行)

  1. 事前の確認
    • NIS サーバ上の /etc/resolv.conf が正しく設定されていること
    • NIS サーバ上の /etc/hosts の内容が正しいこと

      次の 2行を含むこと。NIS マスターサーバと NIS スレーブサーバがある場合は、 この 2台について書いておく。

      127.0.0.1 localhost
      <NIS サーバの IP アドレス> <NIS サーバのホスト名>.<DNS ドメイン名> <NIS サーバのホスト名>
      
  2. /var/yp/Makefile を編集

    DIRPWDIR をデフォルト値から /var/yp/nis.inputs に変更する。 DIR と PWDIR は、NIS が管理するデータファイルの置き場である。

    さらに、all の行を変更し、passwd, group, hosts を管理し、これら 3つのファイル以外は配布しないようにする。

    DNS 関係については、先頭部分の「B=-b」のコメントを外し、「B=」をコメントにする。 この設定により、NIS の hosts マップに無いホスト名の問い合わせを ypserv が DNS に転送する。

    vi /var/yp/Makefile
     # (1) DIR を変更
     # DIR= /etc
     # ↓
     # DIR= /var/yp/nis.inputs
    
     # (2) PWDIR を変更
     # PWDIR= /etc
     # ↓
     # PWDIR= /var/yp/nis.inputs
    
     # (3) all を変更
     # all: passwd group ipnodes ...
     # ↓
     # all: passwd group hosts
    
     # (4) DNS 関係
     # #B=-b
     # B=
     # ↓
     # B=-b
     # #B=
    
  3. domainname の確認(domainname コマンド実行)
    domainname
     # 正しい NIS ドメイン名が表示されることを確認する
    

    NIS ドメイン名が正しくないときは、次のコマンドで変更する。

    /usr/sbin/domainname <NISドメイン名>
    

    domainname コマンドの設定は再起動で失われる。 Solaris 10 では /etc/defaultdomain に NIS ドメイン名を書いておく。 Solaris 11 では次のコマンドで SMF に設定する。

    svccfg -s network/nis/domain setprop config/domainname = <NISドメイン名>
    svcadm refresh network/nis/domain
    
  4. ypinit -m の実行

    警告(Warning)メッセージが表示されたら、内容を確認し、対処する。

    cd /var/yp
    /usr/sbin/ypinit -m
     # 次のように表示されるので確認する
    ---
    servers.  cent1.db.is.kyushu-u.ac.jp 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 .
            next host to add:  cent1.db.is.kyushu-u.ac.jp
            next host to add:
    ---
     # NIS サーバが正しく表示されない場合に限り、「next host to add:」に対
     # して、NIS サーバ名を入れる
    
    

    入力が終わったら「ctrl+D」で終了させる。

    次のように表示されるので、NIS サーバ名が正しく表示されていることを確認 し、「y」で終了させる。

    The current list of NIS servers looks like this:
    
    sol1
    
    Is this correct?  [y/n: y]  y
    
  5. yppasswdd について

    yppasswdd は /var/yp/nis.inputs のパスワードファイルを扱うように自動的に設定される (/etc/passwd とは別のファイルである)。

  6. NIS サーバのサービスを起動する
    svcadm enable network/nis/domain
    svcadm enable network/nis/server
    
  7. ypserv が稼働中であることを確認
    /usr/bin/rpcinfo -p
    
  8. make の実行

    設定ファイルのチェックを兼ねる。 そのため make とせずに、make hosts, make passwd, make group の 3手順に分けて実行する。 設定のミスがある場合や ypserv が稼働していない場合はエラーが出る。

    cd /var/yp
    make hosts
    make passwd
    make group
    

    make でエラーが出たら、設定ファイルを見直し、NIS サーバのサービスの起動から後の全手順をやり直す。

    今後、/var/yp/nis.inputs 下のファイルを書き換えたら、そのたびに 「cd /var/yp; make」を実行する(サーバの再起動は不要である)。

NIS サーバのサービスの起動と停止

Solaris 10 以降では SMF で管理する。起動は次のコマンドで行う。

svcadm enable network/nis/domain
svcadm enable network/nis/server

停止は次のコマンドで行う。

svcadm disable network/nis/server

状態は次のコマンドで確認する。

svcs -a | grep nis

SMF で有効にしたサービスは、OS の起動時に自動的に開始される。

パスワードの格納形式の確認

NIS サーバマシン上でのパスワードのハッシュ形式を確認しておく。 形式はパスワード文字列の先頭の識別子で判別できる。識別子が無い場合は従来の DES 形式、$1$ は MD5、$5$ は SHA256、$6$ は SHA512 である。

# yppasswd で hoge ユーザの新しいパスワードを設定した後に、次のコマンドを実行
cat /var/yp/nis.inputs/passwd

既定の形式は /etc/security/policy.conf の CRYPT_DEFAULT で決まる。 DES や MD5 になっている場合は、CRYPT_DEFAULT を 5(SHA256)または 6(SHA512)に変更する。 変更後に設定したパスワードから新しい形式が使われる。

vi /etc/security/policy.conf
---
CRYPT_DEFAULT=5
---

NIS サーバにおけるアクセス制限の設定

  1. /var/yp/securenets

    ypserv と ypxfrd が応答する範囲を指定する。 「XXX.YYY.ZZZ」の部分は LAN のネットワークアドレスを書く。

    # vi /var/yp/securenets
    -----
    255.255.255.255 127.0.0.1
    255.255.255.0 XXX.YYY.ZZZ.0
    -----
    

    設定を間違うと、NIS サーバと接続できなくなる。 接続できるかどうかは ypwhich, ypcat コマンドで確認できる。

    man -s 4 securenets
    
  2. rpcbind へのアクセス制限

    rpcbind で TCP Wrappers を有効にする。

    svccfg -s rpc/bind setprop config/enable_tcpwrappers=true
    svcadm refresh rpc/bind
    
  3. /etc/hosts.deny

    rpcbind の行を次のように設定する(行が無ければ書き加える)。

    vi /etc/hosts.deny
    ---
    rpcbind: ALL
    ---
    
  4. /etc/hosts.allow

    rpcbind の行を次のように設定する(行が無ければ書き加える)。 XXX.YYY.ZZZ の部分は LAN のネットワークアドレスを書く。

    vi /etc/hosts.allow
    ---
    rpcbind: 127.0.0.1 XXX.YYY.ZZZ.
    ---
    

動作確認手順(NIS クライアント側)

  1. ypbind が稼働中かを確認する
    rpcinfo | grep ypbind
     # ypbind についての情報が表示される
    
  2. ypwhich コマンドを実行する
    ypwhich
    

    ここで設定した NIS サーバが表示されることを確認する。

  3. ypcat passwd, ypcat group, ypcat hosts で動作確認
    ypcat passwd
    ypcat group
    ypcat hosts
    

    正しく表示されれば成功である。

  4. passwd, group, hosts 以外は配布していないことの確認
    ypcat rpc
    ypcat services
    ypcat netid
    ypcat protocols
    ypcat mail
    

    表示されないことを確認する。

  5. yppasswdd の動作確認

    NIS サーバ側で rpc.yppasswdd が動作していることを確認する。

    ps -e | grep yppasswd
    

    クライアント側で次のコマンドを実行し、パスワードが変更できることを確認する。

    yppasswd <ユーザー名>
    

/var/yp/nis.inputs(実データ)の準備について