FTP-сервер vsftpd: установка, настройка и использование

Автор: Виктор Вислобоков
06.12.2008

Предисловие

FTP-сервер vsftpd является хорошей альтернативой FTP-серверам wu-ftpd и proftpd. Он обеспечивает многие из их возможностей, но при этом значительно легче настраивается, а также, что наиболее важно, потенциально содержит значительно меньше ошибок, связанных с безопасностью, потому что (как следует из самого названия) Very Secure FTP daemon, задумывался и разрабатывался с упором на безопасность.

Кратко говоря, vsftpd - это наилучший выбор для большинства пользователей, которым нужно установить FTP-сервер, но при этом не нужны какие-либо особые навороты, типа виртуализации FTP-серверов, а также дополнительных схем авторизации и прочих несомненно интересных, но не так уж нужных большинству пользователей вещей.

Установка vsftpd

Установка для дистрибутивов Fedora, RedHat и CentOS проста и интуитивно понятна (выполняется от root'а):

yum install vsftpd

При корректно настроенных репозитариях пакетов yum (а по умолчанию после установки они настроены корректно) - всё устанавливается само собой, потому что vsftpd входит в состав этих дистрибутивов и даже является FTP-сервером по-умолчанию.

Далее, необходимо убедиться, что vsftpd запустит при старте системы. Убедиться в этом можно командой (которую необходимо выполнять от root'а):

# chkconfig --list vsftpd

Если вы ничего не делали с настройками, то вы увидите:

vsftpd          0:выкл  1:выкл  2:выкл  3:выкл  4:выкл  5:выкл  6:выкл

Что означает, что при старте системы vsftpd запущен не будет! Для того, чтобы это всё-таки произошло, наберите:

chkconfig vsftpd on

Это позволит установить уровни запуска SystemV для vsftpd по умолчанию. Теперь проверяем снова:

# chkconfig --list vsftpd
и видим:
vsftpd          0:выкл  1:выкл  2:вкл   3:вкл   4:вкл   5:вкл   6:выкл
Совсем другое дело!

Собветвенно на этом весь процесс установки и заканчивается. Можно было бы запустить vsftpd вручную или перезагрузив компьютер, но подождите! Сперва надо разобраться с настройками в файле /etc/vsftpd/vsftpd.conf

Настройка vsftpd

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

Параметр Значение по умолчанию Пояснение
Логические
allow_anon_ssl NO Значение YES позволяет анонимным пользователям подключаться через SSL-соединение.
anon_mkdir_write_enable NO Значение YES позволяет анонимным пользователям при определённых условиях создавать каталоги. Чтобы они могли это делать, должен быть включен параметр write_enable и анонимный пользователь должен иметь права на запись для родительского каталога.
anon_other_write_enable NO Значение YES позволяет анонимным пользователям выполнять не только операции закачки файлов и создания каталогов, но и операции удаления и переименования.
anon_upload_enable NO Значение YES позволяет анонимным пользователям осуществлять закачку файлов на сервер при определённых условиях: должен быть включен параметр write_enable и анонимные пользователи должны иметь права на запись в каталог закачки. Этот параметр также должен быть включен для того, чтобы виртуальные пользователи могли закачивать файлы так как по умолчанию виртуальные пользователи считаются анонимными./td>
anon_world_readable_only YES Значение YES говорит, что анонимные пользователи могут скачивать только файлы, доступные на чтение всем. Это такие файлы, владельцем которых является пользователь ftp, что особенно касается закаченных файлов.
anonymous_enable YES Значение YES разрешает подключаться к серверу анонимным пользователям с именами ftp и anonymous.
ascii_download_enable NO Значение YES позволяет выбрать для скачивания файлов режим ASCII
ascii_upload_enable NO Значение YES позволяет выбрать для закачивания файлов режим ASCII
async_abor_enable NO Значение YES включает возможность использования специальной команды FTP, известной как "async ABOR". Не все клиенты поддерживают эту команду, к тому же, её неудобно управлять. Но к сожалению, некоторые FTP-клиенты будут "зависать" при отмене передачи файлов, если данная команда будет недоступна, так что возможно вы захотите включить её.
background YES Значение YES включае выполнение vsftpd в фоновом режиме.
check_shell YES Внимание! Данная опция работает только для vsftpd, собранного без PAM!. Если NO, то vsftpd не проверяет наличие shell локального пользователя в /etc/shells. Обычно же, если shell пользователя не найден в /etc/shells, то в доступе по FTP этому пользователю будет отказано!
chmod_enable YES Значение YES позволяет локальным пользователям использовать команду SITE CHMOD. Анонимным пользователи НИКОГДА не разрешается использовать эту команду!
chown_uploads NO Значение YES приводит к тому, что для всех файлов, которые закачивают анонимные пользователи, владелец будет изменён на пользователя, указанного в параметре chown_user-name. Это полезно для административных целей и возможно из соображений безопасности.
chroot_list_enable NO Значение YES позволяет задать список локальных пользователей, для которых после входа будет выполнен chroot() в их домашний каталог. Есть параметр chroot_local_user установлен в YES, то всё работает с точностью до наоборот: для локальных пользователей в предоставляемом списке НЕ БУДЕТ выполняться chroot(). По умолчанию, список пользователей находится в файле /etc/vsftpd/chroot_list, однако вы можете указать другое имя файла с помощью параметра chroot_list_file
chroot_local_user NO Значение YES приводит к тому, что после входа, для локальных пользователей будет выполнен chroot() в их домашний каталог. Внимание! Данный параметр может нанести ущерб безопасности, особенно в случае, когда пользователи могут закачивать файлы или имеют shell доступ. Включайте его только если понимаете, что делаете!
connect_from_port_20 NO Значение YES позволяет использовать на сервере порт 20 (ftp-data) для передачи данных. По соображениям безопасности, некоторые клиенты могут требовать такого поведения от сервера. Наоборот, выключение данного параметра, позволяет запускать vsftpd с меньшими превилегиями.
debug_ssl NO Значение YES приводит к протоколированию работы подключений по SSL. (Добавлено в 2.0.6)
deny_email_enable NO Значение YES позволяет предоставить для анонимных пользователей список паролей в стиле E-mail адресов, для которых доступ будет запрещён. По умолчанию, список находится в файле /etc/vsftpd/banned_emails, но можно задать другой файл с помощью параметра banned_email_file.
dirlist_enable YES Значение NO запрещает доступ на выполнение команд просмотра содержимого каталогов.
dirmessage_enable NO Значение YES позволяет показывать сообщения пользователям, которые первый раз заходят в какой-либо каталог. По умолчанию, сообщения находятся в файлах .message, но можно указать другой файл с помощью параметра message_file.
download_enable YES Значение NO запрещает выполнять скачивание файлов.
dual_log_enable NO Значение YES включает параллельную генерацию двух журналов /var/log/xferlog и /var/log/vsftpd.log. Первый формируется в стиле wu-ftpd, второй в собственном формате vsftpd.
force_dot_files NO Значение YES включает показ файлов и каталогов, имя которых начинается с точки. Исключения составляют имена "." и ".."
force_anon_data_ssl NO Работает только если включен параметр ssl_enable. Значение YES принудительно переключает соединения всех анонимных пользователей в режим SSL при скачивании и закачивании файлов.
force_anon_logins_ssl NO Работает только если включен параметр ssl_enable. Значение YES принудительно переключает соединения всех анонимных пользователей при отправке пароля.
force_local_data_ssl YES Работает только если включен параметр ssl_enable. Значение YES принудительно переключает соединения всех НЕ-анонимных пользователей в режим SSL при скачивании и закачивании файлов.
force_local_logins_ssl YES Работает только если включен параметр ssl_enable. Значение YES принудительно переключает соединения всех НЕ-анонимных пользователей в режим SSL при отправке пароля.
guest_enable NO Значение YES говорит о том, что все анонимные соединения должны рассматриваться как "гостевые". Гостевой вход будет переназначен на пользователя, который задан параметром guest_username.
hide_ids NO Значение YES приводит к тому, что при показе для всех файлов и каталогов, группа и владелец всегда будут "ftp".
listen YES Значение YES приводит к запуску vsftpd в режиме "демона". Это означает, что vsftpd не может быть запущен из inetd. Вместо этого, vsftpd запускается напрямую один раз и далее сам будет обслуживать входящие соединения.
listen_ipv6 NO Тоже что и для параметра listen, только vsftpd будет обслуживать IPv6, а не только IPv4. Этот параметр и параметр listen являются взаимоисключающими.
local_enable NO Значение YES позволяет входить по FTP локальным пользователям (из /etc/passwd или авторизуемых через PAM). Данный параметр должен быть включен, если вы хотите организовать работу НЕ-анонимных пользователей, включая и виртуальных.
lock_upload_files YES Значение YES включает блокировку на запись для всех закачиваемых файлов. Все скачиваемые файлы имеют разделяемую блокировку на чтение. Внимание! Перед тем как включить этот параметр помните, что злонамеренное чтение может привести к тому, что пользователи, закачивающие файлы не смогут их дозаписать.
log_ftp_protocol NO Значение YES приводит к протоколированию всех запросов и ответов протокола FTP, а также в выключению параметра xferlog_std_format.
ls_recurse_enable NO Значение YES включает использоваение "ls -R". Это создаёт значительный риск безопасности, потому что выполнение "ls -R" для каталога верхнего уровня, который содежит множество подкаталогов и файлов, может привести к очень большому потреблению ресурсов.
mdtm_write YES Значение YES включает MDTM установку времени изменения файлов (полезно для проверки доступа)
no_anon_password NO При установленом YES, vstpd не спрашивает пароля у анонимных пользователей.
no_log_lock NO Значение YES говорит vsftpd не выполнять блокировку при записи в файлы журналов. Обычно данный параметр выключен. В Solaris в связке с файловой системой Veritas иногда появляется ошибка, выражающаяся в зависании при попытке установить блокировку на файлы журналов.
one_process_model NO Для ядер 2.4 поддерживается другая модель безопасности: один процесс на одно соединение. Такая модель менее безопасна, но более производительна. Не включайте, если не понимаете что делаете и если вашему серверу не нужна поддержка огромного количества отдельных соединений.
passwd_chroot_enable NO Значение YES совместно сchroot_local_user, включает chroot() отдельно для каждого пользователя, исходя из данных о его домашнем каталоге, взятых из /etc/passwd. При этом, значение "/./" в строке, задающей домашний каталог, означает отдельное местоположение в пути.
pasv_addr_resolve NO Установите YES, если вы хотите использовать имя (вместо IP адреса) в pasv_addres
pasv_enable YES Установите NO, если вы хотите запретить метод PASV в полученном соединении для приёма/передачи данных.
pasv_promiscuous NO Установите YES если вы хотите запретить проверку безопасности, назначение которой убедиться, что соединение на приём/передачу данных осуществляется с того же IP-адреса, что и управляющее соединение. Включайте только если понимаете, что вы делаете! Такое необходимо только в некоторых случаях при организации безопасных туннелей или поддержке FXP.
port_enable YES Установите NO, если вы хотите запретить метод PORT в полученном соединении для приёма/передачи данных.
port_promiscuous NO Установите YES, если вы хотите запретить проверку безопастности PORT, назначение которой убедиться, что исходяще соединение подключено именно к клиенту. Включайте только если понимаете, что делаете!
require_cert NO Значение YES требует от всех SSL клиентов наличия клиентского сертификата. Уменьшение подлинности, применимое к этому сертификату, управляется параметром validate_cert (добавлен в 2.0.6).
run_as_launching_user NO Установите YES, если вы хотите запускать vsftpd от пользователя, который собственно и производит запуск. Обычно это нужно в тех случаях, когда доступ от пользователя root недоступен. СЕРЬЁЗНЕЙШЕЕ ЗАМЕЧАНИЕ! НЕ включайте этот параметр пока вы полностью не осознаете то, что вы делаете, так как использование этого параметра может создать серьёзную проблему с безопасностью. Особенно важно, чтобы vsftpd не мог использовать / в качестве корневого каталога, а также используйте chroot для ограничения доступа к файлам, когда включен данный параметр (даже если vsftpd запущен от root). Менее подходящим решением может быть использование deny_file с такими аргментами как {/*,*..*}, но надёжность такого решения не может сравниться с chroot, так что сильно на это не полагайтесь. При использовании этого параметра, вводятся ограничения на другие опции. Например не ждите, что будут работать опции требущие привелегий, такие как неанонимные входы, закачка файлов с изменением владельца, соединение по 20 порту и подключение по портам меньше, чем 1024, а также и другие подобные.
secure_email_list_enable NO Установите YES, если вы хотите, чтобы для анонимных входов, в качестве паролей, использовался только указанный вами список E-mail адресов. Это полезно для некоторого ограничения доступа к содержимому сервера, без создания виртуальных пользователей. Анонимным пользователям будет отказано во входе, если пароль, который они указали не будет в списке, который находится в файл email_password_file. Формат файла: один пароль на строку без дополнительных пробелов. Местоположение файла по умолчанию: /etc/vsftpd/email_passwords
session_support NO При значении YES, vsftpd будет пытаться вести сессии. При этом он будет пытаться обновлять wtmp и utmp. Если для авторизации используется PAM, то vsftpd также будет пытаться открывать pam_session при входе и закрывать его только при выходе пользователя. Если вам не нужно протоколирование сессий, вы можете запретить это, а также вы можете указать vsftpd запускать меньше процессов и/или с меньшими привелегиями. Модификация wtmp и utmp работает только, если vsftpd собран с поддержкой PAM.
setproctitle_enable NO Если YES, то vsftpd будет пытаться показывать информацию о состояние сессий в списке процессов. Другими словами, показываемое имя процесса будет изменено, чтобы отражать состояние сессии vsftpd (idle, downloading и т.д.) Из соображений безопасности, возможно вам лучше оставить этот параметр выключенным.
ssl_enable NO Если YES и vsftpd был собран с библиотекой openSSL, то vsftpd будет обслуживать безопасные соединения через SSL. Это относится как к управляющим соединениям, так и к соединениям передающим данные. Также необходимо, чтобы и клиент поддерживал SSL соединения. Используйте этот параметр с осторожностью, потому что vsftpd целиком полагается на библиотеку openSSL в плане безопаснотсти SSL соединений и не может гарантировать, что эта библиотека свободна от ошибок.
ssl_request_cert YES Если YES, то vsftpd запрашивает (но не делает из этого необходимости) у клиента сертификат. Обычно, это не вызывает проблем, но IBM zOS считает иначе (добавлено в 2.0.7)
ssl_sslv2 NO Применяется только если включен параметр ssl_enable. В случае YES допускаются соединения про протоколу SSL v2. Предпочтительными являются соединения по протоколу TLS V1.
ssl_sslv3 NO Применяется только если включен параметр ssl_enable. В случае YES допускаются соединения про протоколу SSL v3. Предпочтительными являются соединения по протоколу TLS V1.
ssl_tlsv1 YES Применяется только если включен параметр ssl_enable. В случае YES допускаются соединения про протоколу TLS V1. Предпочтительными являются соединения по протоколу TLS V1.

будет дописано...