Обработка разрешений при копировании и перемещении файлов и папок
В этой статье описывается, как проводник Windows обрабатывает разрешения для файлов и папок в разных ситуациях.
Применимо к: Windows 10 (все выпуски), Windows Server 2012 R2
Оригинальный номер базы знаний: 310316
Сводка
В Microsoft Windows 2000, Windows Server 2003 и Windows XP можно использовать файловую систему FAT32 или NTFS. При использовании файловой системы NTFS можно предоставить разрешения для папок и файлов для управления доступом к этим объектам. При копировании или перемещении файла или папки на томе NTFS то, как проводник Windows обрабатывает разрешения на объект, зависит от того, копируется или перемещается объект в пределах одного тома NTFS или в другой том.
Дополнительная информация
По умолчанию объект наследует разрешения от родительского объекта во время создания, копирования или перемещения в родительскую папку. Единственным исключением из этого правила является перемещение объекта в другую папку на том же самом томе. В этом случае исходные разрешения сохраняются.
Кроме того, обратите внимание на следующие правила:
- Группе «Все» предоставляются разрешения на полный доступ к корневому каталогу каждого диска NTFS.
- Запрет разрешений всегда имеет более высокий приоритет, чем предоставление разрешений.
- Явные разрешения имеют приоритет над наследуемыми разрешениями.
- Если разрешения NTFS конфликтуют, например, если разрешения групп и пользователей противоречат друг другу, высокий приоритет имеют наиболее либеральные разрешения.
- Разрешения являются накопительными.
- Чтобы сохранить разрешения при копировании или перемещении файлов и папок, используйте служебную программу Xcopy.exe с переключателем /O или /X . Исходные разрешения объекта будут добавлены к наследуемым разрешениям в новом расположении.
- Чтобы добавить исходные разрешения объекта к наследуемым разрешениям при копировании или перемещении объекта, используйте служебную программу Xcopy.exe с переключателями -O и -X .
- Чтобы сохранить существующие разрешения без добавления наследуемых разрешений из родительской папки, используйте служебную программу Robocopy.exe, доступную в пакете Windows 2000 Resource Kit.
Вы можете изменить то, как проводник Windows будет обрабатывать разрешения при копировании или перемещении объектов в другой том NTFS. При копировании или перемещении объекта в другой том объект наследует разрешения новой папки. Однако если вы хотите изменить это поведение, чтобы сохранить исходные разрешения, измените реестр следующим образом.
В этот раздел, описание метода или задачи включены действия, содержащие указания по изменению параметров реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому следует в точности выполнять приведенные инструкции. Для дополнительной защиты создайте резервную копию реестра, прежде чем редактировать его. Так вы сможете восстановить реестр, если возникнет проблема. Для получения дополнительной информации о том, как создать резервную копию и восстановить реестр, см. статью Сведения о резервном копировании и восстановлении реестра Windows.
- Нажмите кнопку Пуск, выберите Выполнить, введите команду regedit в поле Открыть и нажмите клавишу ВВОД.
- Найдите и выберите следующий раздел реестра: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer .
- В меню Правка щелкните пункт Добавить значение, а затем добавьте следующее значение реестра:
- Имя значения: ForceCopyAclwithFile
- Тип данных: DWORD
- Значение данных: 1
- Закройте редактор реестра.
Вы можете изменить то, как проводник Windows будет обрабатывать разрешения при перемещении объектов в том же томе NTFS. Как упоминалось, при перемещении объекта в пределах одного тома объект сохраняет свои разрешения по умолчанию. Однако если вы хотите изменить это поведение таким образом, чтобы объект наследовал разрешения из родительской папки, измените реестр следующим образом:
- В меню Пуск выберите элемент Выполнить, введите команду regedit и нажмите клавишу ВВОД.
- Найдите и выделите следующий подраздел реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer .
- В меню Правка щелкните пункт Добавить значение, а затем добавьте следующее значение реестра:
- Имя значения: MoveSecurityAttributes
- Тип данных: DWORD
- Значение данных: 0
- Закройте редактор реестра.
- Убедитесь, что учетная запись пользователя, используемая для перемещения объекта, имеет набор разрешений на изменение. Если разрешение не задано, предоставьте разрешения на изменение учетной записи пользователя.
Значение реестра MoveSecurityAttributes применяется только к Windows XP и Windows Server 2003. Значение не влияет на Windows 2000.
Сохранение разрешений NTFS при копировании или перемещении файлов
В файловой системе NTFS каждый объект (файл или папка) имеет свой список контроля доступа (Access Control List, ACL), в котором содержится информация о том, кто (или что) имеет доступ к объекту и какие операции разрешено (или запрещено) этому субъекту проводить над объектом. А что происходит с ACL при копировании или перемещении объекта? Попробуем это выяснить …
В качестве подопытного возьмем папку Temp в корне диска C. Откроем свойства папки и посмотрим ее разрешения. Как видите, в списке доступа есть только группа локальных администраторов и пользователь kirill (то есть я :)).

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

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

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

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

В этой ситуации нет ничего удивительного. По умолчанию разрешения NTFS сохраняются только при копировании\перемещении в пределах одного логического диска, или тома. Если же объект перемещается на другой диск того же (или другого) компьютера, то все разрешения заменяются наследуемыми от родительского объекта, которым в нашем случае и является диск C компьютера SRV1.
В нашем случае скопирована всего лишь одна папка с несколькими файлами, поэтому при необходимости восстановить утерянные разрешения несложно. А если подобное случиться при переносе серьезного файлового ресурса с высоким уровнем вложенности и сложной структурой разрешений NTFS, заданных вручную ?
К сожалению, проводник Windows не умеет копировать разрешения файловой системы, для этого нам придется воспользоваться альтернативными средствами.
Утилита Icacls
Эта утилита специально предназначена для работы с ACL. В числе прочего она может сохранить список доступа указанного объекта в файл, а затем применить этот список к указанному объекту.
Открываем командную консоль и сохраняем ACL исходного каталога Temp со всем его содержимым (подкаталоги и файлы) в файл tempACL командой:
Icacls C:\Temp\* /save tempACL /t

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

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

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

Утилита Xcopy
Xcopy является продвинутым вариантом команды Copy и в отличие от нее умеет работать с сетевыми путями, а также копировать сведения о владельце и данные ACL объекта.
В нашем случае для того, чтобы скопировать каталог Temp на SRV1 с сохранением списков доступа воспользуемся командой:
Xcopy C:\Temp \\SRV1\C$\Temp /E /O

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

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

12.05.2021

itpro

Windows 10, Windows Server 2016

комментариев 13
Для управления NTFS разрешениями в Windows можно использовать встроенную утилиту iCACLS. Утилита командной строки icacls.exe позволяет получить или изменить списки управления доступом (ACL — Access Control Lists) на файлы и папки на файловой системе NTFS. В этой статье мы рассмотрим полезные команды управления ntfs разрешениями в Windows с помощью icacls.
Просмотр и изменения NTFS прав на папки и файлы с помощью icacls
Текущие права доступа к любому объекту на NTFS томе можно вывести так:

Команда вернет список пользователей и групп, которым назначены права доступа. Права указываются с помощью сокращений:
Перед правами доступа указаны права наследования (применяются только к каталогам):
- (OI)— наследование объектами
- (CI)— наследование контейнерами
- (IO)— только наследование
- (I)– разрешение унаследовано от родительского объекта
С помощью icacls вы можете изменить права доступа на папку.
Чтобы предоставить группе fs01_Auditors домена resource права чтения и выполнения (RX) на каталог, выполните:
icacls ‘C:\Share\Veteran\’ /grant resource\fs01_Auditors:RX

Чтобы удалить группу из ACL каталога:
icacls ‘C:\Share\Veteran\’ /remove resource\fs01_Auditors
С помощью icacls вы можете включить наследование NTFS прав с родительского каталога:
icacls ‘C:\Share\Veteran\’ /inheritance:e

Или отключить наследование с удалением всех наследованных ACEs:
icacls ‘C:\Share\Veteran\’ /inheritance:r
Также icacls можно использовать, чтобы изменить владельца файла или каталога:
icacls ‘C:\Share\Veteran\’ /setowner resource\a.ivanov /T /C /L /Q

Бэкап (экспорт) текущих NTFS разрешений каталога
Перед существенным изменением разрешений (переносе, обновлении ACL, миграции ресурсов) на NTFS папке (общей сетевой папке) желательно создать резервную копию старых разрешений. Данная копия позволит вам вернуться к исходным настройкам или хотя бы уточнить старые права доступа на конкретный файл/каталог.
Для экспорта/импорта текущих NTFS разрешений каталога вы также можете использовать утилиту icacls. Чтобы получить все ACL для конкретной папки (в том числе вложенных каталогов и файлов), и экспортировать их в текстовый файл, нужно выполнить команду
icacls ‘C:\Share\Veteran’ /save c:\ps\veteran_ntfs_perms.txt /t /c
Примечание. Ключ /t указывает, что нужно получить ACL для всех дочерних подкаталогов и файлов, ключ /c – позволяет игнорировать ошибки доступа. Добавив ключ /q можно отключить вывод на экран информации об успешных действиях при доступе к объектам файловой системы.

В зависимости от количества файлов и папок, процесс экспорта разрешений может занять довольно продолжительное время. После окончания выполнения команды отобразится статистика о количестве обработанных и пропущенных файлов.
Successfully processed 3001 files; Failed processing 0 files
![]()
Откройте файл veteran_ntfs_perms.txt с помощью любого текстового редактора. Как вы видите, он содержит полный список папок и файлов в каталоге, и для каждого указаны текущие разрешения в формате SDDL (Security Descriptor Definition Language).

К примеру, текущие NTFS разрешения на корень папки такие:
D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;S-1-5-21-2340243621-32346796122-2349433313-23777994)(A;OICI;0x1301bf;;;S-1-5-21-2340243621-32346796122-2349433313-23777993)(A;OICI;FA;;;SY)(A;OICI;FA;;;S-1-5-21-2340243621-32346796122-2349433313-24109193)S:AI
Данная строка описывает доступ для нескольких групп или пользователей. Мы не будем подробно углубляться в SDDL синтаксис (при желании справку по нему можно найти на MSDN, или вкратце формат рассматривался в статье об управлении правами на службы Windows). Мы для примера разберем небольшой кусок SDDL, выбрав только одного субъекта:
(A;OICI;FA;;;S-1-5-21-2340243621-32346796122-2349433313-24109193)
A – тип доступа (Allow)
OICI – флаг наследования (OBJECT INHERIT+ CONTAINER INHERIT)
FA – тип разрешения (SDDL_FILE_ALL – все разрешено)
S-1-5-21-2340243621-32346796122-2349433313-24109193 – SID учетной записи или группы в домене, для которой заданы разрешения. Чтобы преобразовать SID в имя учетной записи или группы, воспользуйтесь командой:
$objSID = New-Object System.Security.Principal.SecurityIdentifier («S-1-5-21-2340243621-32346796122-2349433313-24109193»)
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value

Таким образом, мы узнали, что пользователь corp\dvivan обладал полными правами (Full Control) на данный каталог.
Восстановление NTFS разрешений с помощью iCacls
С помощью ранее созданного файла veteran_ntfs_perms.txt вы можете восстановить NTFS разрешения на каталог. Чтобы задать NTFS права на объекты в каталоге в соответствии со значениями в файле с резервной копией ACL, выполните команду:
icacls C:\share /restore c:\PS\veteran_ntfs_perms.txt /t /c
Примечание. Обратите внимание, что при импорте разрешений из файла указывается путь к родительской папке, но не имя самого каталога.
По окончанию восстановления разрешений также отобразится статистика о количестве обработанных файлов:
Successfully processed 114 files; Failed processing 0 files

С учетом того, что в резервной копии ACL указываются относительные, а не абсолютные пути к файлам, вы можете восстановить разрешения в каталоге даже после его перемещения на другой диск/каталог.
Сброс NTFS разрешений в Windows
С помощью утилиты icacls вы можете сбросить текущие разрешения на указанный файл или каталог (и любые вложенные объекты):
icacls C:\share\veteran /reset /T /Q /C /RESET
Данная команда включит для указанного объекта наследование NTFS разрешений с родительского каталога, и удалит любые другие права.

Копирование NTFS прав между папками
Вы можете использовать текстовый файл с резервной копией ACL для копирования NTFS разрешений с одного каталога на другой/
Сначала создайте бэкап NTFS разрешений корня папки:
icacls ‘C:\Share\Veteran’ /save c:\ps\save_ntfs_perms.txt /c
А замет примените сохраненные ACL к целевой папке:
icacls e:\share /restore c:\ps\save_ntfs_perms.txt /c
Это сработает, если исходная и целевая папка называются одинаково. А что делать, если имя целевой папки отличается? Например, вам нужно скопировать NTFS разрешения на каталог E:\PublicDOCS
Проще всего открыть файл save_ntfs_perms.txt в блокноте и отредактировать имя каталога. С помощью функции Replace замените имя каталога Veteran на PublicDOCS.

Затем импортируйте NTFS разрешения из файла и примените их к целевому каталогу:
icacls e:\ /restore c:\ps\save_ntfs_perms.txt /c
Еще проще можно скопировать NTFS разрешения с помощью PowerShell:
Get-Acl -Path ‘C:\Share\Veteran’ | Set-Acl -Path ‘E:\PublicDOCS’
Предыдущая статья Следующая статья
Читайте далее в разделе Windows 10 Windows Server 2016



Компьютер неожиданно перезагрузился, или возникла непредвиденная ошибка
Windows не видит компьютеры в сетевом окружении
Ошибка: не найден сетевой путь в Windows (0x80070035)
Восстановление загрузчика BCD и записи MBR в Windows 10/ 11
Сохранение разрешений NTFS на файлы и папки при копировании или перемещении


Файловая система NTFS с помощью списка контроля доступа (Access Control List, ACL) позволяет гибко организовывать и контролировать доступ к файлам и папкам в системе, раздавать разрешения пользователям или другим объектам. Однако при простом копировании или перемещении объектов ACL разрешения теряются.
Заново выставлять все права вручную в сложной файловой системе с кучей пользователей. занятие для человека с железными яйцами нервами или кому просто больше не чем заняться.
Самый простой способ сохранить права доступа при копировании — воспользоваться Total Commander. Если вы не любите или боитесь работать в командной строке, то это ваш вариант. При копировании/переносе просто отметьте галочкой чекбокс «Copy NTFS permissions».
Возможности командной строки всегда выше, нежели возможности настройки через интерфейс. Более универсальный способ, воспользоваться командой xcopy.
Команда XCOPY
XCOPY более продвинутый вариант команды COPY, но в отличие от последней умеет работать с сетевыми путями и копировать сведения о владельце и данные ACL объекта, то есть права доступа к файлам и папкам в системе NTFS. Синтаксис команды предельно простой:
xcopy источник [назначение] параметры
Допустим нам необходимо сделать резервную копию каталога баз данных 1С D:\bases1C на сетевой накопитель NAS с сохранением списков доступа. Вот как будет выглядеть соответствующая команда:
xcopy D:\bases1C \\NAS\backup1c /E /O
- параметр /Е — копирует каталоги с подкаталогами, включая пустые
- параметр /О — копирует сведения о владельце и ACL
В большинстве случаев этих двух параметров достаточно, полный список можно посмотреть xcopy /?
ICACLS
Утилита ICACLS пришла на смену CACLS из Windows XP. Позволяет отображать и изменять списки управления доступом (Access Control Lists (ACLs) ) к файлам и папкам файловой системы, сохранять список доступа указанного объекта в файл и затем применить этот список к указанному объекту, то есть делать резервную копию прав доступа к объекту.
Приведу наиболее интересный пример использования ICACLS:
icacls c:\каталог /save name /t icacls c:\другой_каталог /restore name
Итак, первой командой ICACLS создаем резервную копию прав доступа указанного объекта и сохраняем его в файл с именем name. Второй командой применяем резервную копию для другого объекта. Таким образом можно существенно упростить процесс переноса прав доступа с одного каталога на другой.
Стоит отметить, что файл с правами доступа по умолчанию сохраняется в корневую папку активного пользователя. С полным списком возможностей утилиты можно ознакомиться введя команду icacls /?
Подписывайтесь на канал
Яндекс.Дзен и узнавайте первыми о новых материалах, опубликованных на сайте.
Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.