Мне интересно, есть ли способ запретить пользователям (в том числе входящим в группу администраторов) вступать во владение файлом?
Я изначально создаю такой файл из моего сервиса, который работает под 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 в качестве администратора:
Нет, это невозможно. Сама сущность учетной записи с правами администратора заключается в том, что они могут делать то, что хотят. Администраторы владеют системой. Они всегда могут стать владельцем файла независимо от того, как вы установили права доступа.
Все, что вы делаете, — это усложняет для администратора изменение файла, потому что он должен сначала стать владельцем. В этом есть заслуга; это даже не позволяет администраторам вносить непреднамеренные изменения. Никто «случайно» не становится владельцем файла.
Обычные обходные пути — это назначить всем неадминистративные учетные записи (что на самом деле и нужно делать), либо зашифровать файл с помощью внешних средств.
Итог: не давайте людям, которым вы не доверяете, административный доступ к вашей машине или вашим файлам.
Невозможно помешать любому пользователю с достаточными правами стать владельцем файла.
Административные учетные записи имеют (или могут предоставить себе) любые привилегии — это означает, что они могут делать все, что им нужно, включая переопределение контроля доступа, установленного другими учетными записями, включая другие административные учетные записи.
Как правило, ответственность лежит на людях, использующих учетную запись с административным доступом, чтобы избежать действий, нарушающих целостность системы.
Отказ от ответственности: это не будет слишком легко.
Если предположить, что цель состоит в том, чтобы предотвратить использование администратором встроенных инструментов ОС и часто используемых инструментов сторонних производителей от владения (и вас не волнует загрузка администратором альтернативных ОС, удаление дисков и различные другие угрозы, требующие физического доступа), то следующий подход будет надежным.
Без физического доступа этот подход также (по крайней мере, по замыслу) побеждает вредоносное ПО, включая руткиты. Обратите внимание, что «физический доступ» включает в себя блокировку контроллеров удаленного доступа, таких как iDRAC и iLO, которые разрешают удаленный доступ к функциям, которые традиционно доступны только через локальный доступ, включая загрузку альтернативной ОС через удаленный носитель.
Если вам нужен более простой, но менее надежный подход, вы можете реализовать только драйвер фильтра файловой системы (не как ELAM).