2007年1月26日

[samba-jp:19194]Windows Vista バックアップでエラー

和田と申します。

Windows Vista のWindows バックアップで共有上のファイルの
バックアップを実行すると、一時フォルダらしきものの生成で
下記障害となることが分かりました。


原因と思われるものとあわせて報告させていただきます。


# なお、posix acl は利用不可の環境のため、posix acl利用による解決は
# 想定(期待)していません。

・Windowsクライアントに出るエラーメッセージ
-----
次の理由によりネットワーク共有にアクセスできませんでした
既に存在するファイルを作成することができません。(0x800700B7)
ネットワークの場所が共有であることを確かめてください。
-----

# 一時フォルダは、こういう感じ(↓)の名前で生成されている
# {C13BA881-DE3B-4D4E-9A79-52A5BD12CA3D}

・サーバ側で出ていたエラーログ
convert_canon_ace_to_posix_perms: Too many ACE entries for file ファイル名 to convert to posix perms.


samba(3.0.23d)のソースを見てみたところ、POSIX ACL を利用しない環境では
以下のケースに対応できていないようです。

------------------------------------------
sambaにはSIDが同一のACEをマージする仕組みがあが、Windows Vista
クライアントからは、次のように4つのACEが送られてきており、全て
のSIDが異なるため"ACEエントリが多すぎる"というエラーになる。

・エラーになったときのWindows Vistaクライアントから来たACEリスト

canon_ace index 0. Type = allow SID = S-1-1-0 other SMB_ACL_OTHER perms ---
canon_ace index 1. Type = allow SID = S-1-5-21-2576099160-2903971284-2093301635-513 gid 500 SMB_ACL_GROUP_OBJ perms ---
canon_ace index 2. Type = allow SID = S-1-3-0 uid 1213 SMB_ACL_USER_OBJ perms rwx
canon_ace index 3. Type = allow SID = S-1-5-21-2576099160-2903971284-2093301635-3967 uid 1213 SMB_ACL_USER perms rwx

------------------------------------------

※Windows2003以前でファイルの[プロパティ]→[セキュリティ]で
CREATOR OWNER のACEを追加したときも4つのACEが送られてくるが、
CREATOR OWNER のACEのSIDは接続ユーザのSID に変換(index 0)
されていて、マージの結果3つのACEになるので問題とならない。

canon_ace index 0. Type = allow SID = S-1-5-21-2576099160-2903971284-2093301635-3967 uid 1213 SMB_ACL_USER_OBJ perms rwx
canon_ace index 1. Type = allow SID = S-1-5-21-2576099160-2903971284-2093301635-3967 uid 1213 SMB_ACL_USER perms rwx
canon_ace index 2. Type = allow SID = S-1-5-21-2576099160-2903971284-2093301635-512 gid 500 SMB_ACL_GROUP_OBJ perms r-x
canon_ace index 3. Type = allow SID = S-1-1-0 other SMB_ACL_OTHER perms r--

↓ マージ後

canon_ace index 0. Type = allow SID = S-1-5-21-2576099160-2903971284-2093301635-3967 uid 1213 SMB_ACL_USER_OBJ perms rwx
canon_ace index 1. Type = allow SID = S-1-5-21-2576099160-2903971284-2093301635-512 gid 500 SMB_ACL_GROUP_OBJ perms r-x
canon_ace index 2. Type = allow SID = S-1-1-0 other SMB_ACL_OTHER perms r--

今回の問題に関して、以下のどちらかのアプローチがあると考えます。

(1) SIDが S-1-3-0 (CREATOR OWNER)、S-1-3-1 (CREATOR GROUP)のACEを無視

(2) S-1-3-0 (CREATOR OWNER) SIDを接続ユーザに変換してマージ
S-1-3-1 (CREATOR GROUP) SIDを接続ユーザのプライマリグループに変換してマージ

smbd/posix_acls.c の create_canon_ace_lists() の
"CREATOR OWNER","CREATOR GROUP"を判断しているところで
上記(1),(2)のいずれかを行なえば良いと思われます(下記部分)

"CREATOR OWNER","CREATOR GROUP"も"継承のみ"となっており、
posixのパーミッションに置き換えるときには捨てられるので
(1)のアプローチが良いのでは?と考えています。

==================================================
} else if (sid_equal(¤t_ace->trustee, &global_sid_Creator_Owner)) {
current_ace->owner_type = UID_ACE;
current_ace->unix_ug.uid = pst->st_uid;
current_ace->type = SMB_ACL_USER_OBJ;

/*
* The Creator Owner entry only specifies inheritable permissions,
* never access permissions. WinNT doesn't always set the ACE to
*INHERIT_ONLY, though.
*/

if (nt4_compatible_acls())
psa->flags |= SEC_ACE_FLAG_INHERIT_ONLY;
} else if (sid_equal(¤t_ace->trustee, &global_sid_Creator_Group)) {
current_ace->owner_type = GID_ACE;
current_ace->unix_ug.gid = pst->st_gid;
current_ace->type = SMB_ACL_GROUP_OBJ;

/*
* The Creator Group entry only specifies inheritable permissions,
* never access permissions. WinNT doesn't always set the ACE to
*INHERIT_ONLY, though.
*/
if (nt4_compatible_acls())
psa->flags |= SEC_ACE_FLAG_INHERIT_ONLY;
==================================================

以上です。

投稿者 xml-rpc : 2007年1月26日 18:11
役に立ちました?:
過去のフィードバック 平均:(4) 総合:(9) 投票回数:(2)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/53329
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。