Directory permissions
От: mrjeka Россия  
Дата: 01.07.09 14:48
Оценка:
Всем доброго времени суток!
Сложился следующий вопрос (.net C#):

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

Как программно можно получить пользователей/роли, которые имеют доступ к данной директории.
Re: Directory permissions
От: Аноним  
Дата: 01.07.09 15:11
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Всем доброго времени суток!

M>Сложился следующий вопрос (.net C#):

M>Есть директория, доступ к которой имеет только определенный пользователь.(админ или юзер не важно)

M>Нужно программно отслеживать, что никто не изменил данные разрешения. Если такое происходит, то программа пишет об этом в лог и закрывается.

M>Как программно можно получить пользователей/роли, которые имеют доступ к данной директории.


А системный журнал чем не устраивает?
Re[2]: Directory permissions
От: mrjeka Россия  
Дата: 01.07.09 17:27
Оценка:
А>А системный журнал чем не устраивает?

Пардон, а можно по-подробнее, чем мне может помочь системный журнал?
Re[3]: Directory permissions
От: Аноним  
Дата: 02.07.09 01:34
Оценка:
Здравствуйте, mrjeka, Вы писали:

А>>А системный журнал чем не устраивает?


M>Пардон, а можно по-подробнее, чем мне может помочь системный журнал?


Не очень понимаю, какие именно подробности Вы имеете в виду. Настраиваете аудит безопасности для объекта, потом смотрите результаты в системном журнале "Беопасность" ("Security"). Собственно, все подробности

Во всяком случае, способы программного получения извещений о таких событиях мне не известны. Правда, я особо и не интересовался.
Re[4]: Directory permissions
От: Аноним  
Дата: 02.07.09 02:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, mrjeka, Вы писали:


А>>>А системный журнал чем не устраивает?


M>>Пардон, а можно по-подробнее, чем мне может помочь системный журнал?


А>Не очень понимаю, какие именно подробности Вы имеете в виду. Настраиваете аудит безопасности для объекта, потом смотрите результаты в системном журнале "Беопасность" ("Security"). Собственно, все подробности


А>Во всяком случае, способы программного получения извещений о таких событиях мне не известны. Правда, я особо и не интересовался.


Впрочем, у ReadDirectoryChangesW есть соответствующий флаг, я, правда его использовать не пробовал. А NET, похоже, аналог тому класс FileSystemWatcher.
Re[5]: Directory permissions
От: mrjeka Россия  
Дата: 02.07.09 04:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, mrjeka, Вы писали:


А>>>>А системный журнал чем не устраивает?


M>>>Пардон, а можно по-подробнее, чем мне может помочь системный журнал?


А>>Не очень понимаю, какие именно подробности Вы имеете в виду. Настраиваете аудит безопасности для объекта, потом смотрите результаты в системном журнале "Беопасность" ("Security"). Собственно, все подробности

Мне нужно программно прочитать permissions папки (кому и какие действия разрешены).Или вы предлагаете программно лезть в журнал и парсить его??? О_О

А>>Во всяком случае, способы программного получения извещений о таких событиях мне не известны. Правда, я особо и не интересовался.


А>Впрочем, у ReadDirectoryChangesW есть соответствующий флаг, я, правда его использовать не пробовал. А NET, похоже, аналог тому класс FileSystemWatcher.

FailSystemWatcher следит за изменениями данных, но не разрешений!
Re: Directory permissions
От: sada12  
Дата: 02.07.09 07:46
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Нужно программно отслеживать, что никто не изменил данные разрешения. Если такое происходит, то программа пишет об этом в лог и закрывается.


Как временное решение — опрашивайте по таймеру, некрасиво но лучше чем ничего. Не могу сказать где надо подписываться, спросите у системщиков, наверняка есть WinApi функция.

M>Как программно можно получить пользователей/роли, которые имеют доступ к данной директории.


В качестве отправной точки предлагаю такой код:

        private static void DirectoryAccess()
        {
            const String dirName = @"c:\downloads\postscript";
            var dirInfo = new DirectoryInfo(dirName);
            var accessControlList = dirInfo.GetAccessControl(AccessControlSections.All);

            foreach (FileSystemAccessRule rule in accessControlList.GetAccessRules(true, true, typeof(SecurityIdentifier)))
            {
                var sid = (SecurityIdentifier) rule.IdentityReference;
                var identity = (NTAccount) sid.Translate(typeof (NTAccount));
                Console.WriteLine("{0} {1} {2}", identity.Value, rule.FileSystemRights, rule.AccessControlType);
            }
        }


Обработайте напильником, посмотрите на System.Security и вложенные пространства, почитайте мсдн.
Кстати, на рсдне есть отличная статья Сергея Бакланова "Второй .NET – второй эшелон безопасности", очень доступно написано.
Re[6]: Directory permissions
От: Аноним  
Дата: 02.07.09 10:29
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>FailSystemWatcher следит за изменениями данных, но не разрешений!


Ну вот я смотрю MSDN:
функция ReadDirectoryChangesW, список флагов, среди них

FILE_NOTIFY_CHANGE_SECURITYAny security-descriptor change in the watched directory or subtree causes a change notification wait operation to return.

Смотрю FileSystemWatcher.NotifyFilter Property, перечисление типа NotifyFilters, среди значений

SecurityThe security settings of the file or folder

Ась? Неужели MSDN обманывает, и оно не работает? Лично мне проверять лень.
Re[2]: Directory permissions
От: mrjeka Россия  
Дата: 02.07.09 13:56
Оценка:
Здравствуйте, sada12, Вы писали:

S>Здравствуйте, mrjeka, Вы писали:


M>>Нужно программно отслеживать, что никто не изменил данные разрешения. Если такое происходит, то программа пишет об этом в лог и закрывается.


S>Как временное решение — опрашивайте по таймеру, некрасиво но лучше чем ничего. Не могу сказать где надо подписываться, спросите у системщиков, наверняка есть WinApi функция.


M>>Как программно можно получить пользователей/роли, которые имеют доступ к данной директории.


S>В качестве отправной точки предлагаю такой код:


S>
S>        private static void DirectoryAccess()
S>        {
S>            const String dirName = @"c:\downloads\postscript";
S>            var dirInfo = new DirectoryInfo(dirName);
S>            var accessControlList = dirInfo.GetAccessControl(AccessControlSections.All);

S>            foreach (FileSystemAccessRule rule in accessControlList.GetAccessRules(true, true, typeof(SecurityIdentifier)))
S>            {
S>                var sid = (SecurityIdentifier) rule.IdentityReference;
S>                var identity = (NTAccount) sid.Translate(typeof (NTAccount));
S>                Console.WriteLine("{0} {1} {2}", identity.Value, rule.FileSystemRights, rule.AccessControlType);
S>            }
S>        }
S>


S>Обработайте напильником, посмотрите на System.Security и вложенные пространства, почитайте мсдн.

S>Кстати, на рсдне есть отличная статья Сергея Бакланова "Второй .NET – второй эшелон безопасности", очень доступно написано.
Спасибо, тоже пришел к этому же решению.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.