Всем доброго времени суток!
Сложился следующий вопрос (.net C#):
Есть директория, доступ к которой имеет только определенный пользователь.(админ или юзер не важно)
Нужно программно отслеживать, что никто не изменил данные разрешения. Если такое происходит, то программа пишет об этом в лог и закрывается.
Как программно можно получить пользователей/роли, которые имеют доступ к данной директории.
Re: Directory permissions
От:
Аноним
Дата:
01.07.09 15:11
Оценка:
Здравствуйте, mrjeka, Вы писали:
M>Всем доброго времени суток! M>Сложился следующий вопрос (.net C#):
M>Есть директория, доступ к которой имеет только определенный пользователь.(админ или юзер не важно) M>Нужно программно отслеживать, что никто не изменил данные разрешения. Если такое происходит, то программа пишет об этом в лог и закрывается.
M>Как программно можно получить пользователей/роли, которые имеют доступ к данной директории.
Пардон, а можно по-подробнее, чем мне может помочь системный журнал?
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.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, mrjeka, Вы писали:
А>>>>А системный журнал чем не устраивает?
M>>>Пардон, а можно по-подробнее, чем мне может помочь системный журнал?
А>>Не очень понимаю, какие именно подробности Вы имеете в виду. Настраиваете аудит безопасности для объекта, потом смотрите результаты в системном журнале "Беопасность" ("Security"). Собственно, все подробности
Мне нужно программно прочитать permissions папки (кому и какие действия разрешены).Или вы предлагаете программно лезть в журнал и парсить его??? О_О
А>>Во всяком случае, способы программного получения извещений о таких событиях мне не известны. Правда, я особо и не интересовался.
А>Впрочем, у ReadDirectoryChangesW есть соответствующий флаг, я, правда его использовать не пробовал. А NET, похоже, аналог тому класс FileSystemWatcher.
FailSystemWatcher следит за изменениями данных, но не разрешений!
Здравствуйте, 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_SECURITY — Any security-descriptor change in the watched directory or subtree causes a change notification wait operation to return.
Смотрю FileSystemWatcher.NotifyFilter Property, перечисление типа NotifyFilters, среди значений
Security — The security settings of the file or folder
Ась? Неужели MSDN обманывает, и оно не работает? Лично мне проверять лень.
Здравствуйте, 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 – второй эшелон безопасности", очень доступно написано.
Спасибо, тоже пришел к этому же решению.