0

0

C#文件系统ACL继承 C#如何管理文件夹权限的继承规则

畫卷琴夢

畫卷琴夢

发布时间:2026-03-11 11:36:17

|

526人浏览过

|

来源于php中文网

原创

关键在于正确设置filesystemaccessrule的inheritanceflags和propagationflags:containerinherit与objectinherit组合实现子文件夹及子文件继承,propagationflags.none启用标准递归传播;同时需确保父目录未启用areaccessrulesprotected保护,否则继承链中断。

c#文件系统acl继承 c#如何管理文件夹权限的继承规则

如何用 DirectorySecurity 设置文件夹的 ACL 继承标志

关键在于控制 FileSystemAccessRuleInheritanceFlagsPropagationFlags,而不是简单调用 AddAccessRule 就完事。默认情况下,新添加的规则不会自动继承到子项,必须显式指定。

  • InheritanceFlags.ContainerInherit:让规则应用到子文件夹
  • InheritanceFlags.ObjectInherit:让规则应用到子文件
  • 两者同时设置(用 | 连接)才能覆盖“子文件夹 + 子文件”
  • PropagationFlags.None:标准继承(子项会继续向下传播)
  • PropagationFlags.NoPropagateInherit:仅作用于直接子项,不递归传播

示例:给 C:Shared 添加一个对 DOMAINUsers 的读取权限,并让该权限继承到所有子文件和子文件夹:

var dirSec = Directory.GetAccessControl(@"C:Shared");
var rule = new FileSystemAccessRule(
    "DOMAIN\Users",
    FileSystemRights.Read,
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
    PropagationFlags.None,
    AccessControlType.Allow);
dirSec.AddAccessRule(rule);
Directory.SetAccessControl(@"C:Shared", dirSec);

IsProtectedAreAccessRulesProtected 的区别与误用风险

这两个布尔值常被混淆,但含义完全不同:AreAccessRulesProtectedDirectorySecurity 的属性,表示当前 ACL 是否已禁用继承(即是否“被保护”);而 IsProtectedFileSystemAccessRule 实例的只读属性,**永远为 false** —— 它在 .NET 中没有实际意义,不要依赖它判断规则状态。

  • 要关闭继承(阻止父级 ACL 流入),设 dirSec.SetAccessRuleProtection(true, false)
  • 第一个参数 true 表示“保护”,即禁用继承;第二个参数 false 表示“不清除现有 ACE”,保留当前显式设置的规则
  • 若设为 (true, true),会清空所有继承来的规则,只留下手动添加的规则
  • 错误做法:检查某条规则的 IsProtected 来判断它是否继承 —— 这个值恒为 false,毫无参考价值

为什么子文件夹没继承权限?常见三类原因

即使设置了正确的 InheritanceFlags,子项仍无权限,大概率是以下其一:

Moshi Chat
Moshi Chat

法国AI实验室Kyutai推出的端到端实时多模态AI语音模型,具备听、说、看的能力,不仅可以实时收听,还能进行自然对话。

下载
  • 父文件夹的 ACL 本身被设为“受保护”(AreAccessRulesProtected == true),导致继承链中断
  • 子文件夹自己也被设为“受保护”,覆盖了父级下发的继承规则
  • 权限被更高级别的拒绝规则(Deny)覆盖 —— 注意:Windows 中 Deny 优先级高于 Allow,且拒绝规则同样可继承

排查建议:用 icacls "C:Shared" /t /c 命令行查看完整继承树,比 C# 的 GetAccessControl 更直观;或用 Get-Acl PowerShell cmdlet 配合 | Format-List 查看 AreAccessRulesProtected 和每条 AccessIsInherited 属性。

递归应用继承规则时的性能与权限覆盖陷阱

调用 SetAccessControl 不会自动递归更新子项 —— 它只改当前目录的 DACL。想让整个树生效,必须手动遍历,但要注意副作用:

  • 对每个子目录重复调用 SetAccessControl 会重置其原有 ACL,可能意外清除他人添加的权限
  • 更安全的做法是:先用 GetAccessControl 获取子项 ACL,再用 ModifyAccessRuleAddAccessRule 增量更新,避免全量覆盖
  • 大量子项时,频繁调用 SetAccessControl 易触发 UAC 提权失败或 IO 瓶颈;建议批量处理前加 try/catch 捕获 UnauthorizedAccessExceptionIOException
  • 注意:某些系统文件夹(如 C:Program Files)默认拒绝普通用户写 ACL,即使你是管理员组成员,也需确保进程以“提升权限”方式运行

继承不是魔法,它是靠每个对象的 AreAccessRulesProtected 状态 + 每条规则的 InheritanceFlags 共同计算出来的结果。任何一环被手动干预,整条链就断了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

887

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

459

2024.06.27

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1476

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1169

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

835

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

462

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2361

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

874

2023.08.10

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.1万人学习

C 教程
C 教程

共75课时 | 5.3万人学习

C++教程
C++教程

共115课时 | 21.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号