[Chapter 5] 5.3 MS-DOS と UNIX におけるファイルのアクセス権と属性
Date: 1999-11-05T21:32:58Z

| ## Using Samba Robert Eckstein, David Collier-Brown, Peter Kelly 共著 第一版 1999 年 11 月 1-56592-449-5, 注文番号: 4495 416 ページ, 34.95 ドル ハードコピー版(英語)を購入する 目次

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

> ## 5.3 MS-DOS と UNIX におけるファイルのアクセス権と属性

> DOSはマルチユーザやネットワークOSを全く考慮していない。一方UNIXは当初からそれらを意識して設計された。従って両者のファイルシステムの間には、不整合や差異があり、Sambaはそれらを認識するだけではなく、対応策も提供しなければならない。最も大きい差異の一つは、UNIXとDOSがファイルのパーミッションを管理する方法である。

> UNIXがどのようにパーミッションを割り当てているかについてみてみよう。全てのUNIXファイルには、read、write、execute(実行)というビットが、三つのクラス: owner、group、world 毎に存在する。これらのパーミッションは、 `ls` `-al`コマンドをUNIXのディレクトリで発行した時の、一番左側のところに表示されてる。例えば以下のようになっている:

>     -rwxr--r--   1 tom     users   2014 Apr 13 14:11 access.conf

> 一方 Windows には、全てのファイルに4つの基本的なビットが存在する: read-only, system, hidden, archive。これらのビットは、ファイルを右クリックして、プロパティを選択することで表示される。 図 5.6のようなダイアログボックスが表示されるはずだ。[1]

> > [1] system 属性のチェックボックスは、グレーアウトしているだろう。これは気にしないでほしい - このチェックボックスがチェックされているどうかに関わらず、ファイルを表示することがyできる。

> #### 図 5.6: DOS および Windows におけるファイルのプロパティ

> これらのビットは、以下のように定義されている:

> Read-only

>   ファイルの内容をユーザが読むことはできるが、書き込むことはできない。

> System

>   このファイルは、OSが必要とする特別な目的のために使われている。

> Hidden

>   このファイルは、OSがファイルを表示できるような設定をしない限り、ユーザから表示できないように設定されている。

> Archive

>   このファイルは、DOSのバックアップコマンドが最後に実行されてから修正されている。

> ファイルが実行可能であることを示すビットは存在しないことに注意すること。DOSやWindows NTのファイルシステムでは、ファイルが実行可能かどうかをその拡張子 .EXE、COM、.CMD、.BAT で判断している。

> そのため、Sambaのディスク共有上のファイルに存在するUNIXの実行ビットは、全く意味を持たない。またDOSファイルにはUNIX環境に保存されるときにも保存する必要のある独自の属性 archive、system、および hidden ビットが存在する。設定を行うことで、SambaはUNIX上のファイルのexcuteパーミッションのビットを再利用し、これらのビットを保存することが可能である。とはいえ、これらのビットのマッピングは、一方であまりよろしくない副作用をもう一方の側に招く: Windows のユーザがファイルを Samba の共有に保存して、それをUNIX上で`ls` `-al` コマンドで確認した場合、幾つかの execute ビットは、本来の意味を示さなくなってしまう。

> `map` `archive`, `map` `system`, and `map` `hidden`という3つのSambaのオプションは、そのビットをマッピングするかどうかを制御するものである。 これらのオプションは、archive、systemおよびhidden属性をファイルのowner、group、worldの実行ビットに対して各々マッピングを行う。これらのオプションを`[data]` 共有に設定してみよう。各々の設定は以下のようになる:

>     [data]
>     	path = /home/samba/data
>     	browseable = yes
>     	guest ok = yes
>     	writeable = yes
>     	map archive = yes
>     	map system = yes
>     	map hidden = yes

> 設定した後で、UNIX上で共有内にファイルを作成し、 - 例えば `hello.java` とでもしよう - ファイルのパーミッションを 755 に変更してみよう。Samba のオプションを上記のように設定していると、Windows 側でファイルの属性をチェックするために、プロパティダイアログボックス内で、三つの属性を確認してみよう。リードオンリー属性はどうであろうか?デフォルトで、Samba 2.0 はUNIXでownerの書き込み権限がないファイルに対して、このビットを設定する。言い換えれば、ファイルのパーミッションを 555 に変更することで、このビットを設定することが可能である。

> `map` `archive` オプションのデフォルト値だけが `yes`であり、他の二つのオプションのデフォルト値`no`とは異なっていることに注意してほしい。 これは、archive ビットが DOS や Windows のファイルに正しく設定されていないと、多くのプログラムが正しく動作しないためである。しかし、system と hidden 属性はプログラムの動作上に致命的な影響をおよぼさないため、管理者の判断に任されている。

> 図 5.7に、UNIXのパーミッションビットに対し、Samba がどのようにそれらを DOS の属性にマッピングするかを図解した。グループのread/write と world の read/write ビットは、直接的には DOS の属性に変換されないことに注意してほしい。ただし、これらは Samba サーバ上の UNIX ファイルの属性としては保持されている。

> #### 図 5.7: Samba と UNIX がファイルのパーミッションを判断する方法

> ### 5.3.1 Creation masks

> Samba には、ファイル作成時のマスクを設定するためのオプションが幾つかある。ファイル作成時のマスク( umasks) は、ファイルやディレクトリの作成時に付与されるパーミッションの設定に影響する。UNIX においては、ファイルやディレクトリの作成時に付与させたくないパーミッションを制御できる。Windowsからアクセスするという観点からは、read-only、archive、system、hidden のファイル属性を無効にできるということになる。

> 以下の例では、`create` `mask` オプションは Windows クライアントにより作成されたファイルの属性を、殆んどの場合 744 に設定する:

>     [data]
>     	path = /home/samba/data
>     	browseable = yes
>     	guest ok = yes
>     	writeable = yes
>     	create mask = 744

> 以下の`directory` `mask` オプションは、新しく作成されたディレクトリのパーミッションを殆んどの場合755 に設定する:

>     [data]
>     	path = /home/samba/data
>     	browseable = yes
>     	guest ok = yes
>     	writeable = yes
>     	directory mask = 755

> 代わりに、`force` `create` `mode` と `force` `directory` `mode` オプションを利用することで、これらのビットを強制的に設定することが可能である。このオプションは、ファイルやディレクトリの作成時のマスクと論理和され、指定したビットが常に設定されるようにする。このオプションは通常グローバルに設定し、グループやその他のread/write アクセス権が各共有で新規に作成されたファイルやディレクトリに適切に設定されるようにする。

> 同様の主旨で、Windows 側で作成されたファイルに対して UNIX のユーザやグループの情報をきちんと設定したいのであれば、`force` `user` と `force` `group` オプションを用いることができる。以下に例を示す:

>     [data]
>     	path = /home/samba/data
>     	browseable = yes
>     	guest ok = yes
>     	writeable = yes

>     	create mask = 744
>     	directory mask = 755
>     	force user = joe
>     	force group = accounting

> これらのオプションにより、この共有に対する接続は、UNIX のユーザとグループが静的に割り当てられる。ただし、これが行われるのは、クライアントの認証 後である。従ってこのオプションは共有への自由なアクセスを認めるものではない。このオプションは、共有内で作成された各新規ファイルやディレクトリに、特定のユーザやグループを割り当てることによるUNIX上での効果のために頻繁に使われる。このオプションは適宜利用すること。

> 最後になるが、DOSにないUNIXの仕様の一つに書き込み可能なディレクトリでの読み込み専用のファイルの消去がある。UNIX では、ディレクトリが書き込み可能であれば、そのディレクトリ中の読み込み専用のファイルも削除することができる。これにより、誰かがファイルを残してしまっている場合等に、ディレクトリ中のファイルの削除が行えるのである。

> DOS のファイルシステムはマルチユーザ用に設計されたものではないため、読み込み専用は「同じマシン上の他のユーザからの保護」ではなく、「意図しない変更や削除からの保護」という主旨の設計が行われている。従ってDOSの設計では、読み込み専用ファイルの削除が禁止されているのである。現在に至っても、Windows のファイルシステムは全く同様の振る舞いを示す。

> 通常、これは問題とならない。Windows のプログラムは read-only ファイルを削除するような不正な行為を行わない。しかし、元々UNIX用に既述されたソースコード管理プログラム等は、read-only ファイルを削除する能力が必要である。Samba は`delete` `readonly` オプションで、この動作を可能にする。この機能を有効にするには、オプションを`yes`に設定すること:

>     [data]
>     	path = /home/samba/data
>     	browseable = yes
>     	guest ok = yes
>     	writeable = yes

>     	create mask = 744
>     	directory mask = 755
>     	force user = joe
>     	force group = accounting
>     	delete readonly = yes

> ### 5.3.2 File and Directory Permission Options

> ファイルとディレクトリのパーミッションに関するオプションの一覧を 表 5.5に示す; 各オプションの詳細を既述する.

> 表 5.5: ファイルとディレクトリのパーミッションに関するオプション
> オプション | パラメータ | 機能 | デフォルト | 範囲
> --- | --- | --- | --- | ---
> `map archive` | 真偽値 | DOS のアーカイブ属性をユーザ実行ビット(0100)に保存する | `yes` | 共有
> `map system` | 真偽値 | DOS のシステム属性をグループ実行ビット(0010)に保存する | `no` | 共有
> `map hidden` | 真偽値 | DOS の隠しファイル属性をその他の実行ビット(0001)に保存する | `no` | 共有
> `create mask (create mode)` | 数値 | Samba によって作成されるファイルに許容される最大のアクセス権を設定する | `0744` | 共有
> `directory mask (directory mode)` | 数値 | Samba によって作成されるディレクトリに許容される最大のアクセス権を設定する | `0755` | 共有
> `force create mode` | 数値 | Samba によって作成されるディレクトリ(monyo訳注: ファイルの誤り??)に必ず設定する(OR演算で設定される)アクセス権を設定する | `0000` | 共有
> `force directory mode` | 数値 | Samba によって作成されるディレクトリに必ず設定する(OR演算で設定される)アクセス権を設定する | `0000` | 共有
> `force group (group)` | 文字列 (グループ名) | ユーザが共有にアクセスするときに用いられる実行グループ名を指定する | なし | 共有
> `force user` | 文字列 (ユーザ名) | ユーザが共有にアクセスするときに用いられる実行ユーザ名を指定する | なし | 共有
> `delete readonly` | 真偽値 | ユーザが書き込み可能なディレクトリからリードオンリファイルを削除することを可能にする | `no` | 共有

> #### 5.3.2.1 create mask

> このオプションの引数は、共有にクライアントがファイルを作成する時に、どのアクセス権のフラグを設定するかを示す、8進法の数値である。デフォルトは0775であり、これはUNIXのownerが読み書き、および場合によってはファイルの実行ができ、グループおよびその他からは、読み込みと実行のみが許可される。実行されないファイルに対しては、これを0644、すなわち`rw-r--r--`とすることを推奨する。前述したように、実行ビットはDOSのファイル属性にマッピングされることがあることに注意してほしい。create mask を変更する時は、これらのビットも create mask に含む必要がある。

> #### 5.3.2.2 directory mask

> このオプションの引数は、共有にクライアントがディレクトリを作成する時に、どのアクセス権のフラグを設定するかを示す、8進法の数値である。デフォルトは0775であり、これはUNIX上の全員が、ディレクトリのreadとファイルの一覧が可能であり、ownerのみが変更可能である。このマスクを 0750 にして、その他のユーザからのアクセスを排除することを推奨する。

> #### 5.3.2.3 force create mode

> このオプションは、ファイルのアクセス権が変更された時にSambaが強制的に付加するアクセス権のビットを設定する。これは、前述したように force group アクセス権に対して用いられることが多い。これはまた、archive (0100), system (0010), or hidden (0001)といったDOSのファイル属性を設定するために利用することもできる。このオプションは、常に`map` `archive`, `map` `system` , `map` `hidden`, および `create` `mask` オプションが適用された後に適用される。

> 多くの Windows アプリケーションは、データファイルを datafile.bak に変更し、新しいファイルを作成する。そのため、所有者とアクセス権が変更になってしまい、UNIX上で同じグループに所属するメンバーがファイルを編集できなくなってしまうことがある。`force create mask = 0660`に設定することで、新しいファイルもグループのメンバーが編集可能となる。

> #### 5.3.2.4 force directory mode

> このオプションは、ディレクトリのアクセス権が変更された時にSambaが強制的に付加するアクセス権のビットを設定する。これは、前述したように force group アクセス権に対して用いられることが多い。このオプションのデフォルト値は 0000 であるが、`force` `create` `mode` と同様に、必要に応じグループやその他に対してアクセス権を追加するのに用いることができる。このオプションは `map` `archive`、 `map` `system`、 `map` `hidden`および`directory` `mask`オプションが適用された後に適用される。

> #### 5.3.2.5 force group

> このオプションは、`group`と呼ばれることもあるが、クライアントの認証後, サービス対する全ての接続に対し、静的に設定された同一のグループIDを割り当てるものである。これは、SMBクライアントから新規に作成された各ファイルやディレクトリに特定のグループを割り当てるものである。

> #### 5.3.2.6 force user

> `force` `user` オプションは、クライアントの認証成功後に、サービスに対する全ての接続に対し、静的に設定されたユーザIDを割り当てるものである。これは、SMB クライアントから新規に作成された各ファイルやディレクトリに特定のユーザを割り当てるものである。

> #### 5.3.2.7 delete readonly

> このオプションは、ユーザがread-onlyファイルを含むディレクトリを削除できるようにするものである。デフォルトで、DOS および Windows は、このような操作を許可していない。プログラムがこの機能を必要としない限り、このオプションはオフのままに為ておかれることになろう。多くの Windows のユーザは、read-only に設定した筈のファイルが消されてしまうことに気づくと驚くであろう。実際 UNIX であっても`rm` コマンドは、保護を無視してread-onlyファイルを本当に削除してよいかを聞いてくる。It's a good idea to have Samba be at least as cautious.

> #### 5.3.2.8 map archive

> DOS のアーカイブビットは最後にアーカイブ(DOSのアーカイブプログラムによるバックアップ等)をされてからファイルが変更されたことを示すフラグとして使われている。Samba 上で `map` `archive` `=` `yes` とすることで、DOS のアーカイブフラグが UNIX の所有者の実行権(0100)ビットに割り当てられるようになる。Windows ユーザがバックアップを行ったり、アーカイブビットを利用するプログラムを実行したりするのであれば、このオプションはそのままにしておくこと。Unix には、アーカイブビットにあたる概念が完全に欠落している。バックアッププログラムは通常どのファイルがいつバックアップされたかというリストを保持しており、ファイルの更新日時を比較することでアーカイブビットと同等の処理を行う。

> このオプションを`yes` にすると、ユーザがデータファイルが実行可能になっていることに気づき、UNIX側では驚きを引き起こすこともあるが、これは無害である。ユーザがそれを実行しようとしても、通常シェルが最初の数行をコマンドとして実行しようとして、エラーメッセージの文字列を受け取るだけである。逆に、UNIX上で実行可能なプログラムは、Windows からみると、最近バックアップを行われていないかのようにみえる。 しかしこのような事態は稀であり、通常は無害である。

> #### 5.3.2.9 map system

> DOS のシステム属性は、OSが必要とし、特別な事情がない限り、削除したり名前を変更したり移動したりしてはならないファイルを示す為に用いられる。このオプションは、Windows のシステムファイルを UNIX のファイルサーバ上に格納するときにのみ用いること。実行可能な UNIX のプログラムが Windows クライアントからみると、移動不可能な特別な Windows のファイルに見えてしまう。このため、ファイルを移動したり削除したりしたいときに不便なこともある。もっとも殆んどのサイトではこれはあまり問題ではないであろう。

> #### 5.3.2.10 map hidden

> DOS は隠しファイル属性を通常ディレクトリを一覧したときに見えるべきではないファイルを識別刷るために用いる。UNIXはこうした機能を持っておらず、個々のプログラム(特にシェル)が何を表示し、何を表示しないかを決定する。通常隠したい DOS ファイルはないと思われるので、このオプションはオフのままにしておくのがよい。

> このオプションを`yes` にすると、サーバは隠し属性のフラグを他の実行ビット(0001)に割り当てる。この機能は驚くような結果を引き起こす。誰でも実行可能な全ての UNIX のプログラムが、Windows クライアントからみると存在しないようにみえるのだ。このオプションが設定されていなければ、 Windows のユーザがSamba の共有上でファイルの隠し属性をチェックしても、それは有効にならない - Samba には隠し属性を格納する場所がないのである!

5.2 ファイルシステムの相違点 |  | 5.4 ファイル名の短縮 (Name Mangling) と大文字小文字

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

© 1999, O'Reilly & Associates, Inc.