## Using Samba

Robert Eckstein, David Collier-Brown, Peter Kelly 共著
第一版 1999 年 11 月
1-56592-449-5, 注文番号: 4495
416 ページ, 34.95 ドル

ハードコピー版(英語)を購入する

目次

| Chapter 4 ディスク共有 |

> ## 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` で指定されたルールをソートする方式のためである:

> 1. `allow` もしくは `deny` options が smb.confで指定されていない場合、Samba はシステムにアクセスできるすべてのマシンからの接続を許可する。

> 2. `hosts` `allow` や `hosts` `deny` オプションが smb.conf の `[global]` セクションで設定されていた場合、それは全ての共有に対して適用される。これは共有に対してオプションが設定されている場合でも変らない。

> 3. `hosts` `allow` オプションだけがある共有に対して設定されていた場合、そこに記述されているホストだけが共有を利用することができる。その他のホストは接続できない。

> 4. `hosts` `deny` オプションだけがある共有に対して設定されていた場合、そこに記述されていない全てのホストがその共有を利用することができる。

> 5. `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` は明示的に拒否されない限り、自動的にアクセスを許可される。

> このオプションは以下のような形式のどれを用いて指定することもできる:

> - `ftp.example.com`のようなホスト名。

> - `130.63.9.252`のようなIPアドレス。

> - ドメイン名。これはドット(.)から記述をはじめることで、個々のホスト名とは区別される。例えば `.ora.com` は ora.com ドメインに存在する全てのマシンを表す。

> - ネットグループ。これは, `@printerhosts`のようにアットサイン(@)から始められる。ネットグループは、イエローページ/NIS や NIS+ を使用しているシステムでサポートされているが、それ以外のシステムでは殆んどサポートされていない。 システムでネットグループがサポートされている場合、詳細を記述した`netgroups` のマニュアルページが存在するはずである。

> - ドットで終わるサブネット。例えば `130.63.9.` は、IP アドレスが 130.63.9. から始まる全てのマシンを意味する。

> - `ALL`というキーワード。これは全てのクライアントからのアクセスを意味する。

> - `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

> このオプションはプログラマーのためのものであり、利用しないことを推奨する。

4.5 Disk 共有の設定 |  | 4.7 仮想サーバ

O'Reilly Home | O'Reilly Bookstores | How to Order | O'Reilly Contacts
International | About O'Reilly | Affiliated Companies

© 1999, O'Reilly & Associates, Inc.