На днях я решил перейти на другой FTP-сервер. Если прежде я использовал vsftpd, то сейчас требования к системе несколько изменились, на сервере стало намного больше пользователей и очереди файлов у них стали намного длиннее. Установку и настройку описывать не буду, так как этого добра в Интернете достаточно и даже я установил сервер по одной из таких инструкций с англоязычного сайта. Под наши требования, естественно, пришлось немного переделать рекомендованные конфигурационные файлы, однако до последнего я не мог справиться только с последним заданием, а именно со скрытием файлов.
Под скрытием файлов в моем случае подразумевается просто отсутствие их в отображаемом пользователю каталоге, поскольку эти файлы и папки будут пользователя вводить в заблуждение, что совершенно неуместно. В proftpd.conf, конечно же, есть разные директивы, но по какой-то непонятной причине они на моем сервере не применяются. По-видимому, я перенастроил его как-то так, что даже и сам не могу понять, как именно. Через некоторое время поисков выяснилось, что proftpd имеет такой же файл тонкой настройки, как и Apache2, только у Apache он называется «.htaccess», а у proftpd ― «.ftpaccess» соответственно. Этот файл, так же, как и более известный аналог, размещается в той директории, к которой следует применить тонкие настройки, однако при этом указанные настройки касаются не только конкретной директории, а и всех вложенных в нее. В файле «.ftpaccess» имеется замечательная директива «HideFiles», которая в proftpd.conf со мною дружить не захотела, которая позволяет в виде выражения указать, какие именно файлы и папки следует скрывать от пользователя. Ограничение при этом касается только отображения, но это ни в коей мере не запрещает пользователю просмотреть содержимое скрытой папки либо перезаписать скрытый файл ― для всего этого достаточно только знать имя скрытого файла/папки (я бы не советовал на это полагаться, если файлы должны быть недоступны пользователю для записи, поскольку то, что скрывает proftpd, к примеру, с легкостью может выдать Apache).
А теперь подробнее о том, что мне нужно скрыть. На выделенном под файловый архив жестком диске имеется две системных директории: «lost+found» и «.Trash-1000». Поскольку просмотреть раздел можно и непосредственно с компьютера, играющего роль сервера, через графический интерфейс, эти папки скрыты при помощи файла «.hidden», который сам по себе считается скрытым из-за того, что его имя начинается с точки (увы, proftpd эти правилам не следует). Кроме всего прочего, некоторые приложения имеют свойство создавать резервные копии редактируемых файлов, которые удаляются неизвестно по каким дням недели и отличаются от оригинала только наличием тильды в качестве последнего символа в имени файла с учетом расширения (если таковое указано). Честно говоря, эта тильда начала уже путать не то что каких-то там невнимательных блондинок, а и меня, поскольку при перезаписи я смотрю, в первую очередь, на начало названия, а не на его конец. Все эти правила мне нужно было назначить для скрытия на FTP-сервере. Оказалось, что это совсем нетрудно, нужно лишь создать в корневом каталоге FTP-сервера файл «.ftpaccess» и указать в нем правильно заполненную директиву «HideFiles». Эта директива, несмотря на то, что на некоторых американских форумах пишут обратное, может быть объявлена в файле только однократно. Если вы вдруг объявите ее второй раз, то ошибкой это не будет и сервер не упадет при попытке запуска, однако исполняться будет только самое первое в файле правило. Если вам нужно одно правило, то его можно указать без скобок, вот так:
HideFiles lost\+found$
HideFiles (lost\+found|.Trash\-1000|.hidden|\~)$
Попрошу учесть, что на моем сервере тильда используется только для маркировки резервных копий. Перед тем, как скрывать файлы, в именах которых она содержится, я бы рекомендовал просмотреть список тех файлов, которые будут скрыты. Также одно небольшое дополнение: иногда обновление не помогало и в моем клиенте отображались скрываемые директивами файлы. Для того, чтобы убедиться в том, что все работает, попробуйте загрузить на сервер файл либо переподключиться к серверу. В этих случаях происходит полное обновление отображаемого каталога и все указанные в «.ftpaccess» правила учитываются. Перезагружать proftpd не нужно (вы ведь не перезагружаете Apache при правке файла «.htaccess»?).
Итак, старые файлы спрятались, но появились новые. Теперь глаза мозолит не нужный пользователю «.ftpaccess». Его тоже можно скрыть, прописав в нем же самом. Точку при этом экранировать не нужно, поступайте так же, как и с «.hidden».
На всякий случай еще раз добавлю: эти директивы не запрещают доступ пользователю к этим файлам, а просто скрывают его. Перезаписать скрытые файлы и взаимодействовать со скрытыми директориями по-прежнему можно. Если вы хотите именно ограничить доступ, то вам следует смотреть в сторону запрета на прием/передачу файлов по маске в proftpd.conf либо в сторону прав доступа на файл/папку, которые бы предотвращали чтение запрещенных документов даже и тем пользователем, от которого в вашей системе работает proftpd.