1

我试图让我的 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);
4

3 回答 3

3

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

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

directorySecurity.SetAccessRuleProtection(true, false);
于 2012-10-22T15:44:26.207 回答
0

请参阅我对这个问题的回答。它解释了您必须编写以修改文件系统权限的代码。如果您不执行所有列出的步骤,您将无法成功修改文件系统上的权限。

于 2012-10-22T16:20:20.850 回答
0

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

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

于 2012-10-16T16:44:14.133 回答