授予特定本地 Windows 用户组对文件夹及其子文件夹的读取权限

Posted

技术标签:

【中文标题】授予特定本地 Windows 用户组对文件夹及其子文件夹的读取权限【英文标题】:Give specific local Windows user group read access to a folder and its subfolders 【发布时间】:2018-06-12 23:52:51 【问题描述】:

我想以编程方式授予本地用户组 <MachineName>\IIS_IUSRS 访问文件夹及其子文件夹的权限。

我当前的代码如下所示:

DirectoryInfo directoryInfo = new DirectoryInfo(path);
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl();

var groupName = Environment.MachineName + @"\IIS_IUSRS";

directorySecurity.AddAccessRule(
    new FileSystemAccessRule(groupName,
    FileSystemRights.Read,
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
    PropagationFlags.None,
    AccessControlType.Allow));

directoryInfo.SetAccessControl(directorySecurity);

但这是在抛出System.Security.Principal.IdentityNotMappedException。将groupName 替换为new SecurityIdentifier(WellKnownSidType.WorldSid, null); 的SID 可以正常工作。

我是否需要为群组获取SecurityIdenfier,如果需要,我该怎么做?还是我需要为团体做完全不同的事情?

编辑:BUILTIN\IIS_IUSRS 也不起作用,因为我使用的是带有德语区域设置的 Windows。

【问题讨论】:

C# code to automatically give IIS write access to a folder on Windows Server 2008? Currently throws exception的可能重复 @AlexK。我发现了这个问题,实际上我得到了通用代码(DirectorySecurity..... 等),但它在我的机器上不起作用(Windows 10 版本 1709)。异常仍然告诉我无法翻译用户。 链接代码使用 BUILTIN 而不是 MACHINENAME 来识别该内置组,BUILTIN\IIS_IUSRS 是否也不起作用? @AlexK。正确。 【参考方案1】:

你不需要使用 SID,我曾经写过一个工作程序,它使用了“DOMAIN\GroupName”,它运行良好。而不是:

var groupName = Environment.MachineName + @"\IIS_IUSRS";

试试:

var groupName = @".\IIS_IUSRS";

【讨论】:

做到了。另一个问题中建议的BUILTIN\IIS_IUSRS 不起作用。 .\IIS_IUSRS 对我来说是 Windows 10 的正确方式。 谢谢。它也适用于我的 Windows Server 2016。

以上是关于授予特定本地 Windows 用户组对文件夹及其子文件夹的读取权限的主要内容,如果未能解决你的问题,请参考以下文章

用java 编写一个程序,在命令行中以树状结构展现特定的文件夹及其子文件(夹)!

授予特定用户对特定(多个)文档的访问权限

S3 存储桶策略授予/限制对特定联合用户的访问权限

授予 iis 应用程序对系统文件夹的权限

如何为 cPanel 中特定子域的用户授予 SSH 访问权限

Microsoft Graph API - 如何通过 API 向特定用户授予对我的收件箱的访问权限