Хммм ... без прав администратора вы будете зависеть от нечетных прав и / или отладки будет очень сложно.
разработчиками изменений для нашей ИТ-группы была поставлена задача проверить безопасность всех объектов нашей группы, прежде всего, чтобы убедиться, что люди, которые ушли с работы или перешли в другие группы, больше не имеют доступа к общим ресурсам нашего сервера. веб-каталоги, базы данных sql и т. д. Мы недавно завершили часть SQL, и у нас есть сценарий многократного использования, который можно запускать ежегодно (или с любой частотой, с которой мы работаем). Он работал отлично, и мы провели аудит 20 баз данных на 10 или около того серверах за несколько минут.
Теперь о вещах на сервере. У меня есть приложение, которое я написал на C # с использованием .NET 2.0, которое будет рекурсивно сканировать список каталогов и выводить ACL в текстовый файл. Это работает отлично. На местной машине. UNC и Mapped paths не работают, я получаю следующее сообщение об исключении: Процесс не обладает привилегией SeSecurityPrivilege, которая требуется для этой операции.
На этой линии:
DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);
Где di - объект DirectoryInfo, перечисляемый из массива DirectoryInfo [].
Мы вряд ли сможем получить привилегию SeSecurityPrivilege. Однако я не думаю, что это должно быть необходимо. Я могу открыть папку и щелкнуть правой кнопкой мыши на свойства и перейти на вкладку безопасности и просмотреть его в графическом интерфейсе. ядолжен быть в состоянии получить к нему доступ также программно.
Любые мысли о том, как я могу изменить этот раздел кода, чтобы получить разрешения для целевой папки?
private void CheckSecurity(DirectoryInfo[] DIArray)
{
foreach (DirectoryInfo di in DIArray)
{
DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);
string sAccessInfo = string.Empty;
foreach (FileSystemAccessRule FSAR in DirSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
sAccessInfo += GetAceInformation(FSAR);
}
if (sAccessInfo != string.Empty)
{
// Write info to text file
}
}
}
private string GetAceInformation(FileSystemAccessRule ace)
{
StringBuilder info = new StringBuilder();
string line = string.Format("Account: {0}", ace.IdentityReference.Value);
info.AppendLine(line);
line = string.Format("Type: {0}", ace.AccessControlType);
info.AppendLine(line);
line = string.Format("Rights: {0}", ace.FileSystemRights);
info.AppendLine(line);
line = string.Format("Inherited ACE: {0}", ace.IsInherited);
info.AppendLine(line);
return info.ToString();
}
Изменить: Как я могу проверить удаленную папку для атрибута чтения в ACL, когда он не может получить метод «GetAccessControl ()» для корневой папки? (Если я передаю \ server \ path, это приводит к ошибкам при получении информации для \ server \ path).
Учетная запись пользователя является учетной записью домена, и у меня есть разрешения на чтение структуры файла. Я могу просмотреть безопасность из свойств папки / файлов.
Я проверю монитор процесса, но я не уверен, что смогу запустить его на сервере (я не являюсь администратором рассматриваемых серверов).