2010-05-11 2 views
1

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

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

Итак ...

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

UPDATE: для уточнения, я хочу сделать что-то вроде этого:

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

ОБНОВЛЕНИЕ:

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

ответ

1

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

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

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

+0

Хорошо, я должен быть более конкретным. Я работаю с кодом .net. Есть ли простой способ попробовать открыть файл как «UserBob»? –

+0

Является ли UserBob * другим * пользователем пользователя, на котором работает ваше приложение? –

+0

Да, codeka, 'UserBob' отличается от пользователя, использующего приложение. По сути, как UserBob, так и пользователь, запускающий приложение, могут быть «системными» учетными записями без привилегий прямого входа в систему. Я хотел бы иметь некоторый код, который говорит что-то вроде: если UserHasAccess (UserBob, @ "C: \ specialPath \ specialFile") { DoStuff(); } еще { // обработка } –