View Issue Details

IDProjectCategoryView StatusLast Update
0003730Far ManagerEditorpublic2019-08-10 10:50
Reporterrdavidiuk Assigned ToDrKnS  
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Platformx64OSWindowsOS Version10
Product Version3.0 
Fixed in Version3.0 
Summary0003730: Неверные права доступа к файлу, сохранённому из Редактора
DescriptionПроблема возникла после обновления от Build 5400 до Build 5445. Раньше этой проблемы не было.
У меня в корне диска C: есть текстовый файл, который я часто изменяю Редактором (F4). Этому файлу установлены права доступа (ACL), позволяющие всем пользователям писать в него (фактически пользователь один - я, с правами Администратора).
После обновления Far до Build 5445, в Редакторе (F4) при сохранении (F2) этого изменённого файла появляется диалог, предлагающий повысить привилегии для открытия файла:
╔════════════════════ Access denied ═════════════════════╗
║ You need to provide administrator permission           ║
║ to open this object:                                   ║
║ \\?\C:\FAR3D06.tmp                                     ║
║                                                        ║
║ [x] Do this for all current objects                    ║
║ [ ] Do not ask again in the current session            ║
╟────────────────────────────────────────────────────────╢
║                   { ▀▄ OK } [ Skip ]                   ║
╚════════════════════════════════════════════════════════╝
В более ранних Билдах такое сохранение происходило сразу, без этого запроса.
Поскольку имя файла в диалоге не то, что я редактирую, а временное, но директория та же, то я предполагаю, что Редактор Far'а сохраняет сначала в этот временный файл, а затем исходный файл удаляет и временный файл переименовывает в имя редактируемого файла.
Если в этом диалоге я соглашаюсь повысить привилегии, то сохранение происходит, но результирующий файл имеет ACL, унаследованный от содержащей его директории (C:\), с ограничениями.
Полагаю, что для устранения этой проблемы временный файл нужно создавать с таким же ACL, как и редактируемый, но кроме этого нужно ещё и преодолеть ограничение на создание файла в целевой директории (C:\). А может, проще (в ущерб наверное безопасности) делать сохранение непосредственно в редактируемый файл?
Steps To ReproduceДиректория C:\ должна иметь стандартные для неё права доступа, которые устанавливаются при инсталляции Windows.
В корне диска C: создать небольшой текстовый файл и дать всем (Everyone) права доступа на запись (и чтение, или Full control) в него.
Открыть этот файл Редактором Far'а (F4) и попытаться выполнить сохранение (F2).
Увидим запрос Far'а на повышение привилегий, которого не должно быть.
Дать согласие на повышение, ответить запросу UAC.
После сохранения проверить права доступа к результирующему файлу, они теперь содержат ограничения, унаследованные от C:\.
TagsNo tags attached.
Build5448

Activities

DrKnS

2019-08-08 19:49

administrator   bugnote:0016568

Last edited: 2019-08-08 19:51

> Редактор Far'а сохраняет сначала в этот временный файл, а затем исходный файл удаляет и временный файл переименовывает в имя редактируемого файла

Да. При этом используется функция Windows ReplaceFileW, которая должна корректно переносить и права доступа, но в вашем случае что-то пошло не так.

> временный файл нужно создавать с таким же ACL, как и редактируемый

Как правило не нужно (см. выше), но и повредить вроде не должно. 5448.

> (в ущерб наверное безопасности) делать сохранение непосредственно в редактируемый файл

До недавнего времени так и было, да. Файлы иногда портились безвозвратно (см. 3712).
Начиная с 5448 вы можете вернуть старое (небезопасное) сохранение:
  far:config
  Editor.SaveSafely = false

rdavidiuk

2019-08-09 09:45

reporter   bugnote:0016569

Теперь, с 5448 и Editor.SaveSafely = false описанное проблемное сохранение выполняется успешно.
Спасибо.

Issue History

Date Modified Username Field Change
2019-08-08 13:23 rdavidiuk New Issue
2019-08-08 14:14 DrKnS Assigned To => DrKnS
2019-08-08 14:14 DrKnS Status new => assigned
2019-08-08 19:49 DrKnS Status assigned => feedback
2019-08-08 19:49 DrKnS Note Added: 0016568
2019-08-08 19:50 DrKnS Note Edited: 0016568
2019-08-08 19:51 DrKnS Note Edited: 0016568
2019-08-09 09:45 rdavidiuk Note Added: 0016569
2019-08-09 09:45 rdavidiuk Status feedback => assigned
2019-08-10 10:50 DrKnS Status assigned => closed
2019-08-10 10:50 DrKnS Resolution open => fixed
2019-08-10 10:50 DrKnS Fixed in Version => 3.0
2019-08-10 10:50 DrKnS Build => 5448