Строка ACE, указывающая текущего пользователя - PullRequest
1 голос
/ 21 октября 2011

Я пытаюсь настроить разрешения для именованного канала «правильным» способом.

Кажется, что самый простой и правильный способ установить права доступа - через строку ACE, например:

sa.nLength        = sizeof(sa);
sa.bInheritHandle = FALSE;
if (ConvertStringSecurityDescriptorToSecurityDescriptor(aceStr,
                                                        SDDL_REVISION_1,
                                                        &(sa.lpSecurityDescriptor),
                                                        NULL))
{
  pipe = CreateNamedPipe(..., &sa);
}

Я хочу, чтобы владелец канала имел полный контроль, а все остальные имели только права на чтение и запись.Я также хочу, чтобы канал имел низкий уровень целостности, чтобы клиенты с низким уровнем целостности могли подключаться.

В прошлом я всегда просто использовал NULL DACL, потому что это легко, но Microsoft четко заявляет, что это не так.хорошая идея, потому что это позволяет любому клиенту полностью владеть каналом.

Я знаю, что часть строки SADL должна быть

S:(ML;;NW;;;LW)

, что дает каналу уровень целостностиlow.

Часть DACL должна включать

D:(A;;FRFW;;;WD)

, которая дает доступ «чтение» и запись «Все».Мне нужно добавить еще одну строку ACE в конце этого, чтобы установить полный контроль для владельца.Но я не могу найти код, который идет в конечную позицию для Windows, чтобы заменить его на SID текущего процесса.

S:(ML;;NW;;;LW)D:(A;;FRFW;;;WD)(A;;FA;;;<current process?>)

Я нашел некоторый код, который получает SID текущего процесса, ноэто включает в себя последовательность около 4 или 5 вызовов API.Это должно быть тривиальной задачей, так что я уверен, что это неправильный способ делать то, что я хочу.

Наконец, я даже удаленно на правильном пути?Почему это так сложно?

Два дополнительных вопроса: должна ли структура атрибутов безопасности, передаваемая CreateNamedPipe (), иметь то же время жизни, что и канал, или вы можете удалить ее, как только вызов вернется?Можно ли использовать одну и ту же структуру для нескольких экземпляров канала, или CreateNamedPipe () изменила ее?

Ответы [ 2 ]

0 голосов
/ 24 октября 2011

Кажется, мой вопрос был основан на моей путанице и недоразумении.

Владелец файла всегда имеет разрешение на изменение прав доступа к файлу.

Итакне нужно явно устанавливать разрешения для владельца.Мне нужна была строка ACE:

S:(ML;;NW;;;LW)D:(A;;FRFW;;;WD)

(причина, по которой я хотел явно установить разрешения для владельца, заключалась в том, что я подумал, что если я этого не сделаю, то владелец фактически потеряет право собственности).*

0 голосов
/ 21 октября 2011

Похоже, CO ( владелец-создатель ) является ближайшим совпадением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...