Проблемы с New-ADGroup, Set-ACL и сетевыми папками

Я играю с некоторым кодом PowerShell для динамического создания групп безопасности AD, а затем применяю их к папкам в общем сетевом ресурсе, но у меня возникают проблемы с разрешением вновь созданной группы.

Учти это:

import-module activedirectory

for ($i = 0; $i -lt 10; $i++) {

  $group = New-ADGroup -Path "OU=Groups,OU=Department,DC=Domain,DC=Network" -Name "z-test-group-$i" -GroupScope DomainLocal -GroupCategory Security -PassThru
  $acl = Get-Acl C:\Temp
  $permission = $group.SID,"FullControl","Allow"
  $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
  $acl.SetAccessRule($accessRule)
  $acl | Set-Acl C:\Temp

}

Который работает отлично.

Однако, если я изменю папку на сетевую папку, такую ​​как G:\Temp или \\domain.network\DFS\GroupShare\Temp, я получу "Метод с ошибкой с кодом непредвиденной ошибки 1337".

Я устал использовать SetACL.exe и получил похожую ошибку:

C:\Temp\SetACL.exe -on "\\domani.network\dfs\GroupShare\Temp" -ot file -actn ace -ace "n:$GroupSID;p:full;s:y"

SetACL finished with error(s): 
SetACL error message: The call to SetNamedSecurityInfo () failed
Operating system error message: The security ID structure is invalid.
INFORMATION: Processing ACL of: <\\?\UNC\domain.network\dfs\GroupShare\Temp>

Если я подожду, скажем, от 10 до 20 секунд, и снова выполню часть кода Set-ACL (или SetACL.exe), он успешно завершится.

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

Я сделал трассировку Wireshark во время выполнения кода в локальной папке, а затем в сетевой папке. Основное различие заключается в том, что при попытке применить ACL к сетевой папке я вижу запросы на поиск LDAP и (среди прочего) следующий ответ SMB:

NT Trans Response, FID: 0x0040, NT SET SECURITY DESC, Error: STATUS_INVALID_SID

То, что я предполагаю, - то, что заставляет мою команду Set-ACL терпеть неудачу.

Основной сетевой файловой системой является EMC Celerra 6.0.xx. Я очень незнаком с этой технологией, однако из того, что я понимаю, в ней содержится какой-то SID-кеш, который мог бы объяснить вышеуказанную ошибку (он еще не знает о новой группе, хотя AD знает).

Поэтому я думаю, что есть два вопроса:

  1. Есть ли способ обойти это (PowerShell/C# ect), который не включает сон / ожидание? IE, установить ACL, хотя SID недействителен?
  2. Если проблема связана с EMC Celerra (я так полагаю), могу ли я каким-либо образом заставить ее обновить свой "кэш SID" или что-то еще?

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

Спасибо за вашу помощь.

Рис.

2 ответа

Решение

Догадаться!

Изменено действие acl.mappingErrorAction на нашем EMC Celerra NAS.

Был установлен на 0, обновлен до 1.

server_param server_2 -facility cifs -modify acl.mappingErrorAction -value 1

Теперь у нас нет проблем с настройкой вновь созданной группы безопасности в ACL для папки на сетевом ресурсе (без задержек).


Информация: acl.mappingErrorAction

Определяет правила для неизвестного сопоставления между идентификаторами безопасности, пользователя и группы (SID/UID/GID) в настройках ACL.

Могут возникнуть два вида ошибок: SID, заданный в ACL, неизвестен используемым контроллерам домена. Имя пользователя еще не сопоставлено с UID/GID.

Список битов состоит из четырех двоичных битов (биты от 0 до 3, справа налево). Каждый бит равен 1, когда установлен; в противном случае 0.

Bit 0 (0001 or +1): Store unknown SID.
Bit 1 (0010 or +2): Store SID with no UNIX mapping.
Bit 2 (0100 or +4): Enable debug traces.
Bit 3 (1000 or +8): Do lookup only in cache (secmap or global SID cache or per connection SID cache).

Значения: 0 - 15 По умолчанию: 0


Кажется достаточно очевидным теперь, когда я понимаю больше о базовых настройках CIFS/ACL на NAS, чем мне когда-либо хотелось знать.

Рис.

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

Другие вопросы по тегам