小编Kyl*_*ley的帖子

获取具有"损坏"权限的文件的所有权

我正在努力克服以下情况.

给定存储在NTFS卷上的目录,其中:

  1. 目录所有者设置为其他人(例如,非特权用户)
  2. 目录DACL配置为允许访问不包括系统或管理员的特定人员组
  3. 目录上的DACL实际上不授予任何人获取所有权或更改DACL的权限

(或者简而言之,所有管理员都被锁定在文件夹之外)

但!

  1. 我运行的帐户具有管理权限(SeBackupPrivilege,SeSecurityPrivilege)
  2. 现在的DACL可以被忽略,因为我正在写一个新的DACL
  3. 使用其他工具(takeown.exe),我可以访问相关目录.

(或者简而言之,我有权修复DACL /所有者)

我对以下代码应该没有问题:

WindowsIdentity privilegedUser = System.Security.Principal.WindowsIdentity.GetCurrent();

// I cannot use File.GetAccessControl() as I get access denied
// (working as intended! I have no access to read the ACL!)
// so I have to write a new ACL:
FileSecurity acl = new FileSecurity();
acl.SetOwner(admin.User);
acl.AddAccessRule(new FileSystemAccessRule(privilegedUser.User, FileSystemRights.FullControl, AccessControlType.Allow));

File.SetAccessControl("c:\\path\\to\\broken", acl);
Run Code Online (Sandbox Code Playgroud)

但是,SetAccessControl调用会抛出UnauthorizedAccessException.当我改变它只调整所有者时,同样的事情发生.当我只尝试调整DACL时,同样的事情.

我通过在Process Explorer中检查生成的进程并验证Administrators组是否设置为"Owner"而不是"Disabled"来验证问题不是UAC.我应该拥有执行此操作所需的所有权限(备份操作员在面对管理员时应该是无关紧要的,但我将其添加进行测试) - 但它只是继续拒绝访问权限.

相关的technet文档:http://technet.microsoft.com/en-us/library/cc783530%28WS.10%29.aspx

  • "如果您拥有一个对象,则可以授予任何用户或安全组对该对象的任何权限,包括获得所有权的权限."
  • 所有权可以通过以下方式转移:
    • 当前所有者可以将获取所有权权限授予其他用户,允许该用户随时获得所有权.用户必须实际拥有所有权才能完成转移.(不幸的是,在这种情况下,所有者无法重新分配所有权.)
    • 管理员可以获得所有权. …

c# file-permissions ntfs ownership

9
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×1

file-permissions ×1

ntfs ×1

ownership ×1