NIS スレーブサーバ

【概要】 NIS スレーブサーバを Ubuntu 24.04 LTS 上で動作させるための設定手順を示す。 ypbind-mt, ypserv, yp-tools, rpcbind をインストールし、/etc/defaultdomain と /etc/yp.conf でドメインとマスタサーバを指定する。rpcbind, ypbind, ypserv は systemd で管理する。ypinit -s でマスタサーバからマップを取得し、ypxfr のタイマーとファイアウォールを設定する。マスタサーバ側では /var/yp/Makefile の NOPUSH と ypinit -m によりスレーブを登録する。 NIS はマップを平文で配布するため、LAN 内からの問い合わせにのみ応答し、LAN 外からの問い合わせには応答しないように設定する。

事前に調べておく事項

以下の事項を事前に調べておく。NIS は名前解決に DNS を使わないため、関連するすべての NIS サーバ(マスタ、スレーブ)の IP アドレスとホスト名を、各サーバの /etc/hosts に記載しておく。

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

  1. /etc/hosts の設定

    マスタサーバとスレーブサーバの IP アドレスとホスト名を /etc/hosts に記載する。1 つの IP アドレスに対して、FQDN、ホスト名の順に書く。

    sudo vi /etc/hosts

    記載例:

    192.168.1.10    cent1.db.is.kyushu-u.ac.jp cent1
    192.168.1.11    cent2.db.is.kyushu-u.ac.jp cent2

    127.0.0.1 の行にはこのマシンのホスト名を含めない。含めると NIS サーバが自分自身を localhost として通知し、マップの転送に失敗することがある。

  2. 必要なパッケージのインストール

    NIS スレーブサーバとして動作させるために必要なパッケージをインストールする。

    sudo apt update
    sudo apt -y install ypbind-mt ypserv yp-tools rpcbind

    Ubuntu 24.04 LTS では、NIS クライアントのデーモン ypbind は ypbind-mt パッケージに含まれる。ypserv パッケージは、マスタサーバからマップを取得する ypinit や ypxfr、および問い合わせに応答する ypserv を提供する。nis パッケージはこれらをまとめて導入するためのメタパッケージである。

  3. NIS ドメイン名の設定

    NIS ドメイン名を /etc/defaultdomain に設定する。この設定はシステム起動時に読み込まれる。

    sudo vi /etc/defaultdomain

    ファイルに NIS ドメイン名のみを 1 行で書く。NIS ドメイン名は大文字と小文字を区別する。

    mydb.is.kyushu-u.ac.jp

    /etc/default/nis の NISSERVER 変数は、systemd で各サービスを管理する場合には使用されない。旧来の SysV init スクリプト用に残されているだけであり、設定する必要はない。

  4. マスタサーバの指定

    問い合わせ先の NIS サーバを /etc/yp.conf に設定する。

    sudo vi /etc/yp.conf

    ファイルに以下の行を追加する。<NISドメイン名> と <NISマスタサーバのホスト名またはIPアドレス> には実際の値を記載する。

    domain <NISドメイン名> server <NISマスタサーバのホスト名またはIPアドレス>

    例:

    domain mydb.is.kyushu-u.ac.jp server cent1.db.is.kyushu-u.ac.jp

    ホスト名で指定する場合は、そのホスト名を /etc/hosts に記載しておく。記載がないと、起動時に名前解決ができず、サービスの起動が待たされる。IP アドレスで指定してもよい。

  5. アクセス制限の設定

    スレーブサーバも NIS の問い合わせに応答するため、応答を許可するネットワークを /var/yp/securenets に設定する。このファイルが存在しない場合、すべてのホストからの問い合わせに応答する。

    sudo vi /var/yp/securenets

    ネットマスクとネットワークアドレスの組を 1 行ずつ書く。127.0.0.1 の行は必須である。

    host 127.0.0.1
    255.255.255.0   192.168.1.0
  6. NIS データの作成は行わない

    スレーブサーバでは passwd, group, hosts などの NIS マップを作成しない。マップは NIS マスタサーバから転送されてくるものを使用する。マスタサーバのように /var/yp ディレクトリで make を実行する必要もない。

  7. rpcbind サービスの起動と有効化

    NIS は RPC (Remote Procedure Call) を利用するため、ポートマッパーである rpcbind が動作している必要がある。サービスを起動し、システム起動時に自動実行されるように設定する。

    sudo systemctl enable rpcbind
    sudo systemctl start rpcbind

    ステータスを確認する。

    systemctl status rpcbind
  8. ypbind の起動と有効化

    NIS クライアント機能である ypbind を起動し、システム起動時に自動実行されるように設定する。

    sudo systemctl enable ypbind
    sudo systemctl start ypbind

    ステータスを確認する。

    systemctl status ypbind

    結合先のサーバを確認する。

    ypwhich
  9. ypserv の起動と有効化

    スレーブサーバはクライアントからの問い合わせに応答するため、ypserv を起動し、システム起動時に自動実行されるように設定する。

    sudo systemctl enable ypserv
    sudo systemctl start ypserv

    ステータスを確認する。

    systemctl status ypserv
  10. ypinit -s の実行

    NIS マスタサーバからマップを取得するため、ypinit を実行する。<NISマスタサーバのホスト名> には実際のマスタサーバのホスト名を記載する。この手順は、マスタサーバ側でスレーブサーバを登録した後に実行する。

    cd /var/yp
    sudo /usr/lib/yp/ypinit -s <NISマスタサーバのホスト名>

    例:

    sudo /usr/lib/yp/ypinit -s cent1.db.is.kyushu-u.ac.jp

    マップの転送が終わると、/var/yp/<NISドメイン名> ディレクトリにマップファイルが作成される。

  11. マップの定期転送の設定

    スレーブサーバの停止中にマスタサーバでマップが更新されると、その更新は配布されない。ypxfr のタイマーを有効にすると、マップが定期的に取得され、内容のずれが修正される。

    sudo systemctl enable --now ypxfr_1perhour.timer
    sudo systemctl enable --now ypxfr_1perday.timer
    sudo systemctl enable --now ypxfr_2perday.timer
  12. ファイアウォールの設定

    ufw を使用している場合は、LAN 内からの RPC ポートマッパー (111/tcp, 111/udp) への接続を許可する。<LANのネットワークアドレス> には実際の値を記載する。

    sudo ufw allow from <LANのネットワークアドレス> to any port 111 proto tcp
    sudo ufw allow from <LANのネットワークアドレス> to any port 111 proto udp

    例:

    sudo ufw allow from 192.168.1.0/24 to any port 111 proto tcp
    sudo ufw allow from 192.168.1.0/24 to any port 111 proto udp

    ypserv と ypbind は既定では動的な RPC ポートを使用する。使用中のポート番号は次のコマンドで確認できる。

    rpcinfo -p

    ポート番号を固定するには、ypserv を -p オプション付きで起動するように systemd のユニット設定を上書きし、固定したポートをファイアウォールで許可する。

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

ここからの手順は、NIS スレーブサーバではなく NIS マスタサーバ上で実行する。

  1. /var/yp/Makefile の書き換え

    /var/yp/Makefile を編集し、スレーブサーバへのマップの自動転送を有効にする。

    cd /var/yp
    sudo vi Makefile

    以下の行を探す。

    NOPUSH=true

    この行を以下のように変更する。

    NOPUSH=false

    この変更により、マップが更新されたときに yppush が実行され、スレーブサーバに転送される。マスタサーバで cd /var/yp && sudo make を実行すると、マップの再作成と転送が行われる。

  2. ypinit -m によるスレーブサーバの登録

    NIS マスタサーバとして ypinit -m を実行し、スレーブサーバを登録する。ypinit は /usr/lib/yp/ypinit にある。

    cd /var/yp
    sudo /usr/lib/yp/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 <control D>.
            next host to add:  cent1.db.is.kyushu-u.ac.jp
            next host to add:

    プロンプトに対して、NIS スレーブサーバのホスト名を 1 行に 1 つずつ入力する。

    入力が終わったら Ctrl+D で入力を終了する。

    登録された NIS サーバの一覧が表示されるので、スレーブサーバが含まれていることを確認し、「y」を入力して終了する。