SMB セキュリティ・レベルの種類
------------------------------

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

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

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

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

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


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

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

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

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

日本語訳について
----------------
Samba 1.9.16p10 のソースに付属していたものを翻訳しました。
誤訳などについては翻訳者にお知らせください。

    翻訳者:佐藤文優(fumiya@yk.rim.or.jp,fumiya@cij.co.jp)
    日付  :1997年2月24日(月)
