スポンサーリンク

YPSERV(8) FreeBSD システム管理者マニュアル YPSERV(8)

名称

ypserv − NIS データベースサーバ

書式

ypserv [−n] [−d] [−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 マップにす ると、セキュリティが完全に破れてしまいます。

これに対処するために、 FreeBSD の ypservmaster.passwd.bynamemaster.passwd.byuid のマップを特別な方法で扱います。サーバがこれら 2 つの マップへのアクセス要求を受け付けると、要求元の 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 サブプ ロセスを生成しません (これらの処理は多くの場合完了までに時間がかか るためにサブプロセスにより処理され、親であるサーバは別の要求を処理 できるようになっています)。これによりデバッグツールによるサーバのト レースが容易になります。

−p path
通常 ypserv は NIS マップは /var/yp 以下にあるものと想定します。 −p フラグを使用し、別の NIS ルートパスを指定できますので、システム管理 者はファイルシステム中の別の場所にマップファイルを移動できます。

関連ファイル

       /var/yp/[domainname]/[maps]

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

関連項目

ypcat(1), db(3), hosts_access(5), rpc.yppasswdd(8), yp(8), ypbind(8), ypinit(8), yppush(8), ypxfr(8)

作者

Bill Paul ⟨wpaul@ctr.columbia.edu⟩

歴史

このバージョンの ypserv が最初に登場したのは FreeBSD 2.2 です。

FreeBSD 10.0 February 4, 1995 FreeBSD 10.0

スポンサーリンク