Заметки о Windows и других программных продуктах Microsoft...

Сохранение разрешений NTFS при копировании или перемещении файлов

Сохранение разрешений NTFS при копировании или перемещении файлов

В файловой системе NTFS каждый объект  (файл или папка) имеет свой список контроля доступа (Access Control List, ACL), в котором содержится информация о том, кто (или что) имеет доступ к объекту и какие операции разрешено (или запрещено) этому субъекту проводить над объектом. А что происходит с ACL при копировании или перемещении объекта? Попробуем это выяснить …

В качестве подопытного возьмем папку Temp в корне диска C.  Откроем свойства папки и посмотрим ее разрешения. Как видите, в списке доступа есть только группа локальных администраторов и пользователь kirill (то есть я :)).

разрешения NTFS для папки

 

Теперь возьмем нашу папку.

копирование папки в проводнике

 

И помощью Проводника скопируем ее на компьютер SRV1, также в корень диска C.

вставка файла в проводнике

 

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

разрешения папки после копирования

 

Для того чтобы понять, откуда взялись новые разрешения, пройдем в  дополнительные параметры безопасности папки (кнопка Advanced). Как видно из рисунка, все разрешения папки Temp унаследованы от диска С.

дополнительные разрешения папки

 

В этой ситуации нет ничего удивительного. По умолчанию разрешения NTFS сохраняются только при копировании\перемещении в пределах одного логического диска, или тома. Если же объект перемещается на другой диск того же (или другого) компьютера, то все разрешения заменяются наследуемыми от родительского объекта, которым в нашем случае и является диск C компьютера SRV1.

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

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

Утилита Icacls

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

Открываем командную консоль и сохраняем ACL исходного каталога Temp со всем его содержимым (подкаталоги и файлы) в файл tempACL командой:

Icacls C:\Temp\* /save tempACL /t

сохранение списка доступа в файл

 

По умолчанию утилита сохраняет файл в профиле пользователя — C:\Users\Имя_пользователя. Это обычный текстовый файл, который при желании можно открыть в Блокноте.

сохраненный файл ACL

 

Перенесем созданный файл tempACL на SRV1 и восстановим из него ACL каталога Temp командой:

Icacls C:\temp /restore C:\tempACL

восстановление ACL из файла

 

Затем еще раз посмотрим разрешения скопированой папки Temp и увидим, что справедливость восторжествовала 🙂 и исходные разрешения восстановлены.

восстановленные разрешения папки Temp

 

Утилита Xcopy

Xcopy является продвинутым вариантом команды Copy  и в отличие от нее умеет работать с сетевыми путями, а также копировать сведения о владельце и данные ACL объекта.

В нашем случае для того, чтобы скопировать каталог Temp на SRV1 с сохранением списков доступа воспользуемся командой:

Xcopy C:\Temp \\SRV1\C$\Temp /E /O 

копирование с помощью Xcopy

 

Total Commander

Те, кто боится не любит работать в командной строке, могут воспользоваться файловым менеджером стороннего производителя, например  Total Commander. В нем при копировании\переносе есть возможность скопировать разрешения NTFS, просто отметив галочкой чекбокс «Copy NTFS permissions».

копирование прав доступа с помощью Total Commander

 

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

права на папку при отсутствии доступа к домену

 

 
 
Комментарии

Попробуйте поставить права на папку так, что администратор не может в нее зайти. Пользователи так иногда делают в личных папках, «прячась от админа». При переносе таких папок Вашим методом их содержимое потеряется, а icacls не сможет сохранить права доступа. Метод опасен, можно потерять документы.

Я исхожу из того, что у пользователей не должно быть прав на изменение NTFS-разрешений (full access).
А прятаться от админа таким образом бесполезно 🙂

Тамара

Как Вы думаете, Kirill, может ли из-за неправильно выставленных разрешений для системных папок StatеData и PublichedData и файлов, которые туда заносятся после выполнения задания RACTask, монитор стабильности системы работать неверно (а именно то, что не вычисляется индекс стабильности системы, информация для которого, если я не ошибаюсь, заносится именно в эти папки)?
Заранее благодарю.

Я не особо знаком с монитором стабильности, но полагаю что может. Впрочем это легко проверить, достаточно выдать на эти папки права Full control для Everyone. Заработает — дело в разрешениях.

Станислав

Спасибо! Помогло ) Выбрал коммандер ))