首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与、Set和Network文件夹有关的问题

与、Set和Network文件夹有关的问题
EN

Stack Overflow用户
提问于 2012-03-15 00:19:13
回答 2查看 5.4K关注 0票数 0

我正在使用一些PowerShell代码来动态生成AD安全组,然后将它们应用到网络共享上的文件夹中,但在解决新创建的组时遇到了问题。

考虑到这一点:

代码语言:javascript
复制
import-module activedirectory

for ($i = 0; $i -lt 10; $i++) {

  $group = New-ADGroup -Path "OU=Groups,OU=Department,DC=Domain,DC=Network" -Name "z-test-group-$i" -GroupScope DomainLocal -GroupCategory Security -PassThru
  $acl = Get-Acl C:\Temp
  $permission = $group.SID,"FullControl","Allow"
  $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
  $acl.SetAccessRule($accessRule)
  $acl | Set-Acl C:\Temp

}

效果很好。

但是,如果我将该文件夹更改为网络文件夹(如G:\Temp或\domain.network\DFS\GroupShare\Temp ),则会得到一个“方法失败,错误代码为1337”。

我厌倦了使用SetACL.exe,并收到了类似的错误:

代码语言:javascript
复制
C:\Temp\SetACL.exe -on "\\domani.network\dfs\GroupShare\Temp" -ot file -actn ace -ace "n:$GroupSID;p:full;s:y"

SetACL finished with error(s): 
SetACL error message: The call to SetNamedSecurityInfo () failed
Operating system error message: The security ID structure is invalid.
INFORMATION: Processing ACL of: <\\?\UNC\domain.network\dfs\GroupShare\Temp>

如果我等待10到20秒,然后再次运行代码的Set-ACL (或SetACL.exe)部分,它将成功完成。

起初,我认为这与域控制器(其中4个是2003年和2008年R2的混合体)直接相关,但它在本地文件夹上工作得很好这一事实很有趣(而且令人讨厌)。

在执行本地文件夹和网络文件夹的代码时,我做了一个Wireshark跟踪。主要区别在于,当试图将ACL应用到网络文件夹时,我看到LDAP查找和(除其他外)以下SMB响应:

代码语言:javascript
复制
NT Trans Response, FID: 0x0040, NT SET SECURITY DESC, Error: STATUS_INVALID_SID

这就是导致我的Set命令失败的原因。

底层网络文件系统是EMC Celerra 6.0.xx。我对这一技术非常陌生,但据我所知,它拥有某种SID缓存,这将解释上述错误(尽管AD还不知道新的组)。

所以我想有两个问题:

  1. 有什么办法可以避免这种情况(PowerShell/C#等)不涉及睡眠/等待吗?即使SID无效,也要设置ACL?
  2. 如果EMC塞拉是问题所在(我想是这样),我有没有办法强迫它更新它的“SID缓存”或其他什么?

我有朗读 五花八门 文章关于这个问题,但似乎没有一个有效的解决方案(或为我工作)。

谢谢你的帮助。

里斯。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-15 22:39:25

弄明白了!

修改了我们的电磁兼容塞拉NAS的acl.mappingErrorAction

设置为0,将其更新为1。

server_param server_2 -facility cifs -modify acl.mappingErrorAction -value 1

现在,我们在将新创建的安全组设置为网络共享上的文件夹的ACL(没有延迟)方面没有问题。

信息: acl.mappingErrorAction

定义ACL设置上的安全、用户和组标识符(SID/UID/GID)之间的未知映射规则。

可能会发生两种错误: ACL中的SID集对于正在使用的域控制器来说是未知的。用户名尚未映射到UID/GID。

位列表由四个二进制位组成(从0到3,从右到左)。每一位设置为1,否则为0。

代码语言:javascript
复制
Bit 0 (0001 or +1): Store unknown SID.
Bit 1 (0010 or +2): Store SID with no UNIX mapping.
Bit 2 (0100 or +4): Enable debug traces.
Bit 3 (1000 or +8): Do lookup only in cache (secmap or global SID cache or per connection SID cache).

值:0- 15默认值:0

现在我对NAS上的基本CIFS/ACL设置有了更多的了解,这似乎是显而易见的,那时我想知道。

里斯。

票数 0
EN

Stack Overflow用户

发布于 2012-03-15 03:13:33

如果问题仅仅是等待缓存更新所涉及的延迟,阻止其他工作,那么脚本需要做的事情,您可以将它发送到后台作业,然后让您的主脚本继续进行其他工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9712311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档