[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(&current_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(&current_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 メーリングリストの案内