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

标签 c++ windows winapi windows-security dacl

我很好奇是否有办法阻止用户(包括属于 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 资源管理器以管理员身份获得此文件的所有权:

enter image description here

最佳答案

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

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

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

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

关于c++ - 是否可以禁止取得文件的所有权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35379203/

相关文章:

windows - 如何执行Windows身份验证?

c++ - 我可以解决 "rebuilding"加载调试器吗?

用于按需加载元素的容器的 C++ 随机访问迭代器

C 文件描述符复制而不共享偏移量或标志

c - 为什么 64 位 Visual Studio C 中的 CreateWindow 在创建时会自行销毁?

成员函数中的 C++ 线程

c++ - Google Drive API 插入名称未命名的新文件

c++ - 从文件中加载和保存大量结构化数据 C++

windows - 在 autohotkey 中获取可用的屏幕区域

c# - 如果未设置 StartMenuInternet,我还能在哪里查找默认浏览器?