![]() |
Using SambaRobert Eckstein, David Collier-Brown, Peter Kelly 共著第一版 1999 年 11 月 1-56592-449-5, 注文番号: 4495 416 ページ, 34.95 ドル ハードコピー版(英語)を購入する |
6.3 認証とセキュリティ
ここでは、Samba がどのようにしてユーザを認証するのかについて説明する。ゲストアクセスが許可されていない共有に接続しようとする各ユーザは接続を行うためにパスワードを送信する必要がある。Samba がパスワードをどのように扱うか、すなわち Samba がユーザ認証をどのように行うかは、
security
設定オプションで設定される。現在 Samba には share, user, server, domainという 4 つのセキュリティレベルが存在する。
- 共有レベルのセキュリティ
ワークグループ内の各共有には一つ以上のパスワードがつけられる。共有のパスワードを知っているユーザは誰でもアクセスが可能である。
- ユーザレベルのセキュリティ
ワークグループ内の各共有は、指定されたユーザだけがアクセス可能なように設定される。最初の tree connection の時点で、Samba サーバは共有にアクセスを許可するために、ユーザ名とパスワードを確認する。
- サーバレベルのセキュリティ
これは、ユーザレベルのセキュリティと同等であるが、Samba サーバは、共有へのアクセスを許可する際に別の SMB サーバを利用してユーザ名とそのパスワードを認証する。
- ドメインレベルのセキュリティ
Samba は Windows ドメインのメンバとなり、認証を行う際にドメインのプライマリドメインコントローラ(PDC)を利用する。認証が行われると、ユーザは適切なアクセス権を持っていることを示す特別なトークンを受け取る。このトークンを用いることで、ドメイン内の別の共有に接続する度に、PDCがユーザのパスワードを認証し直す必要がなくなる。
このセキュリティポリシーは、 表 6.3に示したように、グローバルな
security
オプションで設定される。
表 6.3: セキュリティオプション オプション
パラメータ
機能
デフォルト
範囲
security
domain
,server
,share
, oruser
Samba サーバが利用するセキュリティのタイプを指定する
user
(Samba 2.0)、share
(Samba 1.9)グローバル
6.3.1 共有レベル(share)のセキュリティ
共有レベルのセキュリティを用いた場合、各共有に対して一つ以上のパスワードが割り当てられる。他のセキュリティモードとの違いとして、正しいパスワードを知っている限り共有にアクセスできるユーザに制限がないことがあげられる。共有には複数のパスワードを割り当てることもできる。例えば一つのパスワードは読み込み専用であり、別のものは読み書きアクセスを可能とするようなことができる。セキュリティは認証されるべきでないユーザが共有に対するパスワードを発見しないことに掛っている。
OS/2 と Window 95/98 は自身のリソースを公開する際に、共有レベルのセキュリティをサポートしている。Windows 95/98 では、コントロールパネルの[ネットワーク]にある[アクセス制御]タブを利用して共有レベルのセキュリティを有効にすることで、セキュリティを構成することが可能である。 図 6.1のように共有レベルのアクセスというラジオボタンを選択して、(これにより、ユーザレベルのアクセス制御のラジオボタンは非選択になる) OK ボタンを押すこと。
図 6.1: Windows マシンで共有レベルのセキュリティを選択する
次にハードディスクやCD-ROM等のリソースを右クリックして、メニューからプロパティを選択する。これにより、リソースのプロパティダイアログボックスが表示される。ここでダイアログボックスの上部にある「共有」タブを選択し、共有したいリソースを有効にする。ここで共有するリソースを読み込み専用にするか、読み書き可能にするか、あるいは両方にするかといった方式を設定する。どの方式を用いるかはパスワードの設定の仕方による。
このセキュリティモデルはSambaとは相性が悪いのではないかと考えられたかもしれないが、恐らくその通りである。実際、Sambaの設定ファイルで
security
=
share
オプションを設定した場合でも、結局のところSambaは認証の過程でシステムのパスワードファイルに存在するユーザ名とパスワードの組を利用することになる。詳しく説明すると、共有レベルのセキュリティを用いている場合にクライアントからの接続要求があった場合、Sambaは以下のように処理を行う:
共有が
guest
only
の時は、ユーザはその共有にguest
account
パラメータで指定されたユーザとしてアクセスする権限を直ちに獲得する。パスワードのチェックは行われない。それ以外の場合、Sambaはユーザ名を共有にアクセスを許可されたユーザのリストに追加し、与えられたパスワードを各々のユーザ名と組み合わせて認証を行う。成功した場合、Sambaは共有に対して認証に成功したユーザとしてアクセスする権限を獲得する。
revalidate
=
yes
オプションが共有に対して設定されていない限り、ユーザがこの認証を再度行う必要はない。認証に失敗した場合、Samba は設定ファイルの共有の設定で記述されたユーザと同様に、接続試行時に入力されたユーザを用いて認証を試みる。パスワードが(システムのパスワードファイル、通常 /etc/passwdに存在する)どのユーザ名とも合致しなかった場合、ユーザはそのユーザ名では共有へのアクセス権を獲得できない。
ただし、共有に対して
guest
ok
かpublic
オプションが設定されていると、ユーザはデフォルトでguest
account
オプションに設定されたユーザの権限でのアクセスが可能になっている。
username
設定オプションを用いることで、共有レベルセキュリティで用いるユーザのリスト中の順番を以下に示すようにして指定できる:[global] security = share [accounting1] path = /home/samba/accounting1 guest ok = no writable = yes username = davecb, pkelly, andyo上記では、ユーザが共有への接続を試みると、Samba は送信されたパスワードを リスト中の各ユーザのものと確認する
davecb
,pkelly
,andyo
のパスワードとだけでなく、Samba 自身の保持するリスト中のユーザとも確認を行う。誰かのパスワードが合致すれば、接続は認証され、許可される。さもなくば、その共有への接続は失敗する。6.3.1.1 共有レベルのセキュリティオプション
表 6.4に、通常共有レベルのセキュリティと一緒に設定されるオプションを示す。
表 6.4: 共有レベルのアクセスオプション オプション
パラメータ
機能
デフォルト
範囲
only user
真偽値
username
で指定されたユーザ名だけで認証を行うかどうかを設定する
no
共有
username
(user または users)文字列(ユーザ名のリスト)
クライアントから送信されたパスワードをテストするユーザのリストを設定する
なし
共有
6.3.1.2 only user
この真偽値オプションにより、Sambaは、
username
オプションで設定されたユーザだけに基づいて、共有レベルのセキュリティを用いた共有への接続を制御するようになる。このオプションのデフォルトはno
である。このオプションは共有毎に以下のようにして設定を変更することができる:[global] security = share [data] username = andy, peter, valerie only user = yes6.3.1.3 username
このオプションにより、Samba が接続を認証するさいにパスワードをテストするユーザのリストを指定できる。通常このオプションは共有レベルのセキュリティを用いているため、ある共有への接続の認証をパスワードに基づいて行うクライアントに対して用いられる。 この場合パスワードと合致したユーザとして認証される:
[global] security = share [data] username = andy, peter, terrySambaサーバを共有レベルのセキュリティで運用したい場合以外は、このオプションを利用することは推奨できない。
6.3.2 ユーザレベルのセキュリティ
Sambaにとって好ましいセキュリティのモードが ユーザレベルのセキュリティである。この方式を用いると、各共有はアクセス権のあるユーザ個々に対して提供される。ユーザが共有へ接続しようとすると、Samba は送信されてきたユーザ名とパスワードを設定ファイルに記述されたアクセスを許可されたユーザとSambaサーバ上のパスワードデータベースにあるユーザのパスワードと比較して認証を行う。本章で記述したように、特定の共有にアクセス可能なユーザを制限する方法の一つとして
valid
users
オプションを各共有毎に設定する方式が利用できる:[global] security = user [accounting1] writable = yes valid users = bob, joe, sandy列挙されたユーザは入力したパスワードがサーバ上のパスワードデータベースに格納されているものと合致すれば、共有への接続が可能になる。最初の認証が成功すれば、ユーザは、
revalidate
=
yes
オプションが設定されていない限り、その共有へアクセスする際にパスワードを再度入力する必要はなくなる。パスワードを Samba サーバに送る際には暗号化、非暗号化のいずれの形式でも可能である。ネットワーク上に両方の形式のシステムが存在する場合は、各ユーザのパスワードを従来のアカウントデータベースと Samba の暗号化パスワードデータベースの両方に格納しておく必要がある。このようにして、認可されたユーザについては、どのようなクライアントからであっても共有へのアクセスが可能となる。[1] ただし、セキュリティの観点からは非暗号化パスワードの利用をやめ、暗号化パスワードに移行することを推奨する。本章の Section 6.4 セクションで、暗号化パスワードおよび非暗号化パスワードをどのように利用するかについての説明がある。
[1] 暗号化パスワードのクライアントと非暗号化パスワードのクライアントの両方がネットワーク上に存在する場合も考慮して、Samba の設定ファイルにはクライアントのOSやマシン名を示す変数をさまざまなオプションで用いることが可能である。
6.3.3 サーバレベルのセキュリティ
サーバレベルのセキュリティは、ユーザレベルのセキュリティに類似しているが、サーバレベルのセキュリティの場合、Sambaはパスワードの認証を別のSMBパスワードサーバ、通常は別のSambaサーバかネットワークでPDCとして機能するWindows NT Serverに委任する。この状態でも共有の設定に付いては、Samba の smb.conf ファイル中で設定が保持される。クライアントが特定の共有に対して接続を行なおうとすると、Sambaはユーザが共有に接続する権限があるかどうかを認証する。Sambaはパスワードの認証を、規定のプロトコルでユーザ名とパスワードをSMBパスワードサーバに対して送信して行う。パスワードが受け付けられた場合、クライアントとのセッションが開始される。 図 6.2 に図示したので参照してほしい。
図 6.2: サーバレベルのセキュリティを用いた場合の典型的なシステム
password
server
グローバル設定オプションを以下のように利用することで、サーバレベルのセキュリティにおいても複数のパスワードサーバを用いるように Samba を設定することが可能である:[global] security = server password server = PHOENIX120 HYDRA134
password
server
として複数のマシンを指定することが可能であるが、この場合 Samba はサーバとの通信が行えなかった場合にリストを上から順にたどることになる。password
server
オプションで指定されるサーバ名としては、DNS 名や IP アドレスでなく、NetBIOS 名を指定する必要がある。またいずれかのサーバが送信したパスワードを拒否したら、コネクションが自動的に失敗となる - Samba は別のサーバと認証を行おうとはしない。One caveat: このオプションを用いる場合でも、依然として Samba サーバ上にはユーザを識別するアカウントが必要である。これは UNIX が様々な操作を行う際に、ユーザ名を必要とするためである。これを実現する方法としては Samba サーバ上にアカウントは作成するが。システムパスワードファイル(例えば /etc/passwd ) 中の該当欄をアスタリスク(*)に置き換え、アカウントを無効にしてしまう方法がよいであろう。
6.3.4 ドメインレベルのセキュリティ
ドメインレベルのセキュリティはサーバレベルのセキュリティと類似している。ただしドメインレベルのセキュリティでは、SambaサーバはWindowsドメインのメンバとして機能する。第1章で、各ドメインには通常Windows NT Serverの ドメインコントローラが存在して、パスワード認証を提供していると説明したことを思い出してほしい。ドメインコントローラ機能を提供することで、ワークグループに対して信頼できるパスワードサーバの機能を提供する。ドメインコントローラは、ユーザとパスワードを自身のセキュリティ認証モジュール(SAM)の中に記録し、ユーザが別のマシンの共有に接続しようとしてログオンしてきた時には、個々のユーザを認証する。
既に本章で説明したように、Samba にはユーザレベルのセキュリティの提供という同等の機能がある。しかし、これは UNIX 主体のものであり、認証は UNIX のパスワードファイルで行われるという前提のものである。UNIX マシンが NIS や NIS+ ドメインに所属している場合、Samba は通常のUNIXの方式にしたがって、共有パスワードファイルに対して、透過的にユーザを認証する。こうして Samba は Windows から NIS や NIS+ ドメインへのアクセスを提供する。もちろん NIS のドメインの概念と Windows のドメインの概念とに関係はない。
ドメインレベルのセキュリティにより、やっとのことで本来のNTの機構を用いた様々なオプションが利用可能になる。これは様々な利点をもたらす:
NTとの更なる統合を実現する: 他のWindowsの機能と比べると、ドメインを扱う smb.conf のオプションのNTとの親和性は高い。このため、ドメインユーザマネージャのようなNTの管理ツールの利用が可能であり、PC管理者からみると、Sambaサーバが大規模なNTマシンであるかのように扱うことを可能にしている。
よりよい統合によって、Samba チームがNTの実装の発展に追随することが可能となり、プロトコルとコードの整理が達成される。NT Service Pack 4 でプロトコル上のいくつかの問題点が改善されたため、Sambaを統合することで、これらの変更への追随と対応が容易になる。
Sambaサーバとの間に定常的なコネクションを必要としないため、PDCのオーバーヘッドが削減される。
security
=
server
オプションの時に用いられるプロトコルとは異なり、Samba サーバは認証情報が必要なときだけに Remote Procedure Call (RPC) を発行する。そのため、定常的なコネクションを維持する必要がない。最後の点として、 NTドメインの認証機構は認証の可否だけではなく、ユー ザ属性のフルセットを返却する。この属性にはUNIXのuidが長い桁数になると主にネットワーク対応したような値が含まれる。これには以下のようなものが含まれる:
Sambaの開発者はSamba 2.0.4から、Sambaサーバ上のドメインユーザを半自動的に作成や削除する方式をドメインレベルのセキュリティで実装した。更にアクセスコントロールリストやクライアントからのファイルアクセス権の変更機能の提供といったNTと同様の各種機能追加も行なわれている。
この方式の利点は管理作業の低減にある。同期を保つのに必要なのは、たった一つの認証データベースだけである。Sambaサーバ上で必要な管理作業はユーザの作業用ディレクトリとUIDと所属グループの情報を保持するために /etc/passwd へのエントリを作成するだけである。
6.3.4.1 SambaサーバをWindows NTドメインに追加する
既にNTドメインが存在する場合、Sambaサーバを簡単に追加することが可能である。最初に、Sambaサーバを停止する必要がある。次に「サーバマネージャ」を利用してSambaサーバをNTドメインに追加する。コンピュータの役割は「Windows NT WorkstationもしくはServer」を選択し、SambaサーバのNetBIOS名を記述する。これによりNTサーバ上にマシンアカウントが作成される。
次に smbpasswd ツールを利用して、Microsoft形式のマシンパスワードを生成する。このツールについての詳細は、次のセクションで詳細に解説する。一例として、ドメイン名がSIMPLEであり、Windows NTのPDCが
beowulf
の時に、Sambaサーバを追加するために用いるコマンドを示す:smbpasswd -j SIMPLE -r beowulf
最後に以下のオプションを smb.confの
[global]
セクションに記述して、Sambaデーモンを開始する。[global] security = domain domain logins = yes workgroup = SIMPLE password server = beowulfこれでSambaはドメインレベルのセキュリティで構成された筈である。
domain
logins
オプションについてはこの章の後半で詳細に説明する。
© 1999, O'Reilly & Associates, Inc.