是否可以禁止取得文件的所有权?

Is it possible to disallow taking ownership of a file?

我很好奇是否有办法阻止用户(包括属于 admin 组的用户)取得文件的所有权?

我最初是通过 运行 在 Local System 帐户下的我的服务创建这样的文件。然后我将该文件的 DACL 设置为 D:(A;OICI;GA;;;SY) 以仅允许 SYSTEM 帐户具有完全访问权限,并将 my service 设置为所有者:

DWORD dwRes = ::SetNamedSecurityInfo(
    strDataFilePath,
    SE_FILE_OBJECT,
    OWNER_SECURITY_INFORMATION,  // change only the object's owner
    pMyServiceUserSid,           // User SID for my service
    NULL,
    NULL,
    NULL);

但在完成所有这些之后,我仍然可以通过 Windows Explorer 作为管理员获得此文件的所有权:

不,这是不可能的。具有管理权限的帐户的本质是他们基本上可以做他们想做的事。管理员拥有系统。他们始终可以获得文件的所有权,无论您如何设置权限。

您所做的只是让管理员更难更改文件,因为他们必须首先取得所有权。这是有好处的;它甚至可以防止管理员进行无意的更改。没有人 "accidentally" 拥有文件的所有权。

正常的解决方法是为每个人分配非管理帐户(无论如何这确实是您应该做的),或者使用一些外部方式加密文件。

底线:不要向您不信任的人授予对您的计算机或文件的管理访问权限。

无法阻止任何具有足够权限的用户取得文件的所有权。

管理帐户拥有(或可以授予自己)任何特权 - 这意味着他们可以做任何他们需要做的事情,包括覆盖其他帐户(包括其他管理帐户)设置的访问控制。

使用具有管理访问权限的帐户的人通常有责任避免做出损害系统完整性的事情。

免责声明:这不会太容易。

假设目标是防止管理员使用内置 OS 工具和常用的第 3 方工具获取所有权(并且您不关心管理员的启动备用 OSes,删除驱动器,以及需要物理访问的各种其他威胁),那么以下方法将是可靠的。

  1. 实施article中的4项反制措施。我所说的实施是指与您的供应商合作以获得支持所描述技术的硬件和软件。
  2. 实施一个文件系统过滤器驱动程序,充当早期启动反恶意软件 (ELAM) 并根据需要停止获取所有权操作。我相信 ELAM API 不公开可用。如果那是真的,您将必须直接使用 MS 才能获得访问权限。

在没有物理访问的情况下,这种方法也将(至少在设计上)击败恶意软件,包括根工具包。请注意,"physical access" 包括锁定远程访问控制器,如 iDRAC 和 iLO,这些控制器允许远程访问传统上只能通过本地访问访问的功能,包括通过远程媒体启动备用 OS。

如果您想要一种更简单但不太健壮的方法,您可以只实现文件系统过滤器驱动程序(而不是作为 ELAM)。