Назад | Перейти на главную страницу

Как удалить разрешение только на удаление символической ссылки от обычного пользователя в Windows

У нас есть программа, которая создает временный каталог HT на %USERPROFILE%\AppData\Local\Tempи работаю там, и удаляю временный каталог, когда выхожу из программы. Я хочу, чтобы программа генерировала временный каталог не на Temp но раздел SSD F:\Somewhere.

К сожалению, в программе нет настроек для смены временного каталога. Эта среда (Windows) установлена ​​на жестком диске и имеет раздел SSD. (Я не могу установить Windows на SSD из-за некоторых проблем.)

Итак, я думаю, что создаю символическую ссылку HT на %USERPROFILE%\AppData\Local\Temp которые направлены на F:\Somewhere. Вроде сработало. Однако я не смог помешать программе удалить символическую ссылку HT. Другими словами, мне нужно снова и снова создавать символические ссылки после выхода из программы.

Как предотвратить удаление символической ссылки из программы?

Решение, которое я пробовал

Я попытался удалить разрешение на удаление символической ссылки %USERPROFILE%\AppData\Local\Temp\HT от обычного пользователя (программа запускается обычным пользователем, а не пользователем с обновленным UAC).

В разделе «Свойство» -> «Безопасность» -> «Дополнительно» (?, Моя среда - японская, но, похоже, расширенная) 1. Отключить наследование разрешений 2. Добавить политику отклонения разрешения на удаление для обычного пользователя, администратора и системы

Но программа могла удалить символическую ссылку.

Обобщенный вопрос

Как я могу предотвратить удаление символической ссылки на каталог из программы, которая работает не с правами администратора?

P.S. извините за необычные слова. Я использую японские окна, поэтому мне не удалось найти подходящую английскую фразу.

Дополнительные замечания

%USERPROFILE%\AppData\Local\Temp является значением по умолчанию для TMP и TEMP переменная окружения. Скорее всего, приложение использует эту переменную для получения временного каталога.

Просто установите переменную на F:\, например запустив его через .bat файл, и ваша символическая ссылка больше не нужна.

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

Вместо этого вы можете установить флаг только для чтения на символической ссылке. Обратите внимание, что вы должны сделать это из командной строки, потому что графический интерфейс Windows Explorer не поддерживает использование флага только для чтения для каталогов (см. Сноску). Эти команды должны работать:

cd /d %temp%
attrib /L +r HT

Вам также может потребоваться изменить разрешения, чтобы предотвратить перемещение символической ссылки или сброс флага только для чтения:

icacls HT /L /deny Everyone:(M)

По-прежнему существует риск того, что программное обеспечение плохо отреагирует на невозможность удалить символическую ссылку, например, в результате сбоя. В этом случае вы ничего не можете сделать, кроме как попытаться настроить так, чтобы символическая ссылка автоматически воссоздалась по мере необходимости, но, к счастью, это редко.

Сноска:

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

Примечание:

Конкретные права доступа, которые необходимо заблокировать, - это атрибуты записи (WA) для предотвращения сброса флага только для чтения и синхронизация (S) для предотвращения, например, перемещения символической ссылки в корзину. Следует отметить, что этот подход будет работать по желанию только с символической ссылкой на каталог, а не с обычным каталогом, потому что для доступа к содержимому каталога требуется право «Синхронизировать». Похоже, что в NTFS нет способа предотвратить перемещение обычного каталога без изменения разрешений для родительского.