Время от времени у каждого системного администратора возникает потребность в FTP-сервере, чаще всего это связано с необходимостью обеспечить обмен информацией в автоматическом режиме между приложениями, например, при автообмене распределенной информационной базы 1С, или для доступа к файлам на веб-сервере.
Для нашего сервера мы будем использовать vsftpd — простой, быстрый и безопасный FTP сервер. Так как он будет обслуживать как внешнюю, так и внутреннюю сети, то имеет смысл добавить эту роль нашему роутеру. Установка сервера предельно проста:
# apt-get update
# apt-get install vsftpd
Настройка сервера производится через конфигурационный файл /etc/vsftpd.conf он имеет простую структуру, хорошо откомментирован и позволяет настроить сервер без какой-либо инструкции при наличии минимальных знаний. Рассмотрим его основные параметры.
Сначала необходимо скопировать оригинальный файл настроек, чтобы в случае проблем вернуть всё как было:
# cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
Сервер может быть запущен постоянно, как служба или стартовать при необходимости, нам больше подходит первый вариант:
Затем откройте файл в редакторе:
# mcedit etc/vsftpd.conf
1. Указываем, что нужно ожидать входящих соединений:
listen=YES
2. Данная опция имеет взаимоисключающую запись, которую следует привести к виду:
listen_ipv6=NO
3. Разрешим вход только локальным пользователям:
anonymous_enable=NO
local_enable=YES
4. Разрешим пользователям записывать файлы и укажем серверу автоматически выставлять нужные права (755 на папки и 644 на файлы):
write_enable=YES
local_umask=022
Если требуется установить иной набор прав: 775 и 664, то umask должен быть равен 002.
5. По умолчанию сервер использует время GMT, чтобы файлам устанавливалось время вашего часового пояса, используйте опцию:
use_localtime=YES
6. Включим лог загружаемых и скачиваемых файлов:
xferlog_enable=YES
7. Разрешим серверу устанавливать соединения для передачи данных на порт 20 (активный режим):
connect_from_port_20=YES
8. Следующие опции задают место и формат хранения логов:
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
9. Зададим таймауты сессии:
idle_session_timeout=600
data_connection_timeout=120
10. Также в целях безопасности изолируем пользователя в его домашнем каталоге и сразу разрешим запись в его корень:
chroot_local_user=YES
allow_writeable_chroot=YES
11. Для коррекной работы с текстовыми данными можно включить поддержку ASCII, это позволит при передаче текстового файла с Windows системы в UNIX (Linux) корректно заменить символы переноса строки с CR+LF на LF для корректного отображение содержимого и выполнить обратное преобразование при передаче его назад.
ascii_upload_enable=YES
ascii_download_enable=YES
Можно включить только одну опцию, для закачки или скачивания. Обратите внимание, что при передаче бинарного файла в режиме ASCII последний может быть поврежден.
12. Достаточно интересная опция:
ls_recurse_enable=YES
Она позволяет рекурсивный просмотр каталогов, с одной стороны это удобно, с другой способно вызвать большую нагрузку на сервер, если, например, получить листинг директории, содержащей большое количество файлов и каталогов.
13. Все остальные опции оставляем по умолчанию, хотя можете отредактировать приветствие сервера, написав там все что вам нравится:
ftpd_banner=Welcome to Roga i Kopyta LLC FTP
14. В конце конфигурационного файла зададим настройки для пассивного режима, рекомендуется явно задать порты, чтобы была возможность указать их при форвардинге, если сервер стоит за NAT или в правилах брандмауера:
pasv_enable=YES
pasv_min_port=62000
pasv_max_port=62999
Перезапускаем сервер (это нужно делать всякий раз после внесения изменений в конфигурацию):
# service vsftpd restart
и пробуем подключиться любым FTP-клиентом используя учетные данные существующего пользователя. Мы должны попасть в его домашнюю директорию и быть изолированы в ней.
В случае появления ошибки, связанной с некорректной работой vsftpd и системы безопасности seccomp:
500 OOPS: prctl PR_SET_SECCOMP failed
добавьте в файл недокументированную опцию:
seccomp_sandbox=NO
Однако помните, что FTP — небезопасный протокол, поэтому пускать на сервер любого локального пользователя, как это сделано сейчас, не самый лучший вариант. Чтобы избежать такой ситуации vsftpd имеет встроенный механизм контроля пользователей. Добавим в конфигурационный файл опцию:
userlist_enable=YES
и создадим файл списка пользователей:
# touch /etc/vsftpd.user_list
# mcedit etc/vsftpd.user_list
По умолчанию vsftpd запрещает доступ к серверу пользователям, указанным в данном списке еще до ввода пароля, т.е. реализует принцип разрешено всем, кому не запрещено. Но гораздо лучше будет реализовать иной подход: запрещено всем, кому не разрешено. Т.е. разрешать доступ только указанным пользователям. Для этого добавим опцию:
userlist_deny=NO
Теперь доступ к FTP-серверу будут иметь только явно указанные пользователи, их следует указывать в vsftpd.user_list по одному в строку, например:
ivanov
petrov
Если не указано иное, то подключившись по FTP пользователи попадают в свой домашний каталог. Это не всегда удобно, часто нужно перенаправлять их в иную директорию. Если это общая для всех папка, скажем /var/ftp, то можно задать опцию:
local_root=/var/ftp
Которая перенаправит всех пользователей в указанный каталог и изолирует их там.
Пользовательские настройки, которые перекрывают настройки основного конфигурационного файла.
Это самая простая ситуация, реальные задачи обычно сложнее, допустим нам надо установить пользователю Иванову в качестве корневой директории /var/www/example1.com, а Петрову /var/www/example2.com, чтобы каждый из них работал со своей папкой. Для этих целей можно использовать еще одну возможность vsftpd — пользовательские настройки, которые перекрывают настройки основного конфигурационного файла.
Для этого добавим опцию:
user_config_dir=/etc/vsftpd_user_conf
Затем создадим саму директорию
mkdir /etc/vsftpd_user_conf
Чтобы задать пользователю собственные настройки в данной директории следует создать файл с именем пользовтаеля и добавить в него необходимые опции. Изменения применяются без перезапуска FTP-сервера при следующем подключении клиента.
Создадим файл с настройками для Иванова:
tocuh /etc/vsftpd_user_conf/ivanov
и внесем в него опцию:
local_root=/var/www/example1.com
При следующем подключении корневая директория пользователя изменится на указанную. Также в этом файле мы можем задавать любые персональные опции, например, другой umask или права на доступ к файлам. Однако мы не можем использовать здесь глобальные настройки: опции подключения, логгирования, аутентификации, они будут просто игнорироваться.
Если вам нужно скрыть реальных владельцев файлов и папок, то можно использовать опцию:
hide_ids=YES
В этом случае вместо реальных владельцев и групп будет указано ftp:ftp, это может быть полезным в случае публичного сервера или наличия в списке пользователей посторонних лиц, которым вы не хотите раскрывать реальные имена пользователей вашей системы.
Как видим, мы действительно создали рабочий FTP-сервер менее чем за полчаса.
ИСТОЧНИКИ.
Простой FTP-сервер на базе Ubuntu (vsftpd).
Автор: Уваров А.С. 27.02.2012