Есть Filezilla, запущенный от отдельного пользователя.
Как дать этому пользователю доступ на чтение только директории F:\data\public?
Как я понимаю, помимо этой директории придётся дать ему доступ на чтение и траверс F:\, F:\data.
Но в NTFS сработает наследование, и другие директории унаследуют ненужные им права.
К примеру F:\data\private унаследует от F:\data право на чтение.
Можно всем вложенным директориям кроме нужных отключить наследование, и задать нужные права, но это неудобно, потому что (во первых их может быть много) при создании, допустим F:\data\foo, она по умолчанию унаследует право на чтение от F:\data и придётся каждый раз помнить о необходимости задать права.
Оптимально было бы для F:\ и F:\data задать отдельно их собственные права, и отдельно права, которые будут наследоваться вложенными в них директориями. Но похоже такой сценарий не предусмотрен.
Оказалось, что из-за Bypass Traverse Checking исходная посылка исходная посылка «помимо этой директории придётся дать ему доступ на чтение и траверс F:\, F:\data» оказалась неверна, и проблемы нет.
Более того, выяснилось, что если дать пользователю право на чтение и траверс f:\downloads\public, но при этом не давать прав на f:\ и f:\downloads — он может нормально работать с директорией f:\downloads\public даже без использования симлинков, достаточно только указать полный путь.
Происходит это благодаря Bypass Traverse Checking.
Наследование можно отключить. В закладке «Безопасность» есть кнопка «Дополнительно» (Windows XP). Там все это можно выставить.
У меня так сделано на флэшкарте, расформатированной под NTFS. Вирусы у «пациентов» одолели… А найти флэшке с заветным switch'ером очень сложно. (>_<)
Отключить наследование — можно поподробнее?
Вкладка «Дополнительно» — через неё я всё и настраивал, знаю что там можно отключить наследование текущей директорией прав от родительской. Но этот способ неудобен по двум причинам — во первых для каждой вложенной директории типа f:\data\foo, f:\data\bar,… — придётся лезть в свойства, отключать наследование, и явно выставлять права. Но это не так плохо, хуже то, что при создании новой директории, к примеру f:\data\new по умолчанию она унаследует права от родительской директории f:\data, и если забыть поменять, то всё будет плохо.
То есть смысл в том, что нужно для родительской директории чтобы было право на чтение, но при этом создаваемые в ней поддиректории имели более жесткие ограничения.