Подтвердить что ты не робот

Использование С# для получения списка ACL для серверов и сопоставленных дисков

Разработчикам изменений производства для нашей ИТ-группы было поручено проанализировать безопасность всех различных объектов нашей группы, прежде всего, чтобы убедиться, что люди, которые покинули наш штат или перешли на другие группы, больше не имеют доступа к наши серверные ресурсы, веб-каталоги, базы данных sql и т.д. Мы недавно завершили часть SQL, и у нас есть повторно используемый script, который можно запускать ежегодно (или на любой частоте, с которой мы сталкиваемся). Он отлично поработал, и мы проверили 20 баз данных через 10 или около того серверов с несколькими минутами.

Теперь для сервера. У меня есть приложение, которое я написал в С#, используя .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();
}

Изменить: Как я могу проверить удалённую папку для атрибута read в ACL, когда не удается получить метод GetAccessControl() для корневой папки? (Если я перехожу в \server\path, это ошибки при получении информации для \server\path).

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

Я проверю монитор процесса, но я не уверен, что я смогу запустить его на сервере (я не являюсь администратором на рассматриваемых серверах).

4b9b3361

Ответ 1

Получение вашей ошибки из-за вкладки "Аудит", хотя я уверен, что все, что вы действительно хотите получить на экране, это данные на вкладке "Разрешения". SeSecurityPrivilege контролирует доступ к SACL.

Попробуйте изменить

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.All);

к

DirectorySecurity DirSec = di.GetAccessControl(AccessControlSections.Access);

тогда вы должны прекратить получение ошибки

Ответ 2

Убедитесь, что удаленная папка позволяет пользователю запустить код Read Attributes в ACL.

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

Имея Process Monitor, запущенный на сервере (отфильтрованный в соответствующих папках/файлах), может помочь решить детали почему он терпит неудачу.