Невозможно изменить Perl ACL в C # в каталоге CommonAppDataPath

StackOverflow https://stackoverflow.com/questions/1440149

  •  10-07-2019
  •  | 
  •  

Вопрос

Итак, я пытаюсь изменить разрешения для группы BUILTIN \ Users, чтобы, по крайней мере, иметь право доступа для изменения файловой системы. К сожалению, мои попытки использовать приведенный ниже код дают неизменный ACL.

            SecurityIdentifier usersSecurityIdentifier = ntAccount.Translate(typeof(SecurityIdentifier)) as SecurityIdentifier;
            DirectorySecurity directorySecurity = Directory.GetAccessControl(source.FullName);
            FileSystemAccessRule accessRule 
                = new FileSystemAccessRule(@"BUILTIN\Users", FileSystemRights.FullControl, AccessControlType.Allow);

            directorySecurity.ModifyAccessRule(AccessControlModification.Add,
                accessRule,
                out modified);

            Console.WriteLine(modified);

Модифицированные отчеты имеют значение true в каждом случае, но разрешения не обновляются, если вы посмотрите на них в свойствах папки.

Я также попытался добавить правило доступа для SecurityIdentifier, у которого еще не было ACL для каталога, использующего подобный код, а просто AddAccessRule вместо модификации. Несмотря на то, что новый SecurityIdentifier появился в списке разрешений для каталога, он не имел доступа, который я указал.

Я пытаюсь изменить доступ к частному каталогу в Environment.SpecialFolders.CommonApplicationData, владельцем которого является учетная запись администратора. Я также пытаюсь изменить ACL как администратор.

Кто-нибудь знает, что не так с приведенным выше кодом, или есть какие-либо ресурсы, которые могут привести меня к правильному способу настройки ACL с использованием нативных классов .NET?

Это было полезно?

Решение

Я понял это с помощью друга, который работает в Microsoft. На самом деле процесс, который я использовал для установки ACL, был точным. Я неправильно интерпретировал результаты. По сути, это не проблема при настройке ACL для каталога таким образом, если вы пытаетесь внести изменения в качестве администратора.

Точные разрешения для папки были доступны для просмотра (в Vista):

<Ол>
  • Щелкните правой кнопкой мыши нужную папку и выберите свойства
  • выберите вкладку "Безопасность"
  • Нажмите Дополнительно
  • Нажмите "Изменить".
  • Выберите объект, для которого вы хотите просмотреть разрешения, и нажмите "Изменить".
  • Это та часть, которую мне не хватало. Путь CommonApplicationData уже имеет разрешения, установленные для сущности BUILTIN \ Users. Так что после того, как я запустил свой код, я фактически получил две сущности. Кто-то говорит: «Прочитано и разработано» Выполнить, а другой говорит, специальные разрешения. Когда я редактирую сущность со специальными разрешениями, я на самом деле вижу, что у BUILTIN \ Users есть доступ к каталогу.

    Я действительно искал для BUILTIN \ Users доступ к каталогу и всем его дочерним папкам и объектам. Вот фрагмент кода из того, что я в итоге использовал. Я смог подтвердить, что мой код работал как через тестовый набор, так и вручную, проверяя списки ACL файлов и каталогов.

    DirectorySecurity directorySecurity = Directory.GetAccessControl(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData));
    FileSystemAccessRule accessRule
        = new FileSystemAccessRule(@"BUILTIN\Users", FileSystemRights.FullControl, 
            InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, 
            PropagationFlags.None, 
            AccessControlType.Allow);
    
    bool modified=false;
    directorySecurity.ModifyAccessRule(AccessControlModification.Add,
        accessRule,
        out modified);
    
    if (modified)
    {
        source.Create(directorySecurity);
    }
    else
    {
        source.Create();
    }
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top