Мы находимся в расположенном на одном месте предприятии RackSpace в Сан-Антонио с активным каталогом под названием «SAT».
Нас переводят в их Даллас / Форт. Средство Worth с активным каталогом под названием "DFW".
Эти машины работают под управлением Windows 2008 Server (некоторые 32-разрядные, некоторые 64-разрядные).
Машины были клонированы на новый объект с помощью программного обеспечения DoubleTake и в целом работают нормально. Однако после перемещения машин мы были вынуждены начать вход в систему с новыми учетными записями пользователей, созданными в DFW Active Directory.
Я потратил много времени на то, чтобы наши оригинальные серверы работали с точки зрения прав доступа к файлам на серверах, и надеюсь, что кто-то сможет поделиться каким-то программным способом, либо с существующей частью программного обеспечения, либо даже с каким-то пользовательским кодом .NET, что мы можем " перевести "все эти разрешения.
Например, я хотел бы каким-то образом указать диски для обновления, имя пользователя «ПЕРЕД», например SAT \ User и имя пользователя AFTER, например "DFW \ User", а давай рип ... Есть идеи?
Я настоятельно рекомендую бесплатный инструмент с открытым исходным кодом SetACL.
Я собираюсь предположить, что SAT и DFW не имеют никакого доверия, а SAT \ USER1, вероятно, имеет совершенно другой SID, чем DFW \ USER1. Все разрешения в NTFS хранятся по SID, а не по имени пользователя. Это может усложнить ситуацию.
Сначала изучите команды резервного копирования и восстановления и сделайте резервную копию разрешений на всех своих серверах в безопасное место. Возможно, вам придется придумать собственное решение, в котором вы создадите резервную копию существующих разрешений в файле SDDL, выполните поиск и замену доменных имен или SID, а затем восстановите их в новом домене.
Используя отзывы @Jed и @mrdenny, я подумал, что отвечу на свой вопрос, указав точную процедуру, которую я использовал для решения проблемы.
Как оказалось, RackSpace не может перенести учетные записи с теми же идентификаторами безопасности, потому что это потребует «переключения», когда наши старые системы больше не будут использоваться. Нам нужно, чтобы обе среды были в сети одновременно, для тестирования во время миграции.
Итак, я перешел к идее SetACL.exe, и это сработало. Вот что я и сделал.
Выполните эту команду, чтобы создать резервную копию всей нашей существующей информации ACL на сервере для диска C:
SetACL.exe -on C: \ -ot file -actn list -lst "f: sddl; w: d, s, o, g" -rec cont -bckp "c: \ acl-backup.txt"
Получены идентификаторы безопасности BEFORE и AFTER для всех наших пользователей и групп между старым и новым доменами Active Directory.
Написал perl-скрипт для поиска / замены этих SID в файле acl-backup.txt. Это немного сложно, поскольку поддержка чтения / записи Unicode 16 немного нестабильна в версии Perl для Windows. Сценарий, который я использовал, был в основном таким:
use charnames qw( :full );
# e.g. take acl-backup.txt and rename to acl-backup.replaced.txt
my $newfilename = $ARGV[0];
$newfilename =~ s/(\..{3,4})$/.replaced$1/;
if ($ARGV[0] eq $newfilename)
{
# Sanity Check
die "Could not continue: new file would overwrite old file ($newfilename)\n";
}
open my $input_fh, '<:raw:perlio:encoding(UTF-16):crlf', $ARGV[0];
or die "Could not open $ARGV[0] for reading: $!";
open my $output_fh, '>:raw:perlio:encoding(UTF-16LE):crlf', $newfilename
or die "Could not open $newfilename for writing: $!";
print $output_fh "\N{BYTE ORDER MARK}";
while (my $line = <$input_fh>)
{
# you'll need a line like this for each SID you're replacing
$line =~ s/S-1-5-21-1844237615-861567501-XXXXXXXXX-XXXX/S-1-5-21-1644697732-2861104425-YYYYYYYYY-YYYYY/g;
chomp $line;
print $output_fh "$line\n";
}
close $output_fh;
close $input_fh;
exit;
Запустите команду восстановления setacl.exe для вновь созданного файла (будьте осторожны, так как если вы сделали ошибку в своем новом файле replace.txt, вы можете полностью закрыть свои ACL ... хотя теоретически у вас должна быть нетронутая резервная копия, которую вы можете восстановить с шага 2):
setacl -on c: \ -ot file -actn restore -bckp acl-backup.replaced.txt
Единственная проблема, с которой я столкнулся, - иногда я получал такие ошибки:
ERROR: Writing SD to <\\?\c:\inetpub\custerr> failed with: The parameter is incorrect.
Не уверен, почему, но в моем случае я смог удалить эти строки из файла replace.txt (а также те, которые уже были завершены с помощью setacl.exe), и двигаться дальше. Затем вернитесь позже и вручную проверьте разрешения в тех областях, где произошел сбой.
Поскольку домены являются доверенными, заставьте Rackspace использовать инструмент миграции AD для миграции учетных записей в новый домен DFW. Таким образом, все идентификаторы безопасности останутся прежними, а новые учетные записи просто будут иметь правильные разрешения.