Сохранение и восстановление ACL - PullRequest
1 голос
/ 16 апреля 2009

Я перенесу свой выделенный сервер на другого провайдера и перенесу все на новый сервер.

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

У меня есть 3 разные учетные записи локальных пользователей, которые я использую в IIS для изоляции доступа каждого веб-сайта от другого: IUSR_SITE1, IUSR_SITE2, IUSR_SITE3.

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

Спасибо за предоставленную помощь.

Ответы [ 3 ]

2 голосов
/ 17 апреля 2009

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

http://technet.microsoft.com/en-us/sysinternals/bb897332.aspx

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

1 голос
/ 16 апреля 2009

Поскольку вы используете локальные учетные записи, простое копирование списков ACL не будет работать, поскольку идентификаторы безопасности на разных компьютерах будут разными.

Я бы работал в несколько этапов:

Первое: получите SID учетной записи (как на старых, так и на новых машинах). Самый быстрый способ - использовать psgetsid (из PSTools )

PS G:\> psgetsid iusr_mymachine

PsGetSid v1.43 - Translates SIDs to names and vice versa
Copyright (C) 1999-2006 Mark Russinovich
Sysinternals - www.sysinternals.com

SID for MYMACHINE\iusr_mymachine:
S-1-5-21-3287596715-1315679848-4222504177-1004

Второе: получите SDDL («Язык определения дескриптора безопасности», способ записи ACL в тексте, описанный в MSDN ) нужных файлов. В Win32 и .NET есть методы для этого, но самый простой путь - это PowerShell (с добавлением разрывов строк, чтобы сделать структуру видимой):

PS E:\Dev\Sites> (get-acl .\WebSite).sddl
O:S-1-5-21-1527045006-1366868173-4125010901-1001
G:S-1-5-21-1527045006-1366868173-4125010901-513D:AI
(A;OICI;0x1200a9;;;NS)
(A;OICI;0x1200a9;;;S-1-5-21-1527045006-1366868173-4125010901-1012)
(A;ID;FA;;;S-1-5-21-1527045006-1366868173-4125010901-1001)
(A;OICIIOID;FA;;;CO)
(A;OICIID;FA;;;SY)
(A;OICIID;FA;;;BA)
(A;OICIIOID;FA;;;S-1-5-21-1527045006-1366868173-4125010901-1001)

В-третьих: в этой строке можно применить строковые замены для каждого (SID старого компьютера, SID нового компьютера).

Четвертый: установить новый ACL для папки (или файла):

$sec = get-acl newfolder
$sec.SetSecurityDescriptorSddlForm($sddl)

Очевидно, что лучший способ сделать это для нескольких файлов - это сценарий со сценарием на старой машине, выполняющим 1 и 2, и генерацией сценария для выполнения 3 и 4 на целевом компьютере (чтобы избежать настройки ACL с неизвестные SIDы удаленно).

1 голос
/ 16 апреля 2009

Вы можете использовать XCACLS из Windows Resource Kit, подробнее здесь . Это не полное решение, но вы могли бы перечислить все интересующие вас разрешения и использовать эти выходные данные для генерации сценария, который снова восстанавливает эти разрешения с использованием XCACLS.

Вы также можете использовать Robocopy (также входит в комплект ресурсов и установлен по умолчанию в Vista) для копирования файлов с включенными списками ACL. Это может работать только в том случае, если пользователи находятся в одном домене с обоими серверами, так как SID ACL должен существовать в другой системе, чтобы это было полезно. Если этого не произойдет, вы получите список ACL для пользователей, которых нет в вашей целевой системе.

...