Заметки о 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. Заработает — дело в разрешениях.

Станислав

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

Гость

По умолчанию утилита iCacls сохраняет файл в папку, путь к которой написан слева от >_ и набираемой команды, им вполне может оказаться и c:\windows\system32

Гость

И ещё: если в конечной папке не будет какого-то файла или папки из исходной, то на ней процесс остановится и вылетит по ошибке. Особенно это касается системных папок типа System Volume Information, $Recycle.Bin и т.п.

Руслан

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

Вернуть права на файлы просто, достаточно иметь на компьютере права администратора.