尝试使用.Net在Windows上保护目录

时间:2012-10-16 16:31:41

标签: c# .net windows

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

我可以将管理组的权限添加到该文件夹​​,但我无法弄清楚如何删除当前用户的权限。我给管理员组权限如下:

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);

3 个答案:

答案 0 :(得分:3)

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

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

directorySecurity.SetAccessRuleProtection(true, false);

答案 1 :(得分:0)

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

或者您可以添加访问规则以拒绝访问当前用户,但我总是试图远离拒绝规则。通常最好不授予访问权限而不是拒绝访问权限(除非它真的是要完全拒绝财务记录或其他敏感信息中的访问权限)。仅供参考,拒绝访问规则将覆盖所有授权访问规则。

答案 2 :(得分:0)

请参阅我对this question的回答。它解释了为修改文件系统权限而必须编写的代码。如果未执行所有列出的步骤,则无法成功修改文件系统的权限。