## Using Samba

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

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

目次

| Chapter 5 ブラウジングと高度な共有の設定 |

> ## 5.2 ファイルシステムの相違点

> Sambaがその違いを吸収しなければならない最も大きな問題の一つは、UNIXと非UNIXとのファイルシステムの違いの問題であろう。これはシンボリックリンクの処理の問題や、隠しファイル、. で始まるファイル等の扱いを含む。 またファイルのパーミッションの問題も、適切に対応付けが行えない場合は頭の痛い問題である。この章では、Sambaがどのようにしてこれらの頭の痛い問題に対応しているか、またどのような機能を追加しているかについて記述する。

> ### 5.2.1 ファイルを隠す・アクセス不能にする

> ときには、あるファイルに対するユーザからの閲覧やアクセスを完全に禁止したい場合があるかもしれない。また別の場合には、ユーザをファイルアクセスから遠ざけたいだけのこともあるかもしれない (ユーザがディレクトリ内のファイルを一覧した時に、そのファイルを隠せばいい)。Windows では、ファイルの属性を利用すると、フォルダ内の一覧時にファイルを隠すことができる。UNIXの場合、伝統的にディレクトリ内のファイルを隠したいときは、それらをドット(.)から始まる名前にする。こうすれば、設定ファイルやデフォルト値等は通常の`ls`コマンドの実行時には非表示になる。ただし、ファイルにアクセスさせないようにするには、ファイルやディレクトリのパーミッションの設定を行う必要がある。

> 最初にあげるオプションは、真偽値オプションである`hide` `dot` `files`である。このオプションは、その名の通りの動作を行う。`yes`に設定すると、ピリオド(.)で始まるファイルを隠しファイルとして取り扱う。`no`に設定すると、これらのファイルは常に表示される。なお、ファイルは単に隠されるだけ、ということは重要なので覚えておいて欲しい。一覧表示で全てのファイルを表示するという設定を行った場合、(Windows 98 の「表示」メニューの下にある「フォルダオプション」メニューを利用する)、それらのファイルは 図 5.2のように、見えてしまう。

> #### 図 5.2: [data] 共有中の隠しファイル

> 単純にドットではじまるファイルを隠す代わりに、Samba に対して、 `hide` `files` オプションを利用して、隠したいファイル名のパターンを設定することが可能である。例として、以下の`[data]` 共有の例のように設定したと仮定しよう。

>     [data]
>     	path = /home/samba/data
>     	browseable = yes
>     	guest ok = yes
>     	writeable = yes
>     	case sensitive = no
>     	hide files = /*.java/*README*/

> このオプションは、例えば1つのパターンしか記述なかった場合でも、スラッシュ(/)文字で、始まり、終わりと各エントリ間を区切る必要がある。この記法により、ファイル名にスペースが含まれる場合にも対応できる。この例では、共有ディレクトリは、 図 5.3のように見えるはずである。ただしこれは Windows 98 で隠しファイルを表示する設定にしているということを念のため断っておく。

> #### 図 5.3: ファイル名のパターンに対する隠しファイルの例

> もしファイルを絶対に見せたくないのであれば、代わりに`veto` `files`オプションを用いることができる。このオプションは、`hide` `files`オプションと同じ記法を用いるが、ユーザから絶対に見られないファイルのリストを設定する。例として、`[data]` 共有の設定を以下のように変えてみよう:

>     [data]
>     	path = /home/samba/data
>     	browseable = yes
>     	guest ok = yes
>     	writeable = yes
>     	case sensitive = no
>     	veto files = /*.java/*README*/

> このオプションの文法自体は、`hide` `files` 設定オプションと同等であり、例えば1つのパターンしか記述しなかった場合でも、スラッシュ(`/`)文字で、始まり、終わりと各エントリ間を区切る必要がある。この設定を行うことで、`hello.java` と `README` ファイルは単にディレクトリ中に見えなくなり、SMB 経由ではどうやってもアクセスできなくなる。

> この仕様は別の質問を生むであろう。すなわち、veto されたファイルが含まれるディレクトリをユーザが削除しようとしたらどうなるかというものである。これは、`delete` `veto` `files` オプションがどのようになっているかに依存する。この真偽値のオプションが`yes` の場合、ユーザは削除されようとしているディレクトリ中の通常のファイルと、veto されたファイルとの両方を削除することができる。このオプションが`no`の場合、ユーザは veto されたファイルを削除することができず、ディレクトリ自体も削除されることはない。ユーザからみるとディレクトリは空になったように見えるが、ディレクトリ自体の削除はできない。

> `dont` `descend` オプションは、Samba がディレクトリの内容を表示しないディレクトリのリストを指定する、ここで言うのは 内容であり、ディレクトリそのものではないことに注意すること。ユーザはディレクトリの中をみることはできるが、内容は常に空であり、ディレクトリツリーをそれ以上辿ることはできない。例として、このオプションを章の最初の方で示した基本的な共有の例に対して適用してみよう:

>     [data]
>     	path = /home/samba/data
>     	browseable = yes
>     	guest ok = yes
>     	writeable = yes
>     	case sensitive = no
>     	dont descend = config defaults

> また、 /home/samba/data ディレクトリの内容は以下のようになっているものとする

>     drwxr-xr-x   6 tom      users     1024 Jun 13 09:24 .
>     drwxr-xr-x   8 root     root      1024 Jun 10 17:53 ..
>     -rw-r--r--   2 tom      users     1024 Jun  9 11:43 README
>     drwxr-xr-x   3 tom      users     1024 Jun 13 09:28 config
>     drwxr-xr-x   3 tom      users     1024 Jun 13 09:28 defaults
>     drwxr-xr-x   3 tom      users     1024 Jun 13 09:28 market

> ユーザが共有に接続すると、 図 5.4のようなディレクトリが見えるはずである。 しかし、 /config と /defaults ディレクトリの内容は、実際にファイルが存在していたとしてもユーザからは常に空にみえる。またユーザはフォルダ内にデータを書き込むことができない(これにより、見えないだけで既に存在しているものと同名のファイルやフォルダを作成してしまうということが回避される)。ユーザが書き込もうとしても、「アクセスが拒否されました(Access Denied)」というメッセージを受け取るだけである。`dont` `descend` は管理を円滑に行うためのオプションであり、セキュリティのためのオプションではなく、ファイルのパーミッションを適切に設定する代わりとして利用するものではない。

> #### 図 5.4: dont descend を利用した場合の [data] 共有の内容

> ### 5.2.2 リンク

> DOS や NT のファイルシステムにはシンボリックリンクがない (Windows 95/98/NT システムでは、類似のものとして「ショートカット」が使われる)。そのため、クライアントが Samba サーバ上の共有にあるシンボリックリンクを開こうとした場合、Samba はUNIXが行うのと同様に、リンクを辿ってリンクの実体を見つけ、それを開く。 もしこの動作を禁止したい場合は、`follow` `symlinks` オプションを設定する:

>     [data]
>     	path = /home/samba/data
>     	browseable = yes
>     	guest ok = yes
>     	writeable = yes
>     	case sensitive = no
>     	follow symlinks = no

> このオプションの効果は、UNIXサーバ上のログインユーザのホームディレクトリ共有内にディレクトリを作成することで確認できる。 以下のように入力する:

>     % mkdir hello; cd hello
>     % cat "This is a test" >hello.txt
>     % ln -s hello.txt "Link to hello"

> この結果、 図 5.5のように、ウインドウ内には二つのファイルが表示される。通常、どちらかをクリックすると、This is a test という内容が表示される(monyo訳注: ただし、この例では Link to hello ファイルに拡張子がないため、まずどのプログラムを使ってファイルを開くかを問い合わせるダイアログが開く。そこでメモ帳を選択すると、内容が表示される)。しかし`follow` `symlinks` オプションを `no`に設定して、"Link to hello" をクリックすると、以下の 図 5.5のようなダイアログボックスが表示されるであろう。

> #### 図5.5: Samba によってシンボリックリンクの追跡が禁止された場合のエラーダイアログボックス

> 最後に`wide` `links` オプションについて述べておく。このオプションを`yes`に設定すると、クライアントは共有ディレクトリツリーの外を示すシンボリックリンクを辿ることが可能になる。シンボリックリンクが示す対象はファイル、ディレクトリどちらも可能である。例えば`[data]` 共有を以下のように修正した場合を考えてみよう:

>     [data]
>     	path = /home/samba/data
>     	browseable = yes
>     	guest ok = yes
>     	writeable = yes
>     	case sensitive = no
>     	follow symlinks = yes
>     	wide links = yes

> `follow` `symlinks` オプションが有効である限り、Samba は現在の共有ツリーの外にあるシンボリックリンクを追跡する。もし、共有の外(例えばだれかのホームディレクトリ)にファイルを作成して、そのファイルに対して以下のようにリンクを作成してみよう:

>     ln -s ~tom/datafile ./datafile

> これで、ファイルのパーミッション上問題がなければ、Tom のディレクトリにあるファイルを開くことが可能になる。

> ### 5.2.3 ファイルシステムのオプション

> 表 5.4 にはここまで解説してきたオプションの詳細を記述している。以下に特に記述がない限り、ほとんどの場合はデフォルト値のままにしておくことを推奨する。

> 表 5.4: ファイルシステムの設定オプション
> オプション | パラメータ | 機能 | デフォルト | 範囲
> --- | --- | --- | --- | ---
> `unix realname` | 真偽値 | UNIX ユーザの氏名をクライアントに提供する | `no` | グローバル
> `dont descend` | 文字列 (ディレクトリのリスト) | Samba がクライアントに対して内容を隠す必要があるディレクトリを指定する | なし | 共有
> `follow symlinks` | 真偽値 | `no`の場合、Samba はシンボリックリンクを追跡しない | `yes` | 共有
> `getwd cache` | 真偽値 | `yes`の場合、Samba は`getwd()` 関数の為のキャッシュを利用する | `yes` | グローバル
> `wide links` | 真偽値 | `yes`の場合、Samba は共有の外に対するシンボリックリンクも追跡する | `yes` | 共有
> `hide dot files` | 真偽値 | `yes`の場合、UNIX の隠しファイルを、Windows の隠しファイルとして扱う | `yes` | 共有
> `hide files` | 文字列 (ファイルのリスト) | 隠しファイルとして扱うファイルのパターンのリストを設定する | なし | 共有
> `veto files` | 文字列(ファイルのリスト) | 絶対に見せないファイルのパターンのリスト | なし | 共有
> `delete veto files` | 真偽値 | `yes`の場合、Samba は`veto files` の対象となるファイルであっても、それらが存在するディレクトリが削除される場合は、削除する。 | `no` | 共有

> #### 5.2.3.1 unix realname

> いくつかのプログラムは、動作するためにユーザのフルネームを必要とする。例えば、Windows 上の電子メールクライアントは、しばしばユーザ名(アカウント名)と実際の名前とを対応づけようとする。システムのパスワードファイルの GCOS フィールドにユーザの実際の名前が格納されている場合、`unix` `realname` オプションは、Samba がその情報をクライアントに対して提供できるように設定する。このオプションがない場合、ユーザ名としては単純にログインIDが提供される。例えばUNIXパスワードファイルが以下の行を含んでおり:

>     rcollins:/KaBfco47Rer5:500:500:Robert Collins:
>     /home/rcollins:/bin/ksh

> 設定ファイルが以下のようになっている場合:

>     [global]
>     	unix realname = yes

> Robert Collins という名前が、`rcollins`というユーザの実際の名前を要求したクライアントに対して提供される。 通常、このオプションの要不要で悩むことはないであろう。

> #### 5.2.3.2 dont descend

> `dont` `descend` オプションは、クライアントからみて内容がないように見せかけたいディレクトリを指定する。ディレクトリそれ自体が見えなくなる訳ではないことに注意してほしいが、Samba はディレクトリの内容をクライアントのユーザに対して全く表示しなくなる。これはセキュリティ上の目的で利用するためのオプションではない。(ユーザは恐らく何らかの抜け道を見つけ出すだろう)。これは、微妙なファイルが含まれるディレクトリをユーザから見えないようにする、という単なる便法に過ぎない。この章で既述した例を参照のこと。

> #### 5.2.3.3 follow symlinks

> 既に詳細に説明したとおり、このオプションはSamba がUNIX上のシンボリックリンクを追跡するか、クライアントのユーザに対してエラーとして返却するかどうかを制御する。オプションが`yes`に設定されていると、リンクの実体は、ファイルとして扱われる(monyo訳注:要はリンクを追跡する)。

> #### 5.2.3.4 getwd cache

> このグローバルオプションは、SambaがUNIXの`getwd()` (現在のワーキングディレクトリを取得する) システムコールに対してキャッシュを利用するかどうかを指定する。以下のように設定することで、デフォルト値の`yes`を上書きできる:

>     [global]
>     	getwd cache = no

> このオプションが`yes`(monyo訳注: no の誤りでは??)になっていると、特に`wide` `links`オプションが`no`の場合、 ワーキングディレクトリを取得する時間が大幅に増加する。通常このオプションを変更する必要はないであろう。

> #### 5.2.3.5 wide links

> このオプションは、クライアントのユーザが共有ディレクトリツリーの外をさすシンボリックリンクを追跡するかどうかを制御する。これはユーザに対して適切な権限が設定されている限り、リンクの先にあるファイルおよびディレクトリの双方に対して適用される。このオプションのデフォルト値は`yes`である。`follow` `symlinks` オプションが`no`の時は、このオプションは適用されないことに注意。 このオプションを`no`にすると smbdの動作が顕著に遅くなる。

> #### 5.2.3.6 hide files

> `hide` `files`オプションは、幾つかのファイルやディレクトリ名のパターンをSambaに提供する。このパターンに合致するファイルはクライアントからは隠しファイルとして扱われる。これは、DOS の隠しファイル属性を設定するだけであり、ユーザは実際にファイルを見られるかも知れないし、見られないかも知れない。

> エントリの開始、終了とリスト中の各エントリはスラッシュ(`/`) 文字で区切る必要がある。これはパターンが一つしかない場合でも例外ではない。これによって、リスト中にスペース文字が存在しても対応できる。アスタリスク(monyo訳注:'*'文字)は、0文字以上の文字を表すワイルドカードとして利用される。疑問符(monyo訳注:'?'文字)は、1文字を表すのに利用される。例えば以下のようにして利用する:

>     hide files = /.jav*/README.???/

> #### 5.2.3.7 hide dot files

> `hide` `dot` `files` オプションは、UNIXシステムに存在するシェルコマンドの機能を模倣して、サーバ上のドット(.)文字で始まるファイル名のファイルを全て隠す。`hide` `files`と同様に、ドットから始まる名前のファイルは DOS の隠しファイル属性を付与されるだけであり、クライアントからそれらのファイルが見えなくなることが保証されるものではない。このオプションのデフォルト値は`yes`である。

> #### 5.2.3.8 veto files

> 隠しファイルの状態よりも厳しいのが`veto` `files` 設定オプションが提供する状態である。Samba はこれらのファイルの存在を秘匿する。クライアントからはそれらを一覧したりオープンしたりはできない。ただし、これはセキュリティのオプションとして信頼に足るものではなく、PC のプログラムが、特殊なファイルを削除しないようにする為の機構である。例えば、Macintosh のリソースフォークファイルを UNIX ファイルシステム上に保存するためのファイルが該当する。Windows と Mac の両方が同じファイルを共有しているような場合、このオプションを用いれば、間違った考えを吹き込まれた「パワーユーザ」が、 Mac ユーザにとって必要なファイルを削除してしまうのを妨げることができる。

> このオプションの文法は、`hide` `files` 設定オプションのものと同等である。エントリの開始、終了とリスト中の各エントリはスラッシュ(/)文字で区切る必要がある。これはパターンが一つしかない場合でも例外ではない。これによって、リスト中にスペース文字が存在しても対応できる。アスタリスク(monyo訳注:'*'文字)は、0文字以上の文字を表すワイルドカードとして利用される。疑問符(monyo訳注:'?'文字)は、1文字を表すのに利用される。例えば以下のようにして利用する:

>     veto files = /*config/*default?/

> このオプションは、管理のために用いるべきものであり、ファイルのアクセス権の代わりに用いるべきではない。

> #### 5.2.3.9 delete veto files

> このオプションは、veto されたファイルを含むディレクトリをユーザが削除しようとする時に、Samba がそれらのファイルを削除するかどうかを制御する。デフォルト値は`no`である。これは veto されたファイルが存在するディレクトリをユーザが削除しようとした時には、そのファイル(およびディレクトリ)は削除されないということである。ディレクトリは残るが、ユーザからみると内容は空として見えることになる。`yes`の場合、ディレクトリと veto されたファイルとは削除される。

5.1 ブラウジング |  | 5.3 MS-DOS と UNIX におけるファイルアクセス権と属性

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

© 1999, O'Reilly & Associates, Inc.