You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell配置文件共享ACL时AD组仅获列表权限问题求助

问题成因
  • 核心原因是权限继承标志配置错误:原代码仅指定了ContainerInherit(子容器继承)标志,缺少ObjectInherit(文件对象继承)标志,导致配置的Modify权限无法正确应用到目录本身和目录内的文件,最终系统仅识别到文件夹遍历/列表相关权限。
  • 未处理权限继承冲突:如果目标AD组已经存在从父目录继承来的只读/列表权限,新添加的显式访问控制条目因为继承标志不完整,无法覆盖继承权限,最终合并显示为仅列表权限。
  • SMB共享权限限制:Windows共享访问权限是共享权限与NTFS权限取最严格交集,默认新建共享的共享权限为Everyone只读,即使NTFS层配置了Modify权限,实际访问时也会被共享层拦截为只读。
修正方案
  • 调整继承标志配置:将InheritanceFlags设置为ContainerInherit -bor ObjectInherit,确保权限覆盖当前文件夹、所有子文件夹、所有文件,PropagationFlags保持None即可。
  • (可选)如果需要避免父级继承权限干扰,可在配置ACL前禁用权限继承,将已继承的权限转换为显式权限。
  • 提前确认共享层权限给目标AD组分配了「更改」及以上权限,避免共享层拦截。
修正后代码
$groupname = "group_users"
$fullsharepath = "\\servername\servervol\share"
$identity = "domain\$groupname"

# 获取现有ACL
$acl = Get-Acl $fullsharepath

# 禁用继承(可选,根据需求选择是否启用)
# $acl.SetAccessRuleProtection($true, $true)

# 配置正确的权限:Modify权限,应用到当前文件夹、子文件夹、文件
$fsRights = [System.Security.AccessControl.FileSystemRights]"Modify"
$inheritance = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit" -bor [System.Security.AccessControl.InheritanceFlags]"ObjectInherit"
$propagation = [System.Security.AccessControl.PropagationFlags]"None"
$accessType = [System.Security.AccessControl.AccessControlType]"Allow"

$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
    $identity,
    $fsRights,
    $inheritance,
    $propagation,
    $accessType
)

# 替换同主体同类型的现有权限规则
$acl.SetAccessRule($accessRule)

# 写回权限配置
Set-Acl -Path $fullsharepath -AclObject $acl -Verbose
验证说明

配置完成后,可进入文件夹「属性-安全-高级」查看对应AD组的权限条目,正常应显示:

  • 权限:修改
  • 应用于:此文件夹、子文件夹和文件
    如果访问时仍为只读,需要进入共享「属性-共享-高级共享-权限」,确认目标组有「更改」权限。

内容的提问来源于stack exchange,提问作者Rich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:01:10