vsftpd (Very Secure Ftp Daemon) разрабатывался Chris Evans, недовольным уровнем безопасности, производительности и сложностью настройки как "классического" FTP-сервера wu-ftpd, так и ProFTPD. Бесплатен (GPL). Текущая версия - Jul 2015 - vsftpd-3.0.3. Настраивается с помощью одного очень простого файла конфигурации (можно иметь несколько экземпляров, привязанных к разным адресам и/или портам). Возможен запуск в автономном режиме или через inetd/xinetd. Поддерживается SSL, IPv6, виртуальные пользователи, управление трафиком, настройки в зависимости от имени и IP адреса пользователя.
Настройка vsftpd
Сам сервер (/usr/sbin/vsftpd) имеет ровно один параметр - имя файла конфигурации.
Файл конфигурации (обычно /etc/vsftpd/vsftpd.conf) состоит из директив. Каждая директива располагается на отдельной строке. Строка, начинающаяся с "#", является комментарием. Директива состоит из имени опции и значения, разделённых символом "=" без пробелов. Опции делятся на логические (NO, YES), строчные и неотрицательные целые:
режимы работы и общие параметры
listen NO (автономная работа без inetd/xinetd)
listen_ipv6 NO
listen_address
listen_address6
listen_port 21 (в автономном режиме)
ftp_data_port 20
background NO (перейти в фоновый режим при автономном запуске)
async_abor_enable NO
connect_from_port_20 NO (при включении исходящие с сервера соединения исходят с порта 20, при выключении сервер может работать с несколько меньшими привилегиями)
ascii_download_enable NO
ascii_upload_enable NO
one_process_model NO (один процесс на пользователя вместо 2, быстрее, но менее безопасно)
pasv_enable YES (разрешить режим PASV)
pasv_min_port 0
pasv_max_port 0
pasv_promiscuous NO (не делать проверок параметров PASV)
pasv_address (по умолчанию, для PASV берётся адрес сокета)
port_enable YES (разрешить режим PORT)
port_promiscuous NO (не делать проверок параметров PORT)
run_as_launching_user NO (сервер будет работать от имени запустившего пользователя)
tcp_wrappers NO (переменная VSFTPD_LOAD_CONF в /etc/hosts.allow задаёт имя конфигурационного файла vsftpd)
use_sendfile YES (использовать sendfile() для ускорения работы)
nopriv_user nobody (под этим пользователем сервер работает, когда ему не нужны никакие привилегии, лучше завести специального пользователя)
secure_chroot_dir /usr/share/empty (сюда сервер делает chroot, когда ему не нужен доступ к файловой системе)
аутентификация и права входа
local_enable NO (использовать /etc/passwd для аутентификации пользователей)
userlist_enable NO (пользователи из файла, заданного опцией userlist_file, не допускаются до запроса пароля)
userlist_deny YES (если задать NO, то будут допускаться только пользователи, указанные в файле, имя которого задаётся опцией userlist_file)
userlist_file (имя файла содержащего имена запрещённых или допустимых пользователей)
check_shell YES (проверять /etc/shells при попытке входа локальных пользователей)
guest_enable NO (все неанонимные входы рассматриваются от имени гостевого пользователя; это позволяет производить аутентификацию с помощью PAM (pam_userdb) относительно файла имён виртуальных пользователей)
guest_username ftp
no_anon_password NO (не запрашивать пароль анонимных пользователей)
secure_email_list_enable NO (пароли анонимных пользователей задаются в файле /etc/vsftpd.email_passwords)
email_password_file /etc/vsftpd.email_passwords (имя файла, содержащего пароли анонимных пользователей)
virtual_use_local_privs NO (виртуальные пользователи будут иметь привилегии локальных пользователей вместо анонимных)
pam_service_name ftp
user_config_dir (позволяет задавать часть параметров в зависимости от имени пользователя; из этого каталога читается файл с именем пользователя, который рассматривается как дополнение к файлу конфигурации)
user_sub_token (генерация имени домашнего каталога для виртуальных пользователей (см. guest_enable) по шаблону, например с использованием $USER)
авторизация общая
cmds_allowed (список допустимых команд протокола FTP)
deny_file (шаблон имён запрещённых файлов, "deny_file={*.mp3,*.mov,.private}")
hide_file (шаблон невидимых файлов)
download_enable YES (позволять чтение файлов)
dirlist_enable YES (позволять листинг каталогов)
force_dot_files NO (показывать в листинге каталогов имена файлов, начинающиеся с '.')
hide_ids NO (скрывать имена владельцев файлов и группы)
ls_recurse_enable NO
text_userdb_names NO (показывать текстовые имена пользователей и групп в листинге)
use_localtime NO (использовать локальное время вместо UTC)
write_enable NO (позволять команды STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, SITE)
tilde_user_enable NO (разрешать в именах файлов конструкции "~" и "~имя-пользователя")
права локальных пользователей
chroot_list_enable NO (в файле /etc/vsftpd.chroot_list задаётся список пользователей, при аутентификации которых деляется chroot в их домашний каталог)
chroot_list_file /etc/vsftpd.chroot_list
chroot_local_user NO (при аутентификации всех локальных пользователей деляется chroot в их домашний каталог, в этом случае chroot_list_enable задаёт список исключений)
passwd_chroot_enable NO (имя каталога для chroot извлекается из /etc/passwd по строке "/./")
chmod_enable YES (SITE CHMOD для локальных пользователей, анонимные пользователи не могут в любом случае)
local_umask 077
local_root (в какой каталог переходить для локальных пользователей)
права анонимных пользователей
anonymous_enable YES
anon_world_readable_only YES
anon_upload_enable NO
anon_umask 077
anon_mkdir_write_enable NO
anon_other_write_enable NO (удаление, переименование и др.)
chown_uploads NO (владелец анонимно загруженного файла устанавливается параметром chown_username)
chown_username root
anon_root (в какой каталог переходить для анонимных пользователей)
ftp_username ftp (с правами какого пользователя обрабатывать анонимные запросы, домашний каталог этого пользователя будет корнем доступа)
журналы и сообщения
xferlog_enable NO (журнал загрузок и записей в /var/log/vsftpd.log)
xferlog_std_format NO (записывать журнал в формате wu-ftpd в /var/log/xferlog)
dual_log_enable NO (записывать оба журнала: /var/log/xferlog и /var/log/vsftpd.log)
syslog_enable NO (журнал выводится через syslog, подсистема FTPD)
vsftpd_log_file /var/log/vsftpd.log (имя журнала в формате vsftpd)
xferlog_file /var/log/xferlog (имя журнала в формате wu-ftpd)
log_ftp_protocol NO
no_log_lock NO
session_support NO (поддержка сессий: запись в utmp и wtmp; pam_session)
setproctitle_enable NO (состояние сессии показывается в списке процессов)
banner_file (файл с текстом приветствия)
ftpd_banner (текст приветствия)
dirmessage_enable NO (при входе в каталог пользователь получает сообщение из файла .message)
message_file .message (позволяет задать имя файла с сообщением в каталоге)
SSL
ssl_enable NO
ssl_sslv2 NO
ssl_sslv3 NO
ssl_tlsv1 YES
allow_anon_ssl NO (разрешать анонимным пользователям пользоваться SSL)
force_local_data_ssl YES
force_local_logins_ssl YES
dsa_cert_file
rsa_cert_file /usr/share/ssl/certs/vsftpd.pem
ssl_ciphers DES-CBC3-SHA
интервалы ожидания (в секундах)
accept_timeout 60 (для PASV)
connect_timeout 60 (для PORT)
data_connection_timeout 300 (замирание в процессе передачи данных)
idle_session_timeout 300
управление трафиком (в байтах в секунду) и нагрузкой
anon_max_rate 0
local_max_rate 0
max_clients 0
max_per_ip 0
trans_chunk_size 0