2009-04-16 5 views
1

Я перемещаю выделенный сервер другому провайдеру, и я переношу все на новый сервер.Сохранение и восстановление ACL

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

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

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

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

ответ

2

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

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

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

+0

+1, полезная утилита. Я просто хочу, чтобы приложение включило привилегию резервного копирования, чтобы я мог видеть профили пользователей. – avakar

1

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

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

+0

Точно, я попытался msdeploy скопировать все параметры IIS и ACL, но списки ACL, которые не были восстановлены в целевой системе. Я также попробовал вариант WinRAR для копирования прав доступа к файлам, и он применил ACL, но он не существовал в целевой системе. Будет ли XCACLS повторно создавать пользователей в целевой системе? – smartins

+0

Нет, но вы можете сгенерировать скрипт, используя имена пользователей ACL, а не идентификаторы SID пользователей. Таким образом, когда вы запускаете скрипт в своей целевой системе, списки ACL будут воссозданы с правильным SID. Создание этого скрипта не будет таким уж простым. –

1

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

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

Первый: Получите SIDs счета (как на старых, так и новых машин). Самый быстрый способ использует 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 («Security Descriptor Definition Language», способ написания списков управления доступом в тексте, описанных на 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) 

Третьего: String замена может быть применена для каждой {старой машины SID, новая машина SID) в этой строке.

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

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

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