Вы не можете этого сделать: если пользователь может создавать файлы, они будут принадлежать ему, и он сможет их изменять и стирать.
Я собирался предложить простую схему, чтобы иметь промежуточный каталог (где пользователь может делать то, что он хочет) и входящий каталог (недоступный для пользователя) с небольшой привилегированной программой для перемещения файлов из промежуточного каталога во входящий каталог. Но на самом деле это сложно сделать правильно: помимо всего прочего вам нужно позаботиться о том, чтобы привилегированная программа не перемещала файлы в другие каталоги (остерегаясь условий гонки, символических ссылок ../
), не перезаписывала существующие файлы ( rename(3)
атомарно, но может стереть место назначения), не позволит пользователю держать дескриптор файла открытым и изменять файл после его перемещения (поэтому лучше скопировать, чем переместить). Вместо этого я рекомендую взять существующее надежное решение:
- Попросите пользователя загрузить файл по HTTP.
- Попросите пользователя зафиксировать систему контроля версий. Он также сможет фиксировать новые версии.