Последнее изменение файла: 2008.06.26
Скопировано с www.bog.pp.ru: 2023.09.22
Bog BOS: FTP-сервер vsftpd: установка, настройка и использование
Предполагается предварительное знакомство с протоколом FTP.
vsftpd (Very Secure Ftp Daemon) разрабатывался Chris Evans,
недовольным уровнем безопасности, производительности и сложностью настройки как "классического"
FTP-сервера wu-ftpd, так и ProFTPD.
Бесплатен (GPL). Текущая версия - 2.0.5 (июль 2006).
Настраивается с помощью одного очень простого файла конфигурации
(можно иметь несколько экземпляров, привязанных к разным адресам и/или портам).
Возможен запуск в автономном режиме или через inetd/xinetd.
Поддерживается SSL, IPv6, виртуальные пользователи, управление трафиком,
настройки в зависимости от имени и IP адреса пользователя.
Сам сервер (/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)
virtual_use_local_privs NO (виртуальные пользователи будут иметь привилегии локальных
пользователей вместо анонимных)
pam_service_name ftp
user_config_dir (позволяет задавать часть параметров в зависимости
от имени пользователя; из этого каталога читается файл с именем пользователя,
который рассматривается как дополнение к файлу конфигурации)
user_sub_token (генерация имени домашнего каталога для виртуальных пользователей
(см. guest_enable) по шаблону, например с использованием $USER)
авторизация общая
cmds_allowed (список допустимых команд протокола FTP)
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
управление трафиком (в байтах в секунду) и нагрузкой
Устанавливал из пакета vsftpd-2.0.5-17.fc7 (i386). Требуется пустой каталог
/usr/share/empty/ и отдельный пользователь (я взял пользователя ftp, в качестве домашнего
каталога /var/ftp, пользователь ftp не является его владельцем, /sbin/nologin).
В состав пакета входят скрипт запуска (/etc/rc.d/init.d/vsftpd,
для каждого файла конфигурации /etc/vsftpd/*.conf запускается свой экземпляр сервера),
/etc/pam.d/vsftpd (/etc/vsftpd/ftpusers используется как запретительный список)
и настройка ротации журналов (/etc/logrotate.d/vsftpd.log).
-A INPUT -i eth0 -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -i eth0 -m state --state NEW -m tcp -p tcp --dport от:до -j ACCEPT
Запуск:
service vsftpd start # смотрим в журнал syslog
chkconfig --level 345 vsftpd on
Проблема с SELinux:
как обычно, политика ограничивающая права процесса vsfdpd неправильная.
Эту политику можно править,
но проще тупо скопировать /usr/sbin/vsftpd в /usr/sbin/vsftpd2
(и поменять /etc/init.d/vsftpd).
Устанавливал из пакета vsftpd-2.0.5-10.el5 (x86_64). Требуется пустой каталог
/usr/share/empty/ и отдельный пользователь (я взял пользователя ftp, в качестве домашнего
каталога /var/ftp, пользователь ftp не является его владельцем, /sbin/nologin).
Предполагаемый каталог для раздачи: /var/ftp заменён на /mirror/anonftp.
В состав пакета входят скрипт запуска (/etc/rc.d/init.d/vsftpd,
для каждого файла конфигурации /etc/vsftpd/*.conf запускается свой экземпляр сервера),
/etc/pam.d/vsftpd (/etc/vsftpd.ftpusers используется как запретительный список)
и настройка ротации журналов (/etc/logrotate.d/vsftpd.log).
-A INPUT -i eth0 -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -i eth0 -m state --state NEW -m tcp -p tcp --dport от:до -j ACCEPT
Запуск:
service vsftpd start # смотрим в журнал syslog
chkconfig --level 345 vsftpd on
Проблема с SELinux:
в CentOS 5 имеется политика ограничивающая права процесса vsfdpd.
Эту политику можно править,
но я тогда об этом не знал и предпочёл тупо скопировать /usr/sbin/vsftpd в /usr/sbin/vsftpd2
(и поменять /etc/init.d/vsftpd).
Устанавливал из пакета vsftpd-2.0.1-5.EL4.5. Требуется пустой каталог
/usr/share/empty/ и отдельный пользователь (я взял пользователя ftp, в качестве домашнего
каталога /var/ftp, пользователь ftp не является его владельцем, /sbin/nologin).
Предполагаемый каталог для раздачи: /var/ftp заменён на /mirror/anonftp.
В состав пакета входят скрипт запуска (/etc/rc.d/init.d/vsftpd,
для каждого файла конфигурации /etc/vsftpd/*.conf запускается свой экземпляр сервера),
/etc/pam.d/vsftpd (/etc/vsftpd.ftpusers используется как запретительный список)
и настройка ротации журналов (/etc/logrotate.d/vsftpd.log).