Как можно проверить, может ли конкретный пользователь получить доступ к определенному файлу? - PullRequest
1 голос
/ 12 мая 2010

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

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

Итак ...

Если я хочу знать: «Есть ли у UserBob доступ к файлу c:\specialPath\specialFile, какой простой способ это выяснить? Кстати, моя среда - Windows Server 2003.

ОБНОВЛЕНИЕ: Чтобы уточнить, я хочу сделать что-то вроде этого:

if UserHasAccess(UserBob, @"c:\specialPath\specialFile")
{
 doStuff(); 
}
else
{
 // error handling
}

UPDATE:

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

1 Ответ

1 голос
/ 12 мая 2010

Самый простой способ выяснить это просто попытаться открыть файл. Если это не помогло, у вас не было доступа.

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

Что вы могли бы сделать как администратор, это включить аудит для этого конкретного файла. Щелкните файл правой кнопкой мыши, выберите «Безопасность» и перейдите на вкладку «Аудит». Другой вариант - использовать Process Monitor для наблюдения за тем, что происходит во время работы программы.

...