Проблемы с New-ADGroup, Set-ACL и сетевыми папками - PullRequest
0 голосов
/ 15 марта 2012

Я играю с некоторым кодом 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 ]

0 голосов
/ 16 марта 2012

Разобрался!

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

Было установлено значение 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, чем я когда-либо хотел знать.

Рис.

0 голосов
/ 15 марта 2012

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

...