Using SambaRobert Eckstein, David Collier-Brown, Peter Kelly 共著第一版 1999 年 11 月 1-56592-449-5, 注文番号: 4495 416 ページ, 34.95 ドル |
4.6 Samba のネットワークオプション
Samba をマルチホームのマシン(すなわち複数サブネットに足があるマシン)上で動かしていたり、セキュリティポリシーを実装する必要があったりする場合は、ネットワークの設定オプションに習熟しておくべきであろう:
練習を行っていくために、Samba サーバが複数のサブネットがあるネットワークに接続しているものとする。具体的には、マシンが 192.168.220.* と 134.213.233.* の両方のサブネットにアクセスしていることにしよう。以下が現在の設定ファイルに追加したネットワークに関する設定オプションである:
[global] netbios name = HYDRA server string = Samba %v on (%L) workgroup = SIMPLE # Networking configuration options hosts allow = 192.168.220. 134.213.233. localhost hosts deny = 192.168.220.102 interfaces = 192.168.220.100/255.255.255.0 \ 134.213.233.110/255.255.255.0 bind interfaces only = yes [data] path = /home/samba/data guest ok = yes comment = Data Drive volume = Sample-Data-Drive writeable = yes最初に
hosts
allow
とhosts
deny
オプションから説明していこう。これらのオプションになじみがあるのであれば、それは恐らく多くの UNIX システムの /etc ディレクトリに存在する hosts.allow と hosts.deny ファイルから連想されたものであろう。 これらのオプションの目的もファイルと同様であり、IPアドレスベースで他のホストからの接続を許可したり拒否したりすることでセキュリティを提供するものである。 hosts.allow と hosts.deny ファイルを直接利用しない理由は、Samba のディスクやプリンタ共有への接続とは無関係に接続を制御したいサービスがサーバ上に存在するかも知れないためである。上記の
hosts
allow
オプションを利用して以下のような IP アドレスの指定を行った: 192.168.220. (3つ目のピリオドに注意すること。4番目の数値を省略している) 。これは、以下のように指定したのと同じことである: "192.168.220 サブネットの全てのホスト"。しかし、hosts deny の行では明示的に 192.168.220.102 からのアクセスは許可しないように指定している。
hosts
allow
オプションで指定されたサブネットに存在するにも関わらず、192.168.220.102 からのアクセスが拒否できることを不思議に思うかもしれないが、これはSamba がhosts
allow
とhosts
deny
で指定されたルールをソートする方式のためである:
allow
もしくはdeny
options が smb.confで指定されていない場合、Samba はシステムにアクセスできるすべてのマシンからの接続を許可する。
hosts
allow
やhosts
deny
オプションが smb.conf の[global]
セクションで設定されていた場合、それは全ての共有に対して適用される。これは共有に対してオプションが設定されている場合でも変らない。
hosts
allow
オプションだけがある共有に対して設定されていた場合、そこに記述されているホストだけが共有を利用することができる。その他のホストは接続できない。
hosts
deny
オプションだけがある共有に対して設定されていた場合、そこに記述されていない全てのホストがその共有を利用することができる。
hosts
allow
とhosts
deny
オプションの両方が定義されていた場合、拒否リストに存在せず、かつ許可リストに存在するホストのみが共有にアクセスできる。その他の場合、ホストはアクセスを許可されない。注意: あるホストが所属するサブネット全体からのアクセスを拒否している場合、特定のホストだけに共有へのアクセスを明示的に許可することはできないことに注意すること
最後の点について、もう一つ例をみてみよう。以下の設定について検討してみる:
hosts allow = 111.222. hosts deny = 111.222.333.この場合、サブネット 111.222.*.* に属するホストだけが Samba の共有にアク セスできる。クライアントが 111.222.333.* のサブネットに所属している場合、
hosts
allow
で指定された範囲に入っているが、アクセスは拒否される。クライアントが Samba の共有に接続するにはhosts
allow
のリストに入っている必要があるだけでなく、hosts
deny
のリストに入っていては ならない 。 コンピュータがアクセスを許可されていない共有に接続しようとした場合、エラーメッセージが返却される。残った二つのオプションは、
interfaces
とbind
interface
only
オプションである。interfaces
オプションから先にみていこう。 Samba のデフォルトではデータをプライマリのネットワークインタフェースにしか送出しない。これは上記の例だと 192.168.220.100 のサブネットになる。データを複数のネットワークに対して送出したいときは、interfaces
オプションを使って、送信したいインタフェースのリストをきちんと指定する必要がある。 先の例では、別のネットワークインタフェースのアドレス 134.213.233.100 を指定することで、Samba をマシンが持つ両方のサブネット(192.168.220 と 134.213.233)にバインドしていた。コンピュータに複数のインタフェースが存在する場合は、Samba が適切なインタフェースをプライマリのインタフェースとして選択する保証がないため、常にこのオプションを指定すること。最後の
bind
interfaces
only
オプションは nmbd プロセスが、interfaces
オプションで指定したサブネット以外からのブロードキャストを受信するかどうかを設定する。これはhosts
allow
とhosts
deny
オプションとは異なる。これらのオプションは、マシンがサービスに対して接続を行うことを禁止するものであって、ブロードキャストメッセージを受信することを禁止するものではない。bind
interfaces
only
オプションを用いることで、Samba サーバの別サブネットからのデータグラムの受信を抑止できる。加えて、このオプションは smbd のプロセスが、 interfaces オプションで指定されたインタフェースのリストにのみバインドされることを指定する。これにより、Samba がサービスを提供するインタフェースを制限できる。4.6.1 ネットワーキングオプション
ここまでで説明したネットワーキングオプションを 表 4.5に示す。
表 4.5: ネットワーキング設定オプション オプション
パラメータ
機能
デフォルト
範囲
hosts allow (allow hosts)
文字列(ホスト名のリスト)
Samba に接続可能なマシンを指定する。
なし
共有
hosts deny (deny hosts)
文字列(ホスト名のリスト)
Samba に接続できないマシンを指定する。
なし
共有
interfaces
文字列(IP/netmask の組のリスト)
Samba が応答を返却するネットワークのリストを設定する。Allows correcting defaults.
システム依存
グローバル
bind
interfaces only
真偽値
yes
の場合、Samba はinterfaces
オプションで指定されたインターフェースにのみバインドする。
no
グローバル
socket
address
文字列(IP アドレス)
listen を行う IP アドレスを設定する、複数の仮想インタフェースがサーバ上に存在する場合などに用いる。
なし
グローバル
4.6.1.1 hosts allow
hosts
allow
オプション (allow
hosts
と書かれることもある) は、Samba サーバ上の共有にアクセスする権限を持ったマシンを指定するもので、コンマ、もしくはスペースで区切ったマシンの名前もしくはIPアドレスのリストを既述する。単に LAN のサブネットのアドレスをこのオプションに指定することでも、ほんのわずかではあるがセキュリティが向上する。 ここでは例として以下のように設定した:hosts allow = 192.168.220. localhost
localhost
をサブネットアドレスの後に記述したことに注意。hosts
allow
オプションを使おうとしてやってしまう間違いに、Samba サーバが自分自身と通信できないようにしてしまうことがあげられる。 smbpasswd プログラムは、ユーザの暗号化パスワードを変更するため、 Samba サーバにクライアントとして接続することが必要になることがある。またローカルなブラウジングの propagation は、ローカルホストへのアクセスを必要とすることがある。 localhost のアドレスを含まないままこのオプションが有効になっていると、暗号化パスワードの変更を行うためにローカルに生成されたパケットが Samba によって破棄されてしまい、ブラウジングの propagation も正しく動作しないであろう。このような事態を避けるため、明示的にループバックアドレス(localhost
か127.0.0.1
) を含めること。[3][3] Samba 2.0.5 以降では、
localhost
は明示的に拒否されない限り、自動的にアクセスを許可される。このオプションは以下のような形式のどれを用いて指定することもできる:
ドメイン名。これはドット(.)から記述をはじめることで、個々のホスト名とは区別される。例えば
.ora.com
は ora.com ドメインに存在する全てのマシンを表す。ネットグループ。これは,
@printerhosts
のようにアットサイン(@)から始められる。ネットグループは、イエローページ/NIS や NIS+ を使用しているシステムでサポートされているが、それ以外のシステムでは殆んどサポートされていない。 システムでネットグループがサポートされている場合、詳細を記述したnetgroups
のマニュアルページが存在するはずである。ドットで終わるサブネット。例えば
130.63.9.
は、IP アドレスが 130.63.9. から始まる全てのマシンを意味する。
EXCEPT
というキーワード、これには一つ以上の名前、IPアドレス、ドメイン名、ネットグループもしくはサブネットが後に続く。例えば、Samba が 192.168.110 のサブネット以外の全てのホストからのアクセスを許可するようにしたい時は、以下のようにhosts
allow
=
ALL
EXCEPT
192.168.110.
(最後のドットを忘れないように)とする。
ALL
というキーワードを用いるのは通常勧められない。それはサーバ名を推測されることで、ネットワーク上の誰でもがファイルにアクセスできてしまうことを意味するからである。
hosts
allow
設定オプションにはデフォルト値はなく、どちらのオプションも指定されていなかった場合のデフォルトの動作は、全てのホストからのアクセスを許可するようになっていることに注意。また、このオプションを設定ファイルの[global]
セクションに記述することで、共有内で定義されたhosts
allow
オプションを上書きすることが可能である。4.6.1.2 hosts deny
hosts
deny
オプション(deny
hosts
も同様) は、共有にアクセスできないマシンを指定するもので、コンマ、もしくはスペースで区切ったマシンの名前もしくはIPアドレスのリストを既述する。クライアントの指定には前述したhosts
allow
オプションと同様の形式を用いる。例えば example.com以外の全ての個所からのサーバへのアクセスを禁止する場合、以下のようになる:hosts deny = ALL EXCEPT .example.com
hosts
allow
と同様、hosts
deny
設定オプションにもデフォルト値はなく、どちらのオプションも指定されていなかった場合のデフォルトの動作は、全てのホストからのアクセスを許可するようになる。同様に、このオプションを設定ファイルの[global]
セクションに記述すると、共有内で定義されたhosts
deny
オプションの設定を上書きする。特定の共有で hosts のアクセスを禁止したいは、hosts
allow
とhosts
deny
オプションの両方の記述を設定ファイルの[global]
セクションから取り除くこと。4.6.1.3 interfaces
interfaces
オプションは、Samba サーバに認識させ、応答させたいネットワークアドレスを示唆する。このオプションは複数のネットワークサブネットに接しているコンピュータがある場合に有用である。もしこのオプションが設定されていない場合、Samba が起動して初期化する時にサーバのプライマリネットワークインタフェースカード(通常1枚目のイーサネットカード)を探し、そのサブネットに対してのみ機能する。サーバが複数のサブネットに接しており、このオプションが設定されていない場合は、Samba は最初に発見したサブネットに対してしか機能しないということである。ネットワークの他のサブネットに対してもサービスを提供させたい場合、このオプションを用いなければならない。このオプションの値は、一つ以上のIPアドレス/ネットマスクの組であり、例えば以下のようになる:
interfaces = 192.168.220.100/255.255.255.0 192.168.210.30/255.255.255.0また、別の方法として、以下のように CIDR 形式のビットマスクで指定することも可能である:
interfaces = 192.168.220.100/24 192.168.210.30/24ビットマスクの数値は、ネットマスクでセットされるビット数を指定している。例えば、 24 という数字は、(32 個中の)24 個目までのビットがビットマスクで設定されることを示しており、これは255.255.255.0 と同等である。 同様に 16 は 255.255.0.0 と同じであり、8 は 255.0.0.0 と同じである。
このオプションは、DHCP を利用している時はうまく動作しないこともある。
4.6.1.4 bind interfaces only
bind
interfaces
only
オプションは smbd と nmbd プロセスが SMB リクエストを受け付けるアドレスをinterfaces
オプションで指定したアドレスからのみに制限する。 nmbd プロセスは、通常全てのブロードキャストを受信するために、全てのインタフェース(0.0.0.0)のポート 137 と 138 にバインドする。しかし以下のようにすることで、この動作を制限することができる:bind interfaces only = yesこれにより、両方の Samba のプロセスは、ブロードキャストパケットも含め、送信元アドレスが、
interfaces
オプションで指定されたブロードキャストアドレスに合致しないパケットを無視するようになる。 smbdについては、このオプションにより Samba がinterfaces
オプションでリストしたサブネット以外からのファイル共有の要求を受け付けなくなる。SLIP や PPP で作成されたもののように一時的なネットワーク接続を利用している場合は、このオプションの使用は避けること。このオプションが必要なことは通常はない。このオプションは熟練者のみが利用すべきである。
bind interfaces only
をyes
に設定した場合、 ローカルホストのアドレス(127.0.0.1)を必ず interfaces のリストに追加しておくこと。そうしないと smbpasswd はパスワードを変更するためにデフォルトのモードでサーバに接続することができなくなってしまう。4.6.1.5 socket address
socket
address
オプションは、interfaces
パラメータで設定したアドレスのうち、どのアドレスを Samba が接続を listen するアドレスとして用いるべきかを指定する。デフォルトで Samba は全てのアドレスからの接続を受け付ける。 smb.conf ファイル中で利用する場合、このオプションによりSamba は1 つのIPアドレスでのみ listen をする。 以下一例を示す:interfaces = 192.168.220.100/24 192.168.210.30/24 socket address = 192.168.210.30このオプションはプログラマーのためのものであり、利用しないことを推奨する。
© 1999, O'Reilly & Associates, Inc.