0

我对文件系统和权限/权限访问(又名访问控制列表,ACL)相当陌生。在针对 ACL 进行编码时,我无法为文件设置我想要的属性。我不确定我对 FileSystemRights 成员的理解是否错误,或者我完全做错了事。(而且我已经在这部分上花费了相当多的时间)

我想做的是更改文件的权限,以便它只能是唯一可读的,并且不能在其他地方编辑、重命名、删除和复制。

使用 MSDN 的示例,这是我目前所拥有的:

try
{
    //Get current identity
    WindowsIdentity self = System.Security.Principal.WindowsIdentity.GetCurrent();

    // Add the access control entry to the file.
    AddFileSecurity(filename, self.Name, FileSystemRights.Modify, AccessControlType.Deny);
    AddFileSecurity(filename, self.Name, FileSystemRights.Write, AccessControlType.Deny);
    AddFileSecurity(filename, self.Name, FileSystemRights.ReadAndExecute, AccessControlType.Allow);

    // Remove the access control entry from the file.
    RemoveFileSecurity(filename, self.Name, FileSystemRights.ReadAndExecute, AccessControlType.Deny);
    RemoveFileSecurity(filename, self.Name, FileSystemRights.Read, AccessControlType.Deny);

    Console.WriteLine("Done.");
}
catch (Exception e)
{
    Console.WriteLine(e);
}

我的逻辑是:

  1. 添加拒绝修改权限(拒绝 .Modify 将导致文件变得不可读)
  2. 添加拒绝写入权限
  3. 添加 Allow ReadAndExecute 权限
  4. 删除 ReadAndExecute 上的拒绝条目(作为 .Modify 拒绝 ReadAndExecute)
  5. 删除读取时的拒绝条目(作为 .Modify 拒绝读取)

我做这部分正确吗?如果不是,请告知我应该怎么做才能使文件仅可读且不可编辑、可重命名、可删除和可复制。提前谢谢了!

4

1 回答 1

0

请解释它做错了什么。我看到的唯一可能是一个问题是您正在为自己设置权限,而不是为其他用户或组设置权限。也许您应该遍历所有组(管理员、用户等)并禁用除读取和执行之外的所有组。尽管我认为 SYSTEM 始终可以完全控制所有文件。

于 2011-08-18T06:39:03.530 回答