У меня возникла проблема с Windows 2012 R2, когда установка разрешений NTFS в корне общего ресурса нарушает наследование, а разрешения NTFS фактически заменяются новым ACE. Единственный способ проиллюстрировать это - показать, как я воспроизвел эту проблему.
Прежде всего, давайте возьмем Share из уравнения - где все работает просто отлично.
Я создал папку в C:\ под названием Data. Если я получу текущий ACL, все выглядит правильно.
C:\>icacls c:\data
c:\data NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
BUILTIN\Administrators:(I)(OI)(CI)(F)
BUILTIN\Users:(I)(OI)(CI)(RX)
BUILTIN\Users:(I)(CI)(AD)
BUILTIN\Users:(I)(CI)(WD)
CREATOR OWNER:(I)(OI)(CI)(IO)(F)
Теперь я собираюсь добавить ACE - очень простой.
C:\>icacls c:\data /grant everyone:(RX)
processed file: c:\data
Successfully processed 1 files; Failed processing 0 files
Я могу убедиться, что это сработало, повторно выполнив первую команду.
C:\>icacls c:\data
c:\data Everyone:(RX)
NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
BUILTIN\Administrators:(I)(OI)(CI)(F)
BUILTIN\Users:(I)(OI)(CI)(RX)
BUILTIN\Users:(I)(CI)(AD)
BUILTIN\Users:(I)(CI)(WD)
CREATOR OWNER:(I)(OI)(CI)(IO)(F)
Пока проблем нет. Теперь я удалил ACE и поделился диском C:\Data как Data, используя следующую команду:
Net share Data=C:\Data /grant:Everyone,full
Проверяя ACL этого ресурса, я вижу, что они такие же, как C:\Data - как и должно быть.
C:\>hostname
mgmt57
C:\>icacls \\mgmt57\data
\\mgmt57\data NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
BUILTIN\Administrators:(I)(OI)(CI)(F)
BUILTIN\Users:(I)(OI)(CI)(RX)
BUILTIN\Users:(I)(CI)(AD)
BUILTIN\Users:(I)(CI)(WD)
CREATOR OWNER:(I)(OI)(CI)(IO)(F)
Опять же, я добавляю тот же ACE, что и первый, но на этот раз в общий ресурс.
C:\>icacls \\mgmt57\data /grant everyone:(RX)
processed file: \\mgmt57\data
Successfully processed 1 files; Failed processing 0 files
Теперь вы увидите проблему, когда я проверю ACL.
C:\>icacls \\mgmt57\data
\\mgmt57\data Everyone:(RX)
Successfully processed 1 files; Failed processing 0 files
Та же проблема очевидна на локальном диске.
C:\>icacls c:\data
c:\data Everyone:(RX)
Successfully processed 1 files; Failed processing 0 files
Единственный способ, которым я могу исправить этот ACL сейчас, состоит в том, чтобы отметить подсвеченное поле ниже.
Теперь возникает вопрос - как я могу использовать ICACLS в корне общего ресурса, не повреждая ACL, как я здесь продемонстрировал?
Я могу подтвердить, что:
- Это не проблема с одним сервером - я воспроизвел эту проблему на многих.
- Это проблема как для Datacenter, так и для Standard Edition, но я не пробовал ни одной другой ОС, кроме Windows 2012 R2.
- Серверы полностью обновлены с исправлениями
- Проблема не возникает, если я добавляю ACE в подпапку в корневом каталоге (например, если я устанавливаю ACL для папки \\server \share \), что означает, что мой текущий обходной путь должен установить ACL на \\server \c $. \данные. ПРИМЕЧАНИЕ. Этот обходной путь требует, чтобы вы были администратором рассматриваемого сервера, поэтому это не решение. В моем случае пользователи, устанавливающие разрешения, не являются администраторами, но имеют достаточные разрешения через NTFS для добавления новых ACE.
- Права доступа не имеют отношения к проблеме.
- разрешения NTFS, используемые в моем примере выше, также не имеют значения - проблема возникает с любым разрешением NTFS, добавленным в корневой каталог общего ресурса.
- Использование метода, отличного от ICACLS (например, Powershell и Set-ACL), дает тот же результат
- Только наследование нарушено - другие разрешения, которые были назначены для корневой папки, остаются без изменений. Например, если я добавлю два разрешения, я увижу их оба, и все унаследованные разрешения исчезнут.
- Проблема не только косметическая - если я добавляю группу, членом которой я не являюсь, в корневой каталог общего ресурса, а затем пытаюсь использовать Windows Explorer для просмотра локального эквивалента, я получаю следующую ошибку:
Извините за такой длинный вопрос, но я хотел показать, что приложил много усилий для изоляции этой проблемы. Мне не удалось найти других с такой же проблемой.