Установка и настройка FTP сервера (VSFTPD) на Ubuntu server 14.04.5 LTS.

Разберем как установить и настроить простой, быстрый и безопасный FTP-сервер vsftpd на Ubuntu server 14.04.5. 

1. Обновляем систему до актуального состояния: 

$ sudo apt-get update

$ sudo apt-get upgrade

2. Устанавливаем FTP-сервер (vsftpd) из репозитариев: 

$ sudo apt-get install vsftpd 

В процессе установки создастся пользователь ftp с домашним каталогом /srv/ftp. При желании место положение папки можно будет изменить.

3. Настройка сервера производится через конфигурационный файл /etc/vsftpd.conf, ниже я размещаю его с подробными комментариями по каждому параметру. Разобраться в нем не составит труда и позволит с легкостью настроить сервер без каких-либо усилий. 

# Конфигурационный файл /etc/vsftpd.conf

## Загружать vsftpd в автономном режиме. Это означает, что vsftpd не должен загружаться из inetd. Вместо этого, vsftpd будет загружаться напрямую. vsftpd сам позаботится о прослушивании и перехвате входящих соединений. 

listen=YES

# То же, что и параметр listen, за исключением того, что vsftpd будет слушать IPv6 сокет вместо, IPv4.  Этот параметр и параметр listen являются взаимно исключаемыми. 

#listen_ipv6=YES

# Разрешим серверу устанавливать соединения для передачи данных на порт 20 (активный режим).

connect_from_port_20=YES

# Разрешить анонимные подключения, если разрешено, то пользователи ftp и anonymous распознаются как анонимные логины. 

anonymous_enable=NO

# Разрешить анонимным пользователям загружать файлы на сервер. Правило работает в случае если разрешено пользователям загружать файлы на сервер (write_enable). 

anon_upload_enable=NO

# Разрешать анонимным пользователям создавать папки на сервере. 

anon_mkdir_write_enable=NO

# Если установлено в YES, анонимный пользователь сможет иметь разрешение на запись,помимо загрузки  и создания директории, такое как удаление и переименование. 

anon_other_write_enable=NO

# При загрузки файлов на сервер анонимным пользователем, указывать владельца файла другого пользователя. (Не рекомендуется использовать уч. root). 

#chown_uploads=YES

#chown_username=whoever

# Разрешить локальные учетные записи. Если опция задействована, обычные пользовательские учетные записи в /etc/passwd могут использоваться для входа. 

local_enable=YES

# Запирать локальных пользователей в их домашних каталогах. 

chroot_local_user=YES

# Разрешить запись в домашнем каталоге локальным пользователям. 

allow_writeable_chroot=YES

# Использовать список локальных пользователей которые не будут ограничены своими домашними каталогами, в отличии от пользователей не вошедших в список. 

chroot_list_enable=NO

# Путь к списку пользователей (пользователи задаются по одному на каждую строку). 

chroot_list_file=/etc/vsftpd.chroot_list

# Если пользователь попытается зайти, используя имя из этого файла, вход будет запрещен прежде, чем у него спросят пароль. 

userlist_enable=NO

# Путь к списку пользователей (пользователи задаются по одному на каждую строку). 

userlist_file=/etc/vsftpd.user_list

# Если установлено в NO, то пользователи не будут иметь возможности авторизоваться, до тех пор, пока они не будут указаны в файле определенном в userlist_file. Когда логины запрещены, запрет будет показан прежде, чем у пользователя спросят пароль.

userlist_deny=YES

# Путь к пользовательским конфигурациям 

user_config_dir=/etc/vsftpd_user_conf

# Опция для автоматического создания домашней директории каждому виртуальному пользователю, основана на шаблоне. 

#user_sub_token=$USER

# Перенаправление подключившихся пользователей вместо домашнего каталога, в иной каталог. 

local_root=/srv/ftp

# Виртуальные пользователи пользуются такими же привилегиями, что и локальные. 

virtual_use_local_privs=YES

# Если опция установлена, все не анонимные логины классифицируются как «guest» логины. 

guest_enable=NO

# Задается имя пользователя гостевого логина. 

guest_username=ftp

# Разрешить пользователям загружать файлы на сервер.

write_enable=YES

# Автоматически задавать права на создание файлов, применяемое к локальным пользователям. 

#local_umask=022

# Если установленное значение NO, все запросы на скачивание файлов не разрешены. 

download_enable=YES

# Файлы начинающиеся с «.» и «..» будут показываться в листинге директории. 

force_dot_files=NO

# Если опция установлена, вся пользовательская и групповая информация в списке директорий, выводится как «ftp». 

hide_ids=NO

# Список указывающий поддерживаемые FTP команды (post login. USER, PASS and QUIT всегда разрешены в pre-login).  Другие команды отвергаются. Например: cmds_allowed=PASV,RETR,QUIT. 

#cmds_allowed=

# Перечень файловых имен (и имен директорий), к которым нельзя получить доступ. Затронутые файлы и директории  не скрыты, но любое действие с ними (скачивание, смена директории и тд) будет запрещено.  Например: deny_file={*.mp3,*.mov,.private}. 

#deny_file=

# Перечень файловых имен (и имен директорий), которые должны быть скрыты их списка директорий. Если, что они являются скрытыми, они полностью доступны для тех, кто знает какие фактические названия использовать. Например: deny_file={*.mp3,*.mov,.private}. 

#hide_file=

# Максимально разрешенная скорость передачи данных, для в байтах в секунду, для локальных пользователей. 0 (не ограничено). 

local_max_rate=0

# Если vsftp в автономном режиме, эта опция задает максимальное количество клиентов, которое может быть подключено. Любые, дополнительно подключившиеся пользователи, получат сообщение об ошибке. 0 (не ограничено). 

max_clients=0

# Если vsftp в автономном режиме, эта опция задает максимальное количество клиентов, которое может быть подключено из одного адреса. Клиенты получат ошибку, если они пересекут этот барьер. 0 (не ограничено). 

max_per_ip=0

# Показывать пользователям FTP сервера сообщения, когда они входят в новую директорию. По умолчанию, директория сканируется на наличие файла .message, но можно изменить расположение файла опцией (message_file). 

dirmessage_enable=YES

# Путь к файлу, который мы видим когда входим в новую директорию. 

#message_file=

# Использование локального времени. 

use_localtime=YES

# Таймаут в секундах, которое является максимальным значением, которое клиент может провести  между вводом FTP команд. 

idle_session_timeout=600

# Таймаут в секундах, который является максимальным значением, приема данных без прогресса. 

data_connection_timeout=120

# Имя пользователя использующееся vsftpd, когда он хочет быть полностью непривилегированным. Опция должна выделяться пользователю чаще, чем записи nobody. Пользователь nobody, не должен использоваться для большинства важных вещей, на большом количестве машин. 

#nopriv_user=ftpsecure

# Для корректной работы с текстовыми данными можно включить поддержку ASCII, это позволит при передаче текстового файла с Windows системы в UNIX (Linux) корректно заменить символы переноса строки с CR+LF на LF и выполнить обратное преобразование при передаче его назад.

ascii_upload_enable=YES

ascii_download_enable=YES

# Использовать рекурсивный просмотр каталогов. 

ls_recurse_enable=NO

# Задается путь к пустой директории. Директория не должна быть доступна для записи ftp пользователем.  Директория используется безопасной клеткой во время, когда vsftpd не запрашивает доступ к файловой системе. 

secure_chroot_dir=/var/run/vsftpd/empty

# Приветственное сообщение при подключении к серверу. 

ftpd_banner=Jakonda FTP сервер.

# Включение логирования загружаемых/скачиваемых файлов. 

xferlog_enable=YES

# При желании можно указать другое место хранение логов. 

#xferlog_file=/var/log/vsftpd.log

# Записывать лог файл в стандартный формат xferlog, как используемый в wu-ftpd. 

#xferlog_std_format=YES

# Когда опция включена, все FTP запросы и ответы протоколируются, опция xferlog_std_format не включается. 

log_ftp_protocol=YES

# Использование пассивного режима. 

pasv_enable=YES

# Максимальное значение порта, для соединения типа PASV. Может использоваться для определения диапазона портов, для помощи файрволу. 

pasv_max_port=0

# Минимальное значение порта, для соединения типа PASV. Может использоваться для определения диапазона портов, для помощи файрволу. 

pasv_min_port=0

# Таймаут в секундах, для удаленного клиента, для начала соединения c помощью PASV. 

accept_timeout=60

# Строка содержит имя сервиса PAM, который будет использоваться vsftp. 

pam_service_name=vsftpd

# Использование безопасного соединения через SSL. 

ssl_enable=NO

# Если опция установлена, она позволяет соединения по протоколу SSL v2. 

ssl_sslv2=NO

# Если опция установлена, она позволяет соединения по протоколу SSL v3. 

ssl_sslv3=NO

# Если опция установлена, она позволяет соединения по протоколу TLS v1. 

ssl_tlsv1=YES

# Если установлена в YES, анонимные пользователи могут использовать защищенное SSL соединение. 

allow_anon_ssl=NO

# Если она активирована, все не анонимные логины вынуждены использовать защищенные SSL соединения при передаче и получении данных, при соединении. 

force_local_data_ssl=YES

# Если она активирована, все не анонимные логины вынуждены использовать защищенные SSL соединения при передаче паролей. 

force_local_logins_ssl=YES

# Определение местоположение RSA сертификата, для использования в шифрованных SSL соединениях. 

rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

# Определение местоположения RSA ключа, для использования в шифрованных SSL соединениях. 

rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

# Опция может быть использована для выбора SSL шифра поддерживаемых для защищенных SSL соединений. Ограничение шифра может быть использовано для улучшения безопасности, поскольку это предотвращает удаленные попытки отгадать шифр. 

ssl_ciphers=DES-CBC3-SHA

# Многократное использование одной сессии 

require_ssl_reuse=NO

Представленная выше конфигурация представляет собой уже рабочий вариант FTP сервера, с запретом на анонимные подключения, подключения только по локальным учетным записям имеющиеся в файле /etc/passwd, с запиранием пользователей в их домашних каталогах. Без использования SSL соединения, без каких либо запретов на загрузку и скачивание.

Настройка доступа локальных пользователей к FTP-серверу.

Пускать на сервер любого локального пользователя, не самый лучший вариант, vsftpd имеет встроенный механизм контроля пользователей. Настроим доступ на FTP только для тех локальных пользователей которым считаем нужным дать доступ.

1. Разрешаем использовать локальные учетные записи:

# Разрешить локальные учетные записи. Если опция задействована, обычные пользовательские аккаунты в /etc/passwd могут использоваться для входа. 

local_enable=YES

2. Включаем использование списка пользователей:

# Если пользователь попытается зайти, используя имя из этого файла, вход будет запрещен прежде, чем у него спросят пароль. 

userlist_enable=YES

3. Создаем список пользователей которым будет разрешен доступ:

sudo touch /etc/vsftpd.user_list

И указываем в нем тех пользователей, которых считаем нужными. По одному на каждую строку.

jakonda1

jakonda2

4. Указываем путь к списку пользователей: 

# Путь к списку пользователей (пользователи задаются по одному на каждую строку). 

userlist_file=/etc/vsftpd.user_list

Теперь чтобы пользователи указанные в списке vsftpd.user_list имели доступ на подключение к FTP, изменим параметр директивы userlist_deny: 

# Если установлено в NO, то пользователи не будут иметь возможности залогинится, до тех пор, пока они не будут указаны в файле определенном в userlist_file. Когда логины запрещены, запрет будет показан прежде, чем у пользователя спросят пароль.

userlist_deny=YES

В целях безопасности запираем пользователей в их домашних каталогах: 

# Запирать локальных пользователей в их домашних каталогах. 

chroot_local_user=YES

Если необходимо, то разрешаем пользователям запись в домашнем каталоге: 

# Разрешить запись в домашнем каталоге локальным пользователям 

allow_writeable_chroot=YES

Если кого либо из пользователей не нужно запирать в его домашнем каталоге, то создадим список пользователей которые не будут заперты в домашнем каталоге: 

sudo touch /etc/vsftpd.chroot_list

И указываем в нем тех пользователей, которых считаем нужными. По одному на каждую строку. 

jakonda1

Указываем путь к списку пользователей: 

# Путь к списку пользователей (пользователи задаются по одному на каждую строку). 

chroot_list_file=/etc/vsftpd.chroot_list

Указываем в директиве, что пользователи не вошедшие в список пользователи не будут ограничены своим домашним каталогом:

 # Использовать список локальных пользователей которые не будут ограничены своими домашними  каталогами, в отличии от пользователей не вошедших в список. 

chroot_list_enable=NO

Если подключившихся пользователей нужно перенаправлять в иную директорию, вместо их домашних каталогов, то нужно указать ее: 

# Перенаправление подключившихся пользователей вместо домашнего каталога, в иной каталог.  

local_root=/srv/ftp

После внесения изменений, перезапускаем vsftpd: 

$ sudo service vsftpd restart

Проверяем работу. 

Использование пользовательских настроек в работе VSFTPD.

Если необходимо разным пользователям установить разные корневые директории (прим. Jakonda1  /srv/ftp/jakonda1, Jakonda2  /srv/ftp/jakonda2), чтобы каждый из них работал только со своей папкой. Для решения этой задачи используем возможность vsftpd пользовательские настройки, которые перекрывают настройки основного конфигурационного файла /etc/vsftpd.conf. 

Задается место положение пользовательских конфигурационных файлов задаются опцией (по-умолчанию /etc/vsftpd_user_conf):

# Путь к пользовательским конфигурациям 

user_config_dir=/etc/vsftpd_user_conf 

Создаем директорию, для хранения пользовательских настроек: 

sudo mkdir /etc/vsftpd_user_conf

Создадим файлы с именами пользователей для которых нам нужно задать пользовательские настройки и добавим в каждый из них необходимые опции. 

tocuh /etc/vsftpd_user_conf/jakonda1

tocuh /etc/vsftpd_user_conf/jakonda2

Для пользователя jakonda1 задаем опции: 

# Если установленное значение NO, все запросы на скачивание файлов не разрешены. 

download_enable=YES 

# Разрешить пользователям загружать файлы на сервер. 

write_enable=YES

# Перенаправление подключившихся пользователей вместо домашнего каталога, в иной каталог. 

local_root=/srv/ftp/jakonda1 

Для пользователя jakonda2 задаем опции: 

# Если установленное значение NO, все запросы на скачивание файлов не разрешены. 

download_enable=YES

# Разрешить пользователям загружать файлы на сервер. 

write_enable=YES 

# Перенаправление подключившихся пользователей вместо домашнего каталога, в иной каталог. 

local_root=/srv/ftp/jakonda2 

Теперь при подключении пользователя jakonda1 и jakonda2, им будет разрешено скачивать файлы, записывать файлы и для каждого пользователя будет открываться заданная корневая директория.

Мы разобрали как установить VSFTPD и выполнить на примерах базовые настройки и организации доступа.


ИСТОЧНИК.

Установка и настройка FTP сервера (VSFTPD) на Ubuntu server 14.04.5 LTS.