【问题标题】:Trying to secure a directory on windows using .Net尝试使用 .Net 保护 Windows 上的目录
【发布时间】:2012-10-23 00:20:20
【问题描述】:

我试图让我的 C# 程序保护 Windows 机器上的本地现有目录。出于安全原因,我只希望管理员组中的帐户有权访问此文件夹。现有文件夹是我的程序之前创建的文件夹,将归当前运行的用户所有,因此我需要为 admin 组添加权限,然后删除当前用户的权限。

我可以将管理员组的权限添加到文件夹,但我不知道如何删除当前用户的权限。我给管理员组权限如下:

DirectorySecurity directorySecurity = new DirectorySecurity();
IdentityReference adminId = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
FileSystemAccessRule adminAccess = new FileSystemAccessRule(
    adminId,
    FileSystemRights.FullControl,
    InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,
    PropagationFlags.None,
    AccessControlType.Allow);
directorySecurity.AddAccessRule(adminAccess);

// set the owner and the group to admins
directorySecurity.SetOwner(adminId);
directorySecurity.SetGroup(adminId);

Directory.SetAccessControl("path-to-my-directory", directorySecurity);

【问题讨论】:

    标签: c# .net windows


    【解决方案1】:

    我现在看到了真正的问题。您已经通过将目录安全性设置为全新对象而不是获取现有目录安全性并对其进行修改,从而有效地删除了其他用户的访问权限,但您的目录仍从父目录获得继承的权限。

    您需要在新目录安全对象上删除父继承。您可以通过SetAccessRuleProtection 方法执行此操作。您可以按原样使用上面的代码,但在对目录设置访问控制之前添加此行。

    directorySecurity.SetAccessRuleProtection(true, false);
    

    【讨论】:

      【解决方案2】:

      您将需要使用定义为 here 的 RemoveAccessRule* 方法之一删除包含当前用户访问权限的访问规则。

      或者你可以添加一个访问规则来拒绝当前用户的访问,但我总是尽量远离拒绝规则。通常不授予访问权限比拒绝访问要好(除非它真的打算完全拒绝访问,例如财务记录或其他敏感信息)。仅供参考,拒绝访问规则将覆盖所有授予访问规则。

      【讨论】:

      • 我认为这与我需要的很接近......使用您提供的链接中的代码示例我仍然无法删除当前用户。但是,我认为这是因为该目录从其父目录继承了权限。你会碰巧知道如何以编程方式禁用它吗?
      【解决方案3】:

      查看我对this question 的回复。它解释了您必须编写以修改文件系统权限的代码。如果您不执行所有列出的步骤,您将无法成功修改文件系统的权限。

      【讨论】:

        猜你喜欢
        • 2011-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-26
        • 1970-01-01
        • 2018-11-26
        • 2012-08-21
        相关资源
        最近更新 更多