[Chapter 6] 6.2 共有に対するアクセス権の制御
Date: 1999-11-05T21:33:37Z

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

| Chapter 6 ユーザ、セキュリティ、ドメイン |

> ## 6.2 共有に対するアクセス権の制御

> セキュリティ上の理由から、ある共有にアクセスできるユーザを制限したい、というようなことは良く起こる。 Samba でこれを行うのは簡単である。Samba にはオプションが豊富にあり、実質上あらゆるセキュリティ設定が可能になっている。Samba のセットアップ時に利用すると良さそうな設定の幾つかを、ここで紹介しよう。

> > 警告: 繰り返しになるが、Windows 98 や Service Pack 3 (以上)を適用した Windows NT 4.0 から接続する場合、クライアントから Samba サーバへは暗号化されたパスワードが送付される。 Samba がこれを受付けるように設定されていないと、接続は常に拒否される。この章では、どのように Samba の暗号化パスワードの設定を行うかについて記述する。 Section 6.4, パスワード セクションを参照のこと。

> 有効なユーザ(valid users)を指定した場合にどうなるかは既にみてきた。逆に、無効なユーザ(invalid users)、すなわちSambaやその共有へのアクセスを許可されないユーザのリストを設定することも可能である。この設定は `invalid` `users` オプションで行う。このオプションのよくある利用例を以前に示した: `[homes]` セクションを置く場合に、スーパーユーザやいろいろなシステムユーザになりすまして接続することが絶対にできないよう、グローバルなデフォルトを設定する使い方である。例を示す:

>     [global]
>     	invalid users = root bin daemon adm sync shutdown \
>     		halt mail news uucp operator gopher
>     	auto services = dave peter bob

>     [homes]
>     	browsable = no
>     	writeable = yes

> `invalid` `users` オプションには`valid` `users`オプションと同様に、ユーザ名だけでなくグループ名も設定できる。ユーザもしくはグループが両方のリストに存在した場合は、`invalid` `users` オプションの方が優先され、そのユーザやグループは共有へのアクセスを拒否される。

> まったく逆に、ある共有に対するスーパーユーザ(root)としてのアクセスを特定のユーザに明示的に与えることもできる。これには `admin` `users`オプションを用いる。例えば:

>     [sales]
>     		path = /home/sales
>     		comment = Fiction Corp Sales Data
>     		writeable = yes
>     		valid users = tom dick harry
>     		admin users = mike

> このオプションには、ユーザ名とグループ名のどちらでも指定できる。さらに、先頭に `@`をつけて NIS のネットグループ名を設定することもできる。ネットグループが見つからなかった場合は、Samba は指定された名前を通常の UNIX のグループとみなす。

> ある共有に対する管理者権限をグループに割り当てる際には、注意すること。 Samba チームは、このオプションの利用を避けることを強く推奨する。このオプションを使うと、指定したユーザやグループが、その共有に対して root 権限でアクセスできるようになってしまう。

> 共有にアクセスするユーザに対して、読み込み専用、もしくは読み書き可能のアクセス権を強制的に付与したい場合は、それぞれ `read` `list` オプションおよび `write` `list` オプションを用いれば良い。これらのオプションは共有ごとに設定でき、書き込み可能な共有で書き込みを禁止したり、読み込み専用の共有で特定のユーザに対してのみ書き込みアクセス権を与えたりすることが可能になる。以下に例を示す:

>     [sales]
>     		path = /home/sales
>     		comment = Fiction Corp Sales Data
>     		read only = yes
>     		write list = tom dick

> `write` `list` オプションは UNIX 上の権限を変更することはできない。write list 中のユーザに UNIX システム上での書き込み権限を付与せずに共有を作成した場合、そのユーザは`write` `list`の設定に関わらず、書き込みを拒否される。

> ### 6.2.1 ゲストアクセス

> 前述したように、共有にはゲストアクセス可能なユーザを設定できる。ゲストアクセスを設定するオプションは簡単である。一つめのものは`guest` `account`であり、ゲストユーザが Samba サーバに接続する際に用いられる UNIX のアカウントを設定する。デフォルトはコンパイル時に設定され、通常`nobody`である。システムのサービスへのアクセスでトラブルが発生する場合は、ゲストユーザを `ftp` にすることもできる。

> 共有へのアクセスをゲストのみに制限したい場合、すなわちその共有にアクセスする全てのクライアントをゲストアカウントとして接続させたい場合は、`guest` `only` オプションを`guest ok` オプションと同時に用いればよい。以下に例を示す:

>     [sales]
>     		path = /home/sales
>     		comment = Fiction Corp Sales Data
>     		writeable = yes
>     		guest ok = yes
>     		guest account = ftp
>     		guest only = yes

> この場合、`guest only` と `guest ok` の両方のオプションを`yes`とすること。こうしないと、Samba は指定したゲストアカウントを使用しない。

> ### 6.2.2 アクセス制御オプション

> 表 6.1 に、共有に対するアクセス制御に利用できるオプションをまとめた。

> 表 6.1: 共有レベルのアクセスオプション
> オプション | パラメータ | 機能 | デフォルト | 範囲
> --- | --- | --- | --- | ---
> `admin users` | 文字列 (ユーザ名のリスト) | root としてアクセス可能なユーザのリストを指定する | なし | 共有
> `valid users` | 文字列 (ユーザ名のリスト) | 共有に接続可能なユーザのリストを指定する | なし | 共有
> `invalid users` | 文字列 (ユーザ名のリスト) | 共有へのアクセスを拒否するユーザのリストを指定する | なし | 共有
> `read list` | 文字列 (ユーザ名のリスト) | 書き込み可能な共有に対して、読み込み専用でのアクセスのみを許可するユーザのリストを指定する | なし | 共有
> `write list` | 文字列 (ユーザ名のリスト) | 読み込み専用の共有に対して、読み書き可能のアクセス権を持つユーザのリストを指定する | なし | 共有
> `max connections` | 数値 | 共有に対して同時に接続可能な接続数を指定する | `0` | 共有
> `guest only (only guest)` | 真偽値 | 共有に対してゲストアクセスのみを許可するかどうかを指定する | `no` | 共有
> `guest account` | 文字列 (アカウント名) | ゲストアカウントとして利用される UNIX のアカウント名 | `nobody` | 共有

> #### 6.2.2.1 admin users

> このオプションは、`root`としてファイル操作が可能なユーザのリストを指定する。指定したユーザは、アクセス権に関わらず修正や削除等の作業を行うことができる。作成されたファイルの所有者は root となり、所有グループはファイルを作成した管理者ユーザのデフォルトグループになる。`admin` `users` オプションは PC のユーザが特定の共有に関して管理者権限を持つことを可能とする。このオプションを使わないことを推奨する。

> #### 6.2.2.2 valid users と invalid users

> これらの二つのオプションは、特定の共有に対してアクセス可能・不可能なユーザやグループのリストを設定する。ユーザ名をコンマで区切って並べたリストを指定したり、アットマーク(`@`)を先頭に付けて NIS や UNIX のグループ名を示すことができる。

> これらのオプションに関して覚えておくべき重要なことは、`invalid` `users` リストに名前やグループがあると、そのユーザは 常に アクセスを拒否される、ということである。これは`valid` `users` のリストに(どんな形で)含まれていても変わらない。デフォルトではどちらのオプションも設定されていない。どちらのオプションも設定されていない場合は、全てのユーザが共有へのアクセスを許可される。

> #### 6.2.2.3 read list と write list

> `valid` `users` `と` `invalid` `users` オプションと同様に、この二つのオプションはそれぞれ、書き込み可能な共有に対して読み込みアクセス権しか持たないユーザと、読み込み専用のアクセスに対して書き込みアクセス権を持つユーザとを指定する。各オプションのとる値は、ユーザのリストである。`read` `list` は、サーバ上の UNIX のファイルアクセス権も含め、Samba が付与するアクセス権を変更するかたちでユーザの書き込みを拒否する。`write` `list` は他の Samba が付与したアクセス権を変更するかたちで書き込みアクセスを実現する。ただしユーザが UNIX システム上のファイルに対する書き込みアクセス権を持たない場合は、書き込みアクセスを可能とすることはできない。(`@users`のように)アットマークを名前の前につけると、NIS や UNIX のグループ名を指定できる。どちらの設定オプションもデフォルト値はない。

> #### 6.2.2.4 max connections

> このオプションは、ある共有に対して同時に接続可能なクライアントの最大数を設定する。最大接続数に到達した後では、接続しようとすると拒否される。デフォルト値は `0`であり、これは無制限の接続が可能であることを意味する。この設定は以下のようにして共有単位で変更することが可能である:

>     [accounting]
>     	max connections = 30

> このオプションは、ライセンス制限のあるプログラムやデータに対して、同時にアクセスできるユーザを制限する必要があるときに便利である。

> #### 6.2.2.5 guest only

> この共有レベルのオプション (`only` `guest`と呼ばれることもある) は、共有に対する接続を`guest` `account` オプションで指定されたユーザが行ったことにする。このオプションを Samba に認識させるには、その共有で、`guest` `ok` `=` `yes` を明示的に指定する必要がある。このオプションのデフォルト値は `no`である。

> #### 6.2.2.6 guest account

> このオプションは、Samba の共有に対するゲストアクセス時に使用されるアカウント名を指定する。このオプションのデフォルトはシステムによって異なるが、`nobody`に設定されることが多い。デフォルトのユーザアカウントをゲストユーザとしての接続に利用すると、トラブルが発生する場合がある。もしお使いのシステムでそのような現象が発生した場合は、Samba チームは ftp アカウントをゲストユーザのアカウントとして利用することを推奨する。

> ### 6.2.3 ユーザ名のオプション

> 表 6.2 に、Windows と UNIX との間にあるユーザ名に関する非互換性を修正するために Samba が利用できる二つのオプションを示す。

> 表 6.2: ユーザ名のオプション
> オプション | パラメータ | 機能 | デフォルト | 範囲
> --- | --- | --- | --- | ---
> `username map` | 文字列 (フルパス名) | ユーザ名マッピングファイルの名前を指定する | なし | グローバル
> `username level` | 数値 | ユーザ名を合致させる時に何文字の大文字を利用するかを指定する | `0` | グローバル

> #### 6.2.3.1 username map

> SMB ネットワークにおけるクライアントのユーザ名は比較的長い(255文字まで可能である) が、UNIX ネットワークでのユーザ名が普通 8 文字以内に制限されている。従って、ある一人のユーザはクライアント上でのユーザ名とは別に Samba サーバ上で短い名前を持つ必要があるかも知れない。クライアントでのユーザ名と 8 文字以下の文字数のユーザ名からなる UNIX のユーザ名とを マッピング させれば、この問題を解決できる。これは通常のテキストファイルに、すぐ後で記述するフォーマットに従って記述する。 ファイルが用意できたら、グローバルな`username` `map` オプションでファイルのパスを Samba に指定する。このファイルへのアクセスは制限すること。ファイルの所有者を root とし、所有者以外からのアクセスを禁止する。さもないと、信頼できないユーザがこのファイルにアクセスできれば、クライアントのユーザ名を Samba サーバの root ユーザに簡単にマッピングできてしまう。

> このオプションは以下のようにして記述する:

>     [global]
>     	username map = /etc/samba/usermap.txt

> username map ファイルの各エントリは以下のように記述する: まず UNIX ユーザ名を書き、次に等号(`=`)、最後に (一つ以上の) SMB クライアントのユーザ名をホワイトスペースで区切って指定する。 他で特に指定がなければ (例えばそのユーザはゲストとして接続させるとか)、 Samba はクライアントとサーバのユーザは同じパスワードであると仮定して動作する。NT グループも、 `@` 記号を用いて (ひとつ以上の) UNIX のグループにマッピングできる。以下に例を示す:

>     jarwin = JosephArwin
>     manderso = MarkAnderson
>     users = @account

> アスタリスクを使って、username map ファイルにワイルドカードのエントリを設定することもできる。これはありとあらゆるユーザ名すべてにマッチする:

>     nobody = *

> ファイル中にコメントを挿入する場合は、(`#`) か (`;`)で行をはじめること。

> このファイルを用いると、ある UNIX のユーザを別のユーザとみなすこともできる。これを行う際には注意すること。Samba もクライアントもマッピングされたユーザには何の通知もしないし、 Samba が待つのは別のパスワードになる。

> #### 6.2.3.2 username level

> (Windows 等の)SMB クライアントはSMB コネクションの要求時に大文字でユーザ名を送信する。つまりクライアントのユーザ名は大文字と小文字を区別する必要はない。一方 UNIX サーバではユーザ名は大文字と小文字を区別する。デフォルトではユーザ `ANDY` はユーザ `andy` と異なる。デフォルトの Samba ではこの問題に対応するため、以下のような処理を行っている:

> 1. クライアントから送信された名前のユーザアカウントが存在するかどうかをチェックする

> 2. ユーザ名を全て小文字に変換してチェックする

> 3. 最初の文字だけを大文字に、それ以外の文字を小文字にしたユーザ名をチェックする

> もし Samba により多くの大文字と小文字の組をチェックさせたい場合は、グローバル設定オプションである`username` `level` を用いればよい。このオプションは整数値をとり、共有への接続が試みられたときにユーザ名の何文字までを大文字にするかを指定する。このオプションは以下のようにして指定する:

>     [global]
>     	username level = 3

> この場合、Samba は、あるユーザ名について 3 文字の大文字を持つ全ての組み合わせを確認する。数値を大きくすると、Samba はユーザ名を確認するときにより多くの組合わせを確認することとなり、認証にかかる時間が増加する。

6.1 ユーザとグループ |  | 6.3 認証とセキュリティ

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

© 1999, O'Reilly & Associates, Inc.