これは Samba 2.0.4 のリリースにともなって追加された 新機能で、Windows NT のクライアントから NT のセキュリティ設定 ダイアログボックスを使用して接続先の UNIX のパーミッションを 見たり変更したりできる。
この機能は、Samba が起動している UNIX ホストのセキュリティを 危険にさらさないよう十分な配慮がなされているし、また、パーミ ッションを変更できるとはいっても、Samba の管理者が設定するフ ァイルのパーミッションの原則にはすべて従うので要注意。
Samba 2.0.4 およびそれ以降では、"nt acl support" の既定値が "false" から "true" に変更されたので、パーミッションの操作はデフォルトで ON になっ ている。
Samba の共有でファイルのパーミッションを見るには
------------------------------------------
NT 4.0 のクライアントから、Samba 経由でマウントしたドライブ文字や、
UNC パス内にあるファイルやディレクトリのところで、マウスの右ボタンを
クリックする。メニューが現われたら、一番下のエントリ プロパティ
をクリックする。通常のファイルのプロパティダイアログボックスが現れる
が、Samba 2.0.4 では、上部に セキュリティ
という新たな
タブがあるはずである。このタブをクリックすると、アクセス権 、
監査および所有権という 3 つのボタンがあるはずである。監査
ボタンを押すと、NT の Administrator としてログオンしてない時には
"クライアントは要求された特権を保有していません"
というエラーが
出るし、Administrator でログオンした時はファイルに監査の要求を
追加するためのダイアログが現われる。このダイアログは、現時点では
Samba の共有については機能しない。なぜなら、唯一意味のある 追加
ボタンを押しても、現時点ではユーザのリストを表示してくれないからである。
ファイルの所有者を見る
----------------------
"所有権"
ボタンを押すと、ダイアログボックスが開いて、その
ファイルの所有者を表示する。所有者の名前は、以下のような形式
で表示される。
"サーバ\所有者 (長い名前)"
ここで、サーバ
は Samba サーバの NetBIOS 名、ユーザ
は
ファイルを所有する UNIX の方のユーザ名で、(長い名前)
はユーザ
を識別するための詳細な説明である (通常、UNIX システムのパスワード
データベースの GECOS フィールドに書かれているものである)。このダイ
アログを消すには、閉じる
ボタンを押す。
パラメータ "nt acl support"
が "false" に設定されていると、ファイルの所有者は NT のユーザ
"Everyone"
として表示される。
所有権の取得
ボタンをクリックして、ファイルの所有者を自分に
変更することはできない (NT クライアントにログオンしているユーザ
がみつからないというダイアログボックスが表示される)。これは、フ
ァイルの所有者を変更するには UNIX では特権が必要で、root ユ
ーザだけが行えるものだからである。このボタンをクリックすると、NT
はファイルの所有者を現在 NT クライアントにログオンしているユーザ
に変更しようとするが、現時点の Samba ではこの機能は動作しない。
Samba で動作する NT の chown コマンドが存在している。これを使えば、 Samba 2.0.4 サーバに root として接続した Administrator 権限を有す るユーザが、ローカルの NTFS ファイルシステム、あるいはリモートの NTFS または Samba のいずれに存在するファイルでも、所有者を変更でき るようになる。これは Samba Team の Jeremy Allison が書いた Seclib NT セキュリティライブラリの中に含まれており、主要な Samba の ftp サイトから入手可能である。
ファイルあるいはディレクトリのパーミッションを見る
-------------------------------------
3 番目のボタンは "アクセス権"
である。このボタンをクリック
すると、ファイルあるいはディレクトリのパーミッションと所有者
を表示するダイアログボックスが現われる。所有者は以下の形式で
表示される。
"サーバ\ユーザ (長い名前)"
ここで、サーバ
は Samba サーバの NetBIOS 名、ユーザ
は
ファイルを所有する UNIX の方のユーザ名で、(長い名前)
はユーザ
を識別するための詳細な説明である (通常、UNIX システムのパスワード
データベースの GECOS フィールドに書かれているものである)。
パラメータ "nt acl support"
が "false" に設定されていると、ファイルの所有者は NT のユーザ
"Everyone"
として、パーミッションは NT の "フルコントロール"
と
して表示される。
パーミッションフィールドの表示は、ファイルとディレクトリで異なる。 そこで、最初にパーミッションが表示される様式を説明することにする。
ファイルのパーミッション
----------------
標準的な UNIX のユーザ/グループ/その他のセットと、対応するパーミ
ッションの「読み取り」、「書き込み」、「実行」のセットは、Samba
により 'r'、'w'、'x' ビットを相当する NT のパーミッションにマップ
して、NT ACL の 3 つの要素にマップされる。UNIX の「その他」のパー
ミッションは NT の全グループを意味する Everyone
にマップされ、
UNIX の「その他」に許可されたパーミッションのリストがその後に表示
される。UNIX の所有者とグループのパーミッションはそれぞれ NT の
user
アイコンと local group
アイコンとして表示され、UNIX
のユーザおよびグループに許可されたパーミッションのリストがその後
に表示される。
UNIX のパーミッションの多くは、標準的な NT のアクセス権である
"読み取り"
、"変更"
あるいは "フルコントロール"
に
はマップできない。そのため NT が表示するリストには "特殊なアクセス権"
という文字がパーミッションの頭に付く。
では、UNIX の特定のユーザ、グループ、あるいはその他にファイルの
パーミッションがなかったら何が起こるであろうか? 「パーミッションなし」
の状態でも、アクセス権の列挙や修正を可能にするために、Samba は NT の
"所有権の取得"
ACL 属性 (UNIX では意味を有しない) を上書きし、
パーミッションなしのオブジェクトについても、NT の "O"
ビットが
セットされていると報告する。これは単に、ゼロパーミッションということ
を意味するために、0 に似た O を選んだだけである。このことについての
詳細は、以下で説明する。
ディレクトリのパーミッション
---------------------
NT の NTFS ファイルシステムにおけるディレクトリは、2 種類の
パーミッションの組合せを有する。1 つ目は、ディレクトリそのもの
の ACL の組合せで、これは通常の NT のスタイル、"RW"
のように
表示される。1 番目の丸括弧で括られたものである。この 1 つ目のパ
ーミッションの組合せは、Samba により通常のファイルのパーミッショ
ンのように作成され、同様に表示される。
2 つ目のディレクトリのパーミッションは、UNIX のパーミッションでは
実質の意味はない。このディレクトリ内で作成されるファイルがパーミッ
ションを継承する、という意味で "inherited"
と表す。
Samba は NT のために、共有上で Samba により新たに作られるファイル の UNIX のパーミッションモードを NT のACL として返すことによって、 これらの継承されたパーミッションをつくり出す。
ファイルやディレクトリのパーミッションを変更する
---------------------------------------
ファイルやディレクトリのパーミッションを変更するには、ダイアログ
ボックス内に表示されているパーミッションを変更し、OK
ボタン
をクリックするだけである。しかし、ユーザが意識しておくべき制限が
あるし、さらに考慮しておく必要のある点として、Samba の標準的なパ
ーミッションマスクと DOS のファイル属性マッピングとの相互作用が
ある。
パラメータ "nt acl support"
が "false" にセットされている場合、パーミッションを設定しようとする
と、"アクセスが拒否されました"
というメッセージが出て失敗する。
まず最初に触れておかなければならないことは、Samba 2.0.4 では
"追加"
ボタンをクリックしてもユーザのリストを返さないことである
(リモートプロシージャプロトコル (RPC) でプロトコルエラーが発生しました
というエラーメッセージが現れる)。すなわち、ダイアログ
ボックスに表示されている、現時点でのユーザ/グループ/その他のパーミッ
ションだけを操作できる、ということである。これらは、UNIX が実際に
持っているパーミッションだけなので、まったく問題なく動作する。
ユーザ、グループ、あるいはその他に対するパーミッションを、NT の
ダイアログボックスのパーミッションリストから削除して "OK"
ボタンをクリックすると、UNIX 側では「パーミッションなし」
として処理される。再度パーミッションを見ると、「パーミッション
なし」のエントリは、先に述べたように NT の "O"
フラグとして
現われる。こうしておけば、一旦ファイルあるいはディレクトリの
パーミッションセットのいずれかを削除してしまっても、元に戻すこと
ができるというわけである。
UNIX は NT ACL のうち、"r"、"w"、"x" だけをサポートしている ので、例えば "Delete access" のような NT のセキュリティ属性を 追加したとしても、Samba サーバの場合は無視されてしまう。
ディレクトリのパーミッションを設定する際、2 番目のパーミッション
セット (2 番目の丸括弧に入っているもの) は、デフォルトでディレク
トリ内にあるすべてのファイルに適用される。これがあなたの望む動作
ではない場合は、"OK"
ボタンをクリックする前に、NT のダイアロ
グボックス内の "既存ファイルのアクセス権を置き換える"
チェック
ボックスのチェックを外しておかなければならない。
ユーザ/グループ/その他のいずれかからすべてのパーミッションを
削除したいのなら、取り除きたいものを指定して "削除"
ボタン
をクリックするか、あるいは "特殊なディレクトリアクセス権..."
の中の "所有権の取得"
だけを有効にする。
Samba の標準 create mask パラメータとの相互作用
----------------------------------------------------------
Samba 2.0.5 では、この相互作用に対して 4 つの新しいパラメータが 追加された。それらは以下の通りである。
security mask
force security mode
directory security mask
force directory security mode
"OK"
ボタンをクリックしてパーミッションを適用すると、Samba
は指定されたパーミッションを ユーザ/グループ/その他、r/w/x の
セットにマップし、ファイルの変更されたパーミッションをパラメータ
"security mask"に設定され
たビットと照合する。このパラメータ中で '1' に設定されていない部分
の変更は、反映されない。
本質的に、"security mask" に おいて 0 のビットは、ユーザによる変更が許可されないものとして扱 われ、一方 1 のビットは変更が許可される。
このパラメータが明示的に設定されない場合は、このパーミッション変更機能 が導入された Samba 2.0.4 との互換性維持のため、"create mask" と同値に設定される。ファイルの ユーザ/グループ/その他のパーミッション すべてを、ユーザが変更できるようにするには、このパラメータを 0777 に設 定する。
続いて、Samba はファイルの変更されたパーミッションをパラメータ "force security mode" に設定されたビットと照合する。このパラメータで '1' に設定された ビットに相当するパーミッションのビットは、強制的にセットされる。
本質的に、パラメータ "force security mode" に設定されたビットは、ファイルのパーミッションを変更した際に必ずセッ トされるビットの集合として扱われる。
このパラメータが明示的に設定されない場合は、このパーミッション変更機能 が導入された Samba 2.0.4 との互換性維持のため、パラメータ "force create mode" と同値に設定される。 ファイルのユーザ/グループ/その他のパーミッションすべてを、ユーザ が制限なしに変更できるようにするには、このパラメータを 000 に設定する。
パラメータ "security mask" および "force security mode" は、この順でパーミッション変更の要求に適用される。
ディレクトリについては、Samba は以下の点を除いては、ファイルの場合と 同様な動作をする。すなわち、パラメータ "security mask" の代わりに "directory security mask" を使用し、また、パラメータ "force security mode" の代わりに "force directory security mode" を使用する。
パラメータ "directory security mask" は、デフォルトでは "directory mask" と同値に設定され、パラメータ "force directory security mode" は デフォルトでは "force directory mode" と同値に設定される。これは、パーミッション変更機能が導入された Samba 2.0.4 との互換性維持のためである。
このように、管理者が Samba の共有に設定するパーミッションの制限を Samba は強制しつつ、一方でユーザはその制限内でパーミッションを変更 することが可能である。
ユーザがファイルおよびディレクトリのパーミッションをすべて制御できる ようにし、さらにビットの強制的な設定を一切指定しないように共有を設定 するには、共有の目的とするセクションで、 smb.conf.5 中の以下のパラメータを設定 してください。
security mask = 0777
force security mode = 0
directory security mask = 0777
force directory security mode = 0
すでに述べたように、Samba 2.0.4 では今まで紹介したパラメータとは異なる
create mask
force create mode
directory mask
force directory mode
が使用された。
Samba の標準的なファイル属性マッピングとの相互作用
----------------------------------------------------------
Samba は DOS の属性ビット ("読み取り専用" など) のうちいくつかを UNIX のファイルのパーミッションにマップする。このことは、 セキュリティダイアログで設定されたパーミッションビットと、 ファイル属性マッピングにより設定されたパーミッションビットの間 で、不整合が生じるかもしれないということを意味する。
これが起き得る例の一つには、ファイルの所有者に対する UNIX の 読み取り権がないのに、「全般」のファイル属性のタブの方で現わ れるダイアログには「読み取り専用」と表示されてしまう、というも のがある。不幸にも、このダイアログは別のタブのセキュリティ情報 を含むダイアログと同一である。
このことは、所有者がセキュリティダイアログを使って読み取り権
を許可するようパーミッションを変更し、"OK"
ボタンをクリッ
クした後に「全般」タブの方のダイアログに戻り、そのダイアログ
の "OK"
ボタンをクリックしてしまうと、NT はファイルの
パーミッションを「読み取り専用」に戻してしまうことになる (な
ぜなら、ダイアログの中では「読み取り専用」属性のままになって
いるからである)。そのため、パーミッションを設定し、"OK"
を
クリックして属性ダイアログに戻ったなら、変更が無効になって
しまわないように "OK"
ではなく、"キャンセル"
の方を
クリックするようにすればよい。