EN JA
YPSERV(8)
YPSERV(8) FreeBSD System Manager's Manual YPSERV(8)

名称

ypservNIS データベースサーバ

書式

ypserv [ -n][ -d][ -P port][ -p path]

解説

NIS は、複数の UNIX ベースのマシン間で共通の設定ファイルの集合を共有するための RPC ベースのサービスです。 NIS では、 /etc/hosts, /etc/passwd, /etc/group といった、ほとんどの環境で頻繁に更新されるファイルの複数のコピーをシステム管理者が更新する必要は無く、計算機のグループで一箇所で更新可能な 1 組のデータを共有することができます。

ypserv ユーティリティは、 NIS ドメイン 内のクライアントシステムに NIS データベースを配布するサーバです。 NIS ドメイン内のクライアントは、 domainname(1) コマンドを使用し、 ypserv がサービスしているドメイン名を設定しなければなりません。また、単一 NIS ドメイン中に複数のサーバが存在しうるため、クライアントは、 ypbind(8) を実行させ、特定のサーバに接続する必要もあります。

ypserv によって配布されるデータベースは、 /var/yp/[domainname] に格納されます。ここで domainname は、サービスを受けるドメイン名です。この様なディレクトリは、様々なドメイン名にて複数存在可能ですが、単一の ypserv デーモンにて全て処理可能です。

データベース (もしくはしばしば、 マップ と呼ばれます)は、様々なシステムファイルをソースとして /var/yp/Makefile によって作成されます。データベースファイルは、 db(3) フォーマットであり、レコード数が多くとも高速に検索可能です。 FreeBSD では、セキュリティのため、マップの読み書きは、root のみ可能です。技術的には、このような制限は、パスワードマップにのみ必要ですが、他のマップの内容は、誰もが読める他のファイルに書いてありますので、この様な制約は、害ではなく、現実的であると考えられています。

ypserv ユーティリティは、 /etc/rc.conf にて有効にされている場合に /etc/rc.d/ypserv から起動されます。

特別な仕様

FreeBSD のパスワードデータベースを NIS によって配布する場合にいくつかの問題があります。 FreeBSD は、通常、暗号化したパスワードを、root のみ読み書き可能な /etc/master.passwd にのみ格納します。このファイルを NIS マップにすると、セキュリティが完全に破れてしまいます。

これに対処するために、 ypservFreeBSD バージョンは、 master.passwd.bynamemaster.passwd.byuid マップを特別な方法で扱います。サーバがこれらの 2 つのマップ (または、つまり、 shadow.byname または shadow.byuid マップのいずれか) のいずれかにアクセスするという要求を受信するとき、発信元の要求から TCP ポートをチェックし、ポート番号が 1023 より大きいなら、エラーを返します。スーパユーザのみ 1024 より小さい TCP ポートにバインドする事を許されているため、サーバは、これを利用して特権ユーザからの要求か否かを判定できます。非特権ユーザからの全ての要求は、拒否されます。

また、 FreeBSD の標準 C ライブラリ中の getpwent(3) ルーチンは、スーパユーザが使用した場合には、 master.passwd.bynamemaster.passwd.byuid のマップからデータを取得します。通常のユーザがこれらのルーチンをコールした場合には、標準の passwd.bynamepasswd.byuid のマップにアクセスします。後者の 2 つのマップは、 /var/yp/Makefile により、 master.passwd ファイルをパースし、パスワードフィールドを削除する事により作成されますので、非特権ユーザに渡しても安全です。このように master.passwd データベースのシャドウパスワード機構は、 NIS においても守られます。

マスタサーバとスレーブサーバの設定

ypinit(8) は、便利なスクリプトであり、 NIS のマスタサーバおよびスレーブサーバの設定の助けになります。

制限

NIS 環境にてシャドウパスワードを使用することに起因する問題が 2 つあります。ユーザは、次のことに気をつけねばなりません。
  1. ‘TCP ポートが 1024 より小さい’というテストは、非常に簡単であるため、同一ネットワーク上の、無制限のアクセスが可能なマシンを持つユーザは、これを破る事が可能です (UNIX ベースではないオペレーティングシステムを実行するマシンでも可能です)。
  2. FreeBSD システムを、シャドウパスワードをサポートしない非 FreeBSD クライアント (ほとんどがそうです) に対するサーバにしようとしている場合には、 /var/yp/MakefileUNSECURE=True エントリのコメントを外し、シャドウパスワードを無効にする必要があります。これにより、 passwd.bynamepasswd.byuid のマップに、非 FreeBSD クライアントが NIS を通じてユーザ認証を行うために必要とする、有効な暗号化されたパスワードフィールドが含まれるようになります。

セキュリティ

一般的に、リモートユーザは、ドメイン名を知ってさえいれば、RPC を ypserv に発行し、 NIS マップの内容を取得可能です。このような権限の無いトランザクションを防ぐために、 ypserv には、 securenets と呼ばれる、あるホストの集合にのみアクセスを制限する機能があります。起動時に、 ypserv は、securenets 情報をファイル /var/yp/securenets から読み込みます (後述するように、このパスは、 -p オプションによって指定するパスによって変化することに注意して下さい)。このファイルは、空白によって区切られるネットワークとネットワークマスクからなるエントリを複数含みます。“#”から始まる行は、コメントと見なされます。 securenets ファイルの例を以下に示します:

# allow connections from local host -- mandatory 
127.0.0.1     255.255.255.255 
# allow connections from any host 
# on the 129.168.128.0 network 
192.168.128.0 255.255.255.0 
# allow connections from any host 
# between 10.0.0.0 to 10.0.15.255 
10.0.0.0      255.255.240.0

ypserv がこれらのルールに適合するアドレスからの要求を受け取った場合には、通常通り要求を処理します。アドレスがルールに適合しない場合には、要求は、無視され、警告がログされます。 /var/yp/securenets ファイルが存在しない場合には、 ypserv は、全てのホストからの接続を許します。

ypserv ユーティリティは、Wietse Venema の tcpwrapper パッケージをサポートします。これにより、アクセス管理のために、システム管理者は、tcpwrapper の設定ファイル ( /etc/hosts.allow/etc/hosts.deny) を /var/yp/securenets の代わりに使用できます。

注: どちらのアクセス制御もそれなりのセキュリティを提供しますが、特権ポートテストと同様に“IP 詐称 (spoofing)”攻撃には、無力であることに注意して下さい。

NIS v1 互換性

このバージョンの ypserv は、 NIS v1 クライアントに対してある程度サービス可能です。 FreeBSD の NIS 実装は、 NIS v2 プロトコルのみを使用しますが、他の実装では、古いシステムとのバックワードコンパチビリティのために v1 プロトコルもサポートしています。そのようなシステムで提供されている ypbind(8) デーモンは、実際には、おそらく不要なのですが、 NIS v1 サーバにバインドしようとします (そして、v2 サーバから返答を受け取ったとしてもサーバを探すためにブロードキャストし続けます)。このバージョンの ypserv では、通常のクライアントの呼び出しは、サポートされていますが、 v1 マップ転送要求は、扱いません。すなわち、古い NIS サーバとともに、マスタもしくはスレーブとして使用することはできません。好運なことに、今日では、この様なサーバは、存在しないでしょう。

NIS クライアントでもある NIS サーバ

複数のサーバが存在するドメインにおいて、サーバが NIS クライアントでもある場合には、 ypserv の実行に注意を払う必要があります。バインド要求をブロードキャストさせてサーバ間でバインドさせるのではなく、サーバを自分自身にバインドすることは、一般的には良い考えです。あるサーバがダウンし、他のサーバがそのサーバに依存していた場合には、奇妙な障害が生じ得ます (結果として全てのクライアントがタイムアウトし、他のサーバにバインドしようとしますが、遅延は、無視できず、サーバは、まだ互いにバインドしようとしますので、障害は、残ります)。

特定のサーバに強制的にバインドさせるための詳細は、 ypbind(8) マニュアルページを参照して下さい。

オプション

以下のオプションが ypserv にてサポートされています。
-n
このオプションは、 ypservhosts.bynamehosts.byaddress のマップに対する yp_match 要求を扱う方法を操作します。デフォルトでは、 ypserv が与えられたホストのエントリをホストマップ中に見つけられなかった場合には、エラーを返しそれ以上の処理を行いません。 -n フラグを指定すると、 ypserv は、さらなる処理を行います。すぐにあきらめずに、ホスト名もしくはアドレスを DNS ネームサーバに問い合わせて解決しようとします。問い合わせが成功すると、 ypserv は、偽のデータベースレコードを作成し、それをクライアントに返しますので、クライアントの yp_match 要求は、成功したように見えます。

この仕様は、SunOS 4.1.x との互換性のために用意されています。そのシステムの標準 C ライブラリでは、リゾルバが腐っており、ホスト名とアドレスの解決のために NIS に依存していました。 FreeBSD のリゾルバは、 DNS への問い合わせを直接行えますので、 FreeBSD である NIS クライアントに対してのみサービスする場合は、このオプションを有効にする必要はありません。

-d
サーバをデバッグモードで実行します。通常 ypserv は、異常時のエラー (アクセス違反、ファイルアクセス失敗) のみを syslog(3) 機能を使用して報告します。デバッグモードでは、サーバは、自身をバックグラウンドでは実行せず、リクエストを受けるたびに、状態を表す追加のメッセージを標準エラー出力に表示します。また、デバッグモードで実行している間は、通常とは異なり、 yp_all 要求処理時や DNS 検索処理時に ypserv サブプロセスを生成しません (これらの処理は、多くの場合完了までに時間がかかるためにサブプロセスにより処理され、親であるサーバは、別の要求を処理できるようになっています)。これによりデバッグツールによるサーバのトレースが容易になります。
-h addr
要求のためにバインドされる特定のアドレスを指定します。このオプションは、複数回指定できます。 -h オプションが指定されないなら、 ypserv は、各輸送のためのデフォルトのパッシブ (passive) アドレス (例えば、IPv4 のための INADDR_ANY) をバインドします。
-P port
ポート自体を選択するより、ypserv を特定の TCP/UDP ポートに強制的にバインドします。
-p path
通常 ypserv は、 NIS マップは、 /var/yp 以下にあるものと想定します。 -p フラグを使用し、別の NIS ルートパスを指定できますので、システム管理者は、ファイルシステム中の別の場所にマップファイルを移動できます。

関連ファイル

/var/yp/[domainname]/[maps]
NIS マップ
/etc/nsswitch.conf
名前切り替え設定ファイル
/var/yp/securenets
ホストアクセス制御ファイル

歴史

このバージョンの ypserv は、 FreeBSD 2.2 ではじめて登場しました。

作者

Bill Paul <wpaul@ctr.columbia.edu>
December 13, 2009 FreeBSD