Вопрос или проблема
Когда я удаляю файл, который является жесткой ссылкой на другой файл, это сбрасывает разрешения на другом файле. Как этого избежать?
Шаги для воспроизведения:
- создайте каталог d
- установите на него определенные разрешения (с включенным наследованием)
- добавьте файл a в d
- mklink /H b a
- файлы a и b должны иметь разрешения, унаследованные от d
- удалите a или b
- оставшийся файл не сохраняет разрешения от d
Удаление любого объекта отправляет ссылочный узел файла в корзину, что убирает унаследованные разрешения.
Если это было последнее действие, обновившее разрешения, то это удаленное ACL продолжает применяться к оставшемуся объекту (до тех пор, пока ACL не будет обработан и повторно применен). Подробнее см. в ответе здесь: https://superuser.com/a/1597524/673426.
Вы можете избежать этого, используя символические ссылки (без /H
), или удаляя объекты так, чтобы они не отправлялись в корзину, например, Shift+Delete или через командную строку.
Обратное также верно. Удаление жесткой ссылки (без отправки в корзину) не обновляет ACL цели, так что вы можете получить “призрачные” записи разрешений. Существуют сложности в управлении этим, поэтому будьте осторожны с созданием жестких ссылок между папками с различными разрешениями.
Ответ или решение
NTFS (New Technology File System) предоставляет множество мощных функций, касающихся управления файлами, включая возможность создания жёстких ссылок. Жёсткие ссылки позволяют связать несколько файловых имён с одним и тем же физическим содержимым на диске. Однако работа с ними может вызывать некоторые непредвиденные последствия, особенно в отношении разрешений на доступ.
Теория
NTFS жёсткие ссылки представляют собой механизм, посредством которого один и тот же файл может быть представлен под разными именами. Это становится возможным за счёт использования структуры, известной как индекс узлов (inode), который хранит информацию об истинном содержимом файла на диске. Когда вы создаете жёсткую ссылку, фактически создается новая запись в файловой таблице, которая указывает на тот же самый физический объект данных.
Важной особенностью жёстких ссылок является то, что они не дублируют сам файл, а лишь добавляют новое имя, под которым тот же файл может быть доступен. Поскольку все жёсткие ссылки на один и тот же файл имеют общий индекс узлов, удаление одной из ссылок не уничтожает сам файл, пока на него остаются другие ссылки.
Пример
Как описано в проблеме, после создания директории и настройки её разрешений в Windows, файл ‘a’ и его жёсткая ссылка ‘b’ наследуют эти разрешения от директории. Однако, если одна из ссылок — либо ‘a’, либо ‘b’ — удаляется, то оставшийся файл теряет наследуемые разрешения. Это происходит потому, что удаление файла отправляет индекс узлов в корзину, что автоматически сбрасывает наследуемые разрешения.
Когда файл или его жёсткая ссылка попадают в корзину, NTFS удаляет все свойства безопасности, включая наследуемые списки контроля доступа (ACL). Если не выполняется никаких дополнительных операций по обновлению ACL, оставшийся файл сохраняет эту "раздетую" конфигурацию разрешений — пока ACL не будет заново пересчитан и применён.
Применение
Для того чтобы избежать проблем с потерей разрешений при удалении жёстких ссылок, рекомендуется воспользоваться несколькими методами:
-
Использование символических ссылок вместо жёстких (symlinks, без параметра /H): В отличие от жёстких, символические ссылки не хранятся в файловой таблице на уровне индекса узлов, а потому не вызывают сброс наследуемых разрешений при удалении.
-
Удаление файлов без отправки в корзину: Чтобы сохранить настройки ACL, можно удалять файлы или жёсткие ссылки с использованием сочетания клавиш Shift + Delete или через командную строку. Это помогает миновать попадание объекта в корзину и сохраняет текущее состояние разрешений.
-
Проверка и обновление ACL после удаления: Если удалить одну из ссылок без применения вышеописанных методов, следует вручную проверять разрешения оставшегося файла и при необходимости их восстанавливать.
Кроме того, следует учитывать обратную ситуацию, когда удаление жёсткой ссылки без помещения её в корзину может привести к созданию "призрачных" записей в ACL. Таким образом, особое внимание стоит обращать при создании жёстких ссылок в каталогах с разными разрешениями, что поможет избежать возможных проблем с доступом к файлам.
В завершение, работа с NTFS жёсткими ссылками требует понимания их механизмов и связанных с ними нюансов в управлении разрешениями. Эти примеры и советы помогут вам избежать потери важных настроек доступа и обеспечат более безопасную работу с файлами в вашей системе.