[samba-jp:19194] Windows Vista バックアップでエラー
h-wada @ pi.jp.nec.com
h-wada @ pi.jp.nec.com
2007年 1月 26日 (金) 18:11:42 JST
和田と申します。
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;
==================================================
以上です。
samba-jp メーリングリストの案内