!==
!== security_level.txt for Samba release 2.0.7 26 Apr 2000
!==
寄稿者:	Andrew Tridgell
更新日:	1997/06/27
状態:	最新

翻訳者:	佐藤文優 <fumiya@samba.gr.jp>
更新日:	1999/02/24

主題:	SMB セキュリティ・レベルの種類
===========================================================================

Samba は smb.conf の global パラメータに以下のオプションをサポートしている。

    "security =":
	    share, user, server

注意: 現在の Samba 2.0 には「domain」セキュリティ・モードが追加
されている。利用方法に関しては smb.conf マニュアルを、より詳細な
背景に関しては docs/textdocs/DOMAIN_MEMBER.txt を参照してほしい。

上記について、「security = server」における Samba は、クライアントに
「ユーザ・モード」で動作していると伝えるが、実際はすべての認証要求を
ほかの「ユーザ・モード」サーバに渡す。これには追加のパラメータ
「password server =」が必要で、実際の認証サーバを指定する。
実際の認証サーバには、ほかの Samba サーバか、最新で本来の暗号化
パスワードをサポートする Windows NT サーバを指定できる。

SMB サーバは起動時に、どんな「セキュリティ・レベル」で動作しているかを
クライアントに知らせる。レベルには「共有レベル」と「ユーザ・レベル」の
2 つの種類が存在する。クライアントは 2 つのどちらかを受け取ることにより、
クライアントが自身を認証しようとする方法に影響を及ぼす。これは、Samba
サーバが実行するセキュリティの方法には、直接(大きな範囲には)影響を及ばさない。
これが奇妙であることはわかっているが、SMB のクライアント/サーバのアプローチ
には合致している。SMB においては、すべてがクライアントにより開始・制御され、
サーバは何が利用可能か、ある動作が許可されているかどうかだけを
クライアントに知らせる。

最初に、より簡単なユーザ・レベルのセキュリティについて記述する。
ユーザ・レベルのセキュリティでは、クライアントはプロトコル折衝の後に
「session setup」コマンドを送る。このコマンドにはユーザ名とパスワードが
含まれている。サーバはそのユーザ名/パスワードの組み合わせを受け入れるか、
または拒否することができる。この段階では、クライアントがどの共有に接続を
試みるのかサーバはわからない。そのため、サーバは以下のあげるもの以外では
「受理/拒否」を判断することはできないことに注意してほしい。

    - ユーザ名/パスワード
    - マシン名(クライアントがやってきたところ)

サーバがユーザ名/パスワードを受け入れると、クライアントは、パスワードを
指定することなしにマウント可能なあらゆる共有を(「tree connection」を
使用して)求める。それらのすべてのアクセス権は、「session setup」で指定された
ユーザ名/パスワードのものであると期待される。

クライアントは複数の「session setup」要求を送ることも可能である。
サーバがそれに応答するとき、ユーザ名/パスワードに対する認証タグ
として使用される「uid」をクライアントに与える。
クライアントはこの方法により複数の認証コンテクストを維持できる。
(WinDD はこれを実行するアプリケーションの一例である)


さあ、ここから共有レベルのセキュリティについて説明しよう。共有レベルの
セキュリティにおいては、クライアントは共有ごと別々に自身の認証を行う。
クライアントは各「tree connection」(共有のマウント)とともにパスワードを送る。
この操作では、ユーザ名は絶対に送られない。クライアントはユーザに依存しない、
各共有に関連するパスワードを期待している。これは、クライアントがおそらく
使用したいであろうユーザ名が何かを、Samba が探し当てなければならないことを
意味する。ユーザ名が明白に送られることはない。NT のようないくつかの商用
SMB サーバは、共有レベルのセキュリティを持つ共有に、直接パスワードを
関連づけている。しかし Samba は常に UNIX の認証機構を使用する。
ユーザ名/パスワードの組み合わせで認証されており、「共有/パスワード」ではない。

多くのクライアントは、サーバが共有レベルのセキュリティであっても
「session setup」を送る。通常クライアントは、有効なユーザ名を送るが
パスワードは送らない。Samba はこのユーザ名を「有効なユーザ名」の
リストに記録する。クライアントが「tree connection」を実行するときも、
クライアントが接続を試みた共有の名前(ホーム・ディレクトリに有用)と、
smb.conf の「user =」行にリストされているユーザ名を、このリストに追加する。
そしてパスワードは、これら「有効なユーザ名」に対して順番にチェックされる。

最後に「サーバ・レベル」セキュリティ。サーバ・レベルのセキュリティでは、
Samba サーバはクライアントに、ユーザ・レベルのセキュリティであると報告する。
そしてクライアントは、先に記述したように「session setup」を行う。
Samba サーバはクライアントが送ったユーザ名/パスワードを取得し、
それとまったく同じものを「password server」に送り、ログインを試みる。
そのサーバがユーザ・レベルのセキュリティでパスワードを受け入れるなら、
Samba はクライアントの接続を受け入れる。以上により、Samba サーバは、
ほかの SMB サーバを「パスワード・サーバ」として使用できるようになる。

これらを始めるとき、サーバがどのセキュリティ・レベルなのかを
クライアントに通知すること、また、サーバが暗号化をサポートしているなら、
それをクライアントに通知する点にも注意してほしい。暗号化をサポート
していると、ランダムな「暗号キー(cryptkey)」をクライアントに与える。
するとクライアントは、すべてのパスワードを暗号化した送るようになる。
この機構をサポートするには、Samba を暗号化可能にしてコンパイルし、
SMB 形式の暗号化されたパスワードが入った /etc/passwd とは別の smbpasswd
ファイルを維持しなければならない。UNIX 形式の暗号から SMB 形式の暗号への
変換は、事実上不可能である。一応、2 つのファイルが同期を保てるような、
かなり単純な管理機構が存在する。
