Вырезание/вставка файлов между папками больше не сохраняет исходные разрешения для папок.

Вырезание/вставка файлов между папками больше не сохраняет исходные разрешения для папок.

Раньше на дисках NTFS поведение было таковым: при перемещении файла он сохранял разрешения исходного файла, если перемещение производилось в папку на том же томе.

Я знаю это по опыту, и это можно увидеть здесь: https://support.microsoft.com/en-us/kb/310316

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

Я пробовал на 3 разных машинах, и это больше не работает так. Когда это изменилось? И нет, параметр реестра, упомянутый ранее, не установлен.

Есть идеи, когда это изменилось?

[Редактировать]

Просто пример, чтобы было понятнее.

Предположим, у меня есть эти папки на диске С.

  • C:\Общий доступ
    • \Работающий
    • \Финал

У меня есть четыре группы: - Стажеры - Сотрудники - Менеджеры - Персонал (в которую входят предыдущие три).

Теперь давайте рассмотрим разрешения (упрощенно).

  • C:\Общий доступ
    • Не наследует
    • Явно предоставляет полный контроль администраторам
    • Явно разрешает изменять менеджерам
  • C:\Shared\Рабочий
    • Наследует от Shared
    • Явно разрешает изменять для сотрудников
  • C:\Общий\Финальный
    • Наследует от Shared
    • Явно разрешает читать сотрудникам

Теперь предположим, что у меня в рабочей папке есть файл под названием Bullshit.doc.

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

Теперь, когда я пытаюсь переместить Bullshit.doc, при перемещении он просто наследует разрешения от папки Final, т. е. он просто прощает, что у стажеров не должно быть доступа.

Мой вопрос: это изменилось, не так ли? Или я схожу с ума? Я на 99% уверен, что это работало так же, как описано в KB.

Я знаю, что у меня были похожие проблемы в прошлом, когда пользователи верхнего уровня перемещали файлы между папками (с разным набором разрешений), а затем жаловались, что стажеры не могут прочитать файлы. Мне приходилось объяснять не раз, что вырезать/вставить не получится, что им нужно копировать/вставлять/удалять. Это было еще в Windows 2003, конечно, но у меня может быть как минимум 2008 R2.

[Редактировать 2] Теперь с картинками!!!

Хорошо, я решил попробовать и повторить. С реальными файлами, а не простыми примерами. Вот...

Итак, это исходная папка. Посмотрите все неявные разрешения и одно явное разрешение. Какая-то папка

Теперь давайте создадим там файл. И проверим его права.Просто случайный документ

Время переместить файл в место назначения. Исходная папка была просто временной. Давайте проверим разрешения папки назначения. Гораздо менее запутанные разрешения

Переместив папку, давайте проверим ее права доступа... ЧТО ЗА ШТО!!!

Хм... не то, чего я ожидал. Даже если это был просто файл, из того, что я собрал в базе знаний выше, он должен был сохранить разрешения. И вот как я помню, что он себя вел.

Но, похоже, это изменилось. И я не могу найти официальный источник, когда это произошло.

Это заставляет меня сомневаться в своей вменяемости.

решение1

NTFSвсе еще развивается и меняется. Я считаю, что изменения в обработке унаследованных разрешений впервые появились в Vista и получили дальнейшее развитие в Windows 7. Параметр реестра в вашей ссылке относится к XP, поэтому, насколько мне известно, он игнорируется в более новых версиях.

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

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

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

Некоторые последствия этой архитектуры NTFS:

  • Когда папка/файлскопировано, в таблицах NTFS целевой папки создаются новые целевые записи. Поэтому скопированный файл потеряет все явные разрешения и будет наследовать только от своей новой родительской папки.
  • Когда файл/папкаперемещено внутри того же объема, его запись NTFS перемещается вместе со всеми содержащимися атрибутами и разрешениями. Поэтому он сохранит все явные разрешения, но потеряет свои старые унаследованные разрешения, получив вместо них разрешения своей новой родительской папки.
  • Когда папка/файлперемещается между разными томами, перемещение рассматривается как копирование и не сохраняет никаких исходных разрешений. Единственное отличие от копирования заключается в том, что источник удаляется после завершения копирования.
  • Файл/папка, которая имеет только унаследованные разрешения, не имеет разрешений на перемещение. Такой элемент всегда будет наследовать свои разрешения от родительской папки.
  • Папка/файл может быть помечена как не наследующая разрешения от своего родителя. В этом случае все его разрешения хранятся вместе с ним как ACL, то есть как явные разрешения.

Это противоречит большинству устоявшихся документов, где обычно утверждается, что при перемещении папки/файла внутри того же тома, он сохранит свои исходные разрешения NTFS, как неявные, так и явные. Возможно, это было когда-то верно в старых версиях Windows, но было проверено мной и автором сообщения, поскольку больше не относится к неявным разрешениям в Windows 7 и Windows 10.

Пример ошибочно задокументированных правил хода см. в статье Как обрабатываются разрешения для файлов и папок при перемещении или копировании файлов в Windows 2008 R2 и Windows 7. Эта статья стала источником моей дискуссии ниже с автором, в ходе которой мы вместе открыли истинные правила, управляющие копированием и перемещением в NTFS.

решение2

К превосходному и всеобъемлющему объяснению harrymc следует добавить еще одну важную деталь, которая в конечном итоге приводит к разным поведениям: перемещение файлов иногда происходит в стиле 2003 года, а иногда — в стиле 2008 года.

Обновление способа перемещения внутри тома NTFS в версиях 2008/Vista и выше не является полной переработкой, а лишь добавлением второго шага в фоновом режиме.

Шаг 1)MFT обновляется; файл перемещается и сохраняет исходные разрешения.
(Как и в 2003/XP и более ранних версиях. На этом этапе работа над этими ОС останавливается.)

Шаг 2)Списки ACL обновляются, чтобы удалить унаследованные разрешения исходной родительской папки и применить унаследованные разрешения новой родительской папки.
(Это дополнительный шаг, добавленный в 2008/Vista, чтобы файлы имели разрешения целевой папки.)

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

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

Изящного решения не существует — вы либо даете пользователямИзменить разрешенияправа такШаг 2может быть выполнено успешно, или любые файлы, перемещенные между папками с разными разрешениями на одном и том же томе файлового сервера, сохранят свои исходные разрешения до тех пор, пока они не будут принудительно перенесены.

Связанный контент