05.10.2008

FTP-сервер в "песочнице": как добраться до данных вне неё?

Источник

Когда ftp-сервер работает в "песочнице" (используется chroot), задействовать обычные симлинки (symlinks) на директории, расположенные вне корневой директории ftp-сервера, не представляется возможным, так как для ftp-сервера они находятся вне доступного дерева каталогов. Но держать абсолютно все файлы и каталоги в корневом каталоге ftp-сервера тоже не всегда возможно и рационально.

В этом случае спасает опция -o bind или --bind утилиты mount. Расмотрим, как это работает.

Допустим, что корневой каталог ftp-сервера - /var/ftp. А нам нужно, чтобы пользователи нашего ftp-сервера получили доступ "только на чтение" к каталогу music, который лежит на сервере в каталоге /home/user/, т.е. полный путь - /home/user/music. Решение нашей задачи выглядит так:

1. Создаём каталог - точку монтирования:


mkdir -p /var/ftp/music


2. Выполняем монтирование так:


mount -o ro,bind /home/user/music /var/ftp/music


или так:


mount -o ro --bind /home/user/music /var/ftp/music


После этого, наш ftp-сервер сможет получить доступ к этим данным.

Обратите внимание, что данная возможность появилась в linux с версии ядра 2.4.0

или внести изменения в файл /etc/fstab добавив строку:

/home/budda/downloads /var/ftp/pub/disk80 -o ro,rbind 0 0