- Введение в vsftpd
- Установка vsftpd
- Натройка (редактирование) vsftpd. conf
- Примеры конфигурации vsftpd
- Cпособы запуска vsftpd
- Правила для анонимных пользователей vsftpd
- Правила работы с пользователями vsftpd
- Команды vsftpd
- DOWNLOAD/UPLOAD
- Основные правила vsftpd
- SSL шифрование данных в vsftpd
- Журналирование vsftpd
- Настройка vsftpd. conf
- Vsftpd кодировка
- Права доступа на файлы и директории
- Авторизация vsftpd и /bin/false
- Introduction
- Step 1 — Installing vsftpd
- Step 2 — Opening the Firewall
- Step 3 — Preparing the User Directory
- Step 6 — Securing Transactions
- Step 7 — Testing TLS with FileZilla
- Prerequisites
Введение в vsftpd
Vsftpd (англ. Very Secure FTP Daemon) — FTP -сервер с поддержкой IPv6 и SSL.
Vsftpd является FTP-сервером по умолчанию многих операционных систем, и обслуживает официальные репозитории.
Vsftpd — FTP сервер являющийся безопасным, эффективным, стабильным, полностью готовым и проверенным решением в мире FTP серверов.
Совмещая функциональность с безопасностью, он все больше привлекает к себе внимание, подтверждением тому служит (неполный) список проектов доверивших ему свои сервера:
ftp.debian.org, ftp.freebsd.org, ftp.suse.com, ftp.openbsd.org, ftp.gnu.org, ftp.kernel.org, ftp.gnome.org, ftp.gimp.org, ftp.rpmfind.net, ftp.linux.org.uk, ftp-stud.fht-esslingen.de, gd.tuwien.ac.at, ftp.sunet.se, ftp.ximian.com, ftp.engardelinux.org, ftp.sunsite.org.uk, ftp.isc.org, ftp.redhat.com, ftp.kde.org
Разработчик Chris Evans, являясь профессиональным исследователем в области информационной безопасности, обнаруживший достаточное количество уязвимостей в других программах www.scary.beasts.org/security , не забыл при этом позаботиться о усилении безопасности своего продукта. При этом ему удалось сильно расширить возможности VSFTPD, наделив его такими функциями как:
Установка vsftpd
К примеру в Debian GNU/Linux, программный пакет устанавливается одной командой:
apt-get install vsftpd.
Сама программа располагается в каталоге /usr/sbin/vsftpd, возможно в разных дистрибутивах файл vsftpd.conf находится в разных местах, узнать его расположение к примеру можно командой — whereis vsftpd.
В дистрибутиве Debian GNU/Linux, пакет vsftpd размещает свои файлы следующим образом:
Натройка (редактирование) vsftpd. conf
Как уже стало понятно для работы сервера необходимо отредактировать конфигурационный файл: /etc/vsftpd.conf, итак рассмотрим этот вопрос более подробней.
Файл vsftpd.conf состоит из трех видов опций:
* BOOLEAN OPTIONS — основные опции, которые могут содержать значения: YES, NO; * NUMERIC OPTIONS — опции содержащие разные цифровые значения, например время в секундах или номер порта соединения; * STRING OPTIONS — содержат строку, например путь к каталогу на диске: /var/run/vsftpd;
Примеры конфигурации vsftpd
1. Конфигурация для загрузки с анонимным доступом, без проверки пароля.a)inetd/xinetd.
Можно указать другой путь к каталогу с файлами для загрузки (по умолчанию /home/ftp), в /etc/passwd, отредактировав строку «ftp:» следующим образом:
ftp:x:107:65534::/home/diretory/way/:/bin/false (где /home/diretory/way/ — путь)
Проверьте, разрешены ли входящие соединения в настройках брандмауэра, если надо создайте соответствующие правила. Попробуйте подключиться к серверу.
Опция listen=YES позволит VSFTPD работать самостоятельно, без помощи inetd/xinetd. В этом случае необходимо запускать сервер вручную или при помощи загрузочных стартовых скриптов. Для запуска необходимо ввести в консоли команду /usr/sbin/vsftpd и FTP будет запущен в фоновом режиме благодаря опции background=YES.
Если сервер предназначен для работы в интернет, полезно добавить некоторые ограничения.
anonymous_enable=YES no_anon_password=YES anon_world_readable_only=YES connect_from_port_20=YES no_anon_password=YES hide_ids=YES pasv_min_port=50000 pasv_max_port=60000 xferlog_enable=YES ascii_download_enable=NO async_abor_enable=YES one_process_model=YES idle_session_timeout=120 data_connection_timeout=300 accept_timeout=60 connect_timeout=60 anon_max_rate=15000
Для работы в интернет в независимом от inetd/xinetd режиме
listen=YES max_clients=200 max_per_ip=4 anonymous_enable=YES no_anon_password=YES anon_world_readable_only=YES connect_from_port_20=YES hide_ids=YES pasv_min_port=50000 pasv_max_port=60000 xferlog_enable=YES async_abor_enable=YES one_process_model=YES idle_session_timeout=120 data_connection_timeout=300 accept_timeout=60 connect_timeout=60 anon_max_rate=15000
При переходе в независимый от inetd режим работы (listen=YES), я столкнулся с проблемой, при попытке запуска сервера получал сообщение «500 OOPS: could not bind listening IPv4 socket». Решение оказалось простым, нужно закомментировать строку ftp в /etc/inetd.conf и перезапустить inetd. Также при переходе в режим listen=NO, пришлось раскоментировать строку ftp в /etc/inetd.conf и перезапустить inetd иначе при попытке подключиться я получал такое сообщение — «ftp: connect: Connection refused».
Я не буду описывать все возможные варианты примеров конфигурации сервера, потому что на самом деле их может быть очень много, вместо этого ниже хочу добавить мой перевод man vsftpd.conf, который был написан для удобства изучения возможностей vsftpd, а сегодня вырос в полноценный перевод.
Выражаю благодарность Andrew Clark, который согласился принять участие в переводе и внес свои корректировки.
NAME vsftpd.conf — конфигурационный файл для vsftpdОписание
vsftpd.conf используется для управления различными аспектами поведения vsftpd. По умолчанию vsftpd ищет этот файл в по адресу /etc/vsftpd.conf. Однако, вы можете изменить местоположение файла, через аргументы командной строки. Аргументы командной строки это путь и имя конфигураци онного файла для vsftpd. Такая возможность полезна, если вы пожелаете использовать улучшенный inetd, такой как xinetd, для запуска vsftpd с разными конфигурационными файлами на каждый виртуальный хост.
Cпособы запуска vsftpd
listen Если опция включена сервер стартует в независимом от inetd/xinetd режиме «standalone mode». В этом случае он сам заботится о прослушивании и определении входящих соединений.Default: NO
listen_ipv6 Тоже самое что listen, за исключением того что vsftpd слушает IPv6 протокол включительно. Этот параметр и listen взаимно исключаемые. Default: NO
background При включении, vsftpd стартуя в режиме listen, работает в фоновом режиме. Т.е. контроль передается той оболочке в которой был запущен vsftpd.Default: NO
listen_portЕсли запущен в standalone mode, указанный порт прослушивается на предмет входящих FTP соединений.Default: 21
listen_addressЕсли запущен в standalone mode, обычно слушает все адреса (или все локальные интерфейсы). Что может быть отменено указанием определенных ip адресов в этой строке.Default: (none)
listen_address6Тоже что и listen_address, но прослушивает адреса соединений на основе IPv6 протокола (который используется если выбрана опция listen_ipv6), формат в виде стандартного IPV6 адреса.Default: (none)
max_clientsЕсли vsftpd находится в standalone_mode, это максимальное количество клиентов, которые могут быть подключены. Попытки подключения сверх указанного количества, получат сообщение об ошибке.Default: 0 (unlimited)
max_per_ipЕсли vsftpd находится в standalone mode, эта опция указывает максимально возможное количество клиентов с одинаковыми ip адресами. Клиентские подключения пытающиеся превысить этот лимит, получат сообщение об ошибке.Default: 0 (unlimited)
Правила для анонимных пользователей vsftpd
anonymous_enableРазрешает или запрещает вход анонимных пользователей. Если разрешено, пользователи с именами ftp и anonymous распознаются как анонимные пользователи.Default: YES
anon_max_rate Максимальная допустимая скорость передачи данных для анонимных пользователей, выражена в байтах в секунду . Default: 0 (unlimited)
anon_rootВ этой строке указывается каталог, в который vsftp будет переводитьанонимных пользователей после входа. При неудаче просто игнорируется.Default: NO
no_anon_passwordЕсли опция установлена, vsftp не спрашивает пароль у анонимных пользователей, позволяя им подключаться сразу.Default: NO
anon_mkdir_write_enableВключение этой опции, позволяет анонимным пользователям создавать новые каталоги в соответствии с определенными для этого условиями. Для того чтобы это работало опция write_enable должна быть включена, и анонимный пользователь должен иметь права на запись в данном каталоге.Default: NO
anon_other_write_enableЕсли выбрано YES, анонимные пользователи могут выполнять операции записи отличные от загрузки на сервер и создания каталогов, такие как удаление и переименование. Это обычно не рекомендуется, но все таки такая возможность присутствует для полноты.Default: NO
anon_upload_enableВключение этой опции позволяет анонимным пользователям загружать файлы на сервер, в соответствии с определенными для этого условиями. Для того чтобы это работало опция write_enable должна быть активирована, и анонимный ftp пользователь должен иметь права на запись в каталоге для загрузки. Включение опции также необходимо для предоставления возможности загружать на сервер файлы виртуальным пользователям; по умолчанию виртуальные пользователи имеют одинаковые привилегии с анонимными пользователями (т.е. максимально ограниченные привилегии).Default: NO
anon_world_readable_onlyПри включение этой опции, анонимным пользователям будет разрешено скачивать только видимые ими из мира файлы. Предполагается полезным, если пользователи могут загружать на сервер и хранить на нем собственные файлы.Default: YES
deny_email_enableАктивация опции, позволяет использовать список анонимных паролей типа e-mail, при использовании которых попытки подключения будут отвергнуты. По умолчанию, файл содержащий этот список располагается в /etc/vsftpd.banned_emails, но имеется возможность изменить путь,указав альтернативный путь в banned_email_file. Default: NO
banned_email_fileЭта опция указывает имя файла в котором содержится список анонимных e-mail паролей не принимаемых сервером. Сервер сверяется с этим файлом если опция deny_email_enable включена.Default: /etc/vsftpd.banned_emails
secure_email_list_enableАктивируйте опцию, если хотите разрешать вход анонимным пользователям только на основе проверки паролей указанных в e-mail листе. Это простой путь ограничения доступа к низко безопасному содержимому без необходимости в виртуальных пользователях. При включении,анонимные входы блокируются если пароль не содержится в файле указанном опцией email_password_file. Формат файла — один пароль на строку. По умолчанию файл располагается в /etc/vsftpd.email_passwords. Default: NO
email_password_fileЭта опция может быть использована для предоставления альтернативного пути файла используемого secure_email_list_enable опцией.Default: /etc/vsftpd.email_passwords
anon_umaskЗначение накладываемой маски на создаваемые анонимными пользователями файлы. Замечание! Если вы решили указать цифровое значение, надо помнить о нулевом «0» префиксе, иначе значение будет рассмотрено как десятизначное.Default: 077
Правила работы с пользователями vsftpd
local_enableРазрешает или запрещает вход для локальных пользователей. Если включено обычные пользовательские акаунты в /etc/passwd могут быть использованы для входа. Должно быть включено для разрешения любых не анонимных входов, включая вход виртуальных пользователей.Default: NO
local_rootЭта опция указывает каталог в который vsftpd должен перевести пользователя после локального не анонимного входа. В случае неудачи просто игнорируется.Default: (none)
chmod_enableВключение этой опции разрешает использование SITE CHMOD команд устанавливающих права доступа для файла. ВНИМАНИЕ! Применимо только к локальным пользователям. Анонимные пользователи никогда не используют SITE CHMOD команды.Default: YES
check_shellЗамечание! Опция эффективна только для non-PAM сборок vsftpd. Если запрещена, vsftpd не проверяет файл /etc/shells на допустимость пользовательских shell оболочек для локальных входов.Default: YES
virtual_use_local_privsЕсли включено, виртуальные пользователи будут использовать одинаковые с локальными пользователями привилегии. По умолчанию, виртуальные пользователи используют одинаковые с анонимными пользователями привилегии, предполагающие большие ограничения, (особенно условия доступа на запись). Default: NO
local_max_rateМаксимальная скорость передачи данных, выраженная в байтах в секунду, для локально аутентифицированных пользователей.Default: 0 (unlimited)
local_umaskЗначение маски назначения прав доступа к файлам созданным локальными пользователями. Помните! Если вы хотите указать параметр в качестве цифрового значения, указывайте «0» (нулевую) приставку, иначе значение будет определено как целое десятизначное.Default: 077
session_supportЭта опция определяет, будет ли vsftpd поддерживать установленные соединения. Если vsftpd поддерживает сессии, он будет пытаться обновить utmp и wtmp. Он также откроет pam_session, если используется PAM аутентификация и закроет соединение только после отключения. Можно отключить эту опцию, если не требуется журналирование сессии и есть желание предоставить vsftpd больше возможностей для запуска с меньшими привилегиями. Замечание — utmp и wtmp поддерживаются только в сборках с включенным PAM. Default: NO
Команды vsftpd
dirlist_enableЕсли выбрать NO, все команды листинга каталогов будут запрещены.Default: YES
async_abor_enableПри включении, специальные FTP команды известные как «async ABOR» будут разрешены. Только плохо продуманные FTP клиенты используют эту функцию. В добавок эта функция неудобна в управлении, поэтому отключена по умолчанию. К сожалению, некоторые FTP клиенты могут зависать в момент отмены передачи, если эта функция выключена. Если это происходит можно попробовать включить эту функцию.Default: NO
write_enableРазрешает FTP команды изменяющие файловую систему. Такие команды как: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, SITE.Default: NO
ls_recurse_enableПри включении, разрешает рекурсивный листинг «ls -R». Включение немного рискованно исходя из соображений безопасности, так как выполнение «ls -R» в верхнем уровне большого сайта может поглощать много ресурсов.Default: NO
mdtm_writeЕсли включить, разрешает обновления времени модификации файла через MDTM ftp команды.Default: YES
DOWNLOAD/UPLOAD
file_open_modeМаска файлов назначаемая при загрузке файлов на сервер. При желании возможно изменить на 0777 если есть необходимость сделать исполняемыми загружаемые на сервер файлы.Default: 0666
ascii_download_enableЕсли включить, ASCII режим передачи данных будет разрешен при download.Default: NO
ascii_upload_enableЕсли включить, ASCII режим передачи будет разрешен при uploads.Default: NO
download_enableЕсли выбрано значение NO, все запросы на скачивание файлов с сервера будут отклонены. Default: YES
lock_upload_filesПри включении опции, все загрузки на сервер происходят с блокировкой записи загружаемого файла. Все загрузки с сервера совершаются с общей блокировкой чтения скачиваемых файлов. Default: NO
Основные правила vsftpd
tcp_wrappersЕсли включено, и vsftpd был скомпилирован с поддержкой tcp_wrappers, входящие соединения контролируются через tcp_wrappers. Этот механизм предоставляет возможность контролировать соединения по ip адресам, назначая конкретному подключению отдельный конфигурационный файл vsftpd. Параметры tcp_wrappers устанавливаются в конфигурационных файлах /etc/hosts.allow и /etc/hosts.deny, среди них есть переменная окружения VSFTPD_LOAD_CONF, указывающая на месторасположения файла с альтернативными vsftpd.conf параметрами для определенного правила (ip адреса) напротив которого она указана. Default: NO
idle_session_timeoutВременной промежуток в секундах указывающий для удаленного клиента максимальное время которое он может бездействовать не выполняя FTP команды. Если время исчерпано, соединение отбрасывается.Default: 300
data_connection_timeoutМаксимальный временной промежуток в секундах, разрешенного замирания процесса передачи данных. Если перерыв превышен, соединение с удаленным клиентом отбрасывается.Default: 300
accept_timeoutМаксимальное время в секундах для выделения подключения с PASV стилем передачи данных.Default: 60
connect_timeoutМаксимальное время в секундах, отведенное на выделение соединения PORT стиля передачи данных.Default: 60
banner_fileЭта опция указывает на имя банер-файла содержащего текст выводимый на экран клиента при подключении к серверу. Если выбрано, отменяет банер-строку предоставленную ftpd_banner опцией.Default: (none)
ftpd_bannerВ этой опции можно указать банер-строку выводимую на экран клиента при подключении к серверу.Default: (none — default vsftpd banner is displayed)
dirmessage_enable Если разрешено, при входе в каталог пользователям показывается сообщение из файла .message. По умолчанию, директория сканируется на наличие сообщения в файле .message, что можно изменить задав имя другого файла параметром message_file.Default: NO (but the sample config file enables it)
message_fileЭта опция указывает на имя файла в котором содержится сообщение показываемое пользователям при входе в каталог. Работает только если опция dirmessage_enable включена.Default: .message
use_localtimeПри включении, vsftpd производит листинг каталогов с отображением времени лично вашей временной зоны. По умолчанию в листинге отображается GMT временная зона. Времена обновляемые MDTM командами также затрагиваются этой опцией.Default: NO
force_dot_files Если включено, файлы и каталоги имена которых начинаются с «.» будут показаны при листинге каталогов, даже если флаг «a» не был использован клиентом.Default: NO
hide_idsВключение скрывает информацию о именах владельцев файлов и группах, при листинге отображается как «ftp».Default: NO
secure_chroot_dir Эта опция указывает на имя пустого каталога. Также, каталог не должен быть записываемый для ftp пользователя. Этот каталог используется как безопасный chroot(), когда vsftpd не нужен доступ к файловой системе.Default: /var/run/vsftpd
delay_failed_loginВремя ожидания в секундах, перед выводом отчета о неудачном входе.Default: 1
delay_successful_loginВремя ожидания в секундах, перед разрешением успешного входа.Default: 0
connect_from_port_20Включение этой опции указывает исходящим с сервера соединениям использовать 20 порт. Из соображений безопасности, некоторые клиенты могут настаивать на этом значении. Отключение этой опции позволяет vsftpd стартовать с немного меньшими привилегиями.Default: NO (but the sample config file enables it)
ftp_data_portУказывается порт для входящих соединений с сервером (пока connect_from_port_20 включен).Default: 20
port_enableОтключите при желании запретить PORT метод организации соединения.Default: YES
port_promiscuousПри включении выключается PORT security check гарантирующий что исходящие соединения могут быть установлены только с клиентами. Включайте только если действительно знаете что делаете! Default: NO
one_process_modelНачиная с ядра Linux 2.4, возможно использование различных моделей безопасности, так включение этой опции позволяет использовать только один процесс на одно пользовательское подключение. Обычно нет нужды включать это если вы точно не уверены что делаете, и сайт не поддерживает большое количество одновременно подключенных пользователей.Default: NO
setproctitle_enableПри включении, vsftpd будет показывать информацию о статусе сессии в списке системных процессов. Другими словами, в списке процессов будут подробно отображаться события происходящие с vsftpd (скачивания и др.)Default: NO
max_login_failsКоличество неудачных попыток входа, после которых сессия прекращается.Default: 3
pasv_max_portЗначение указывает максимальный порт до которого размещены порты для PASV стиля передачи данных. Может быть использовано для указания подробного размещения портов помогая файрволлингу.Default: 0 (use any port)
pasv_min_portЗначение номера порта начиная с которого размещаются порты для PASV стиля передачи данных. Может быть использовано для указания подробного размещения портов помогая файрволлингу.Default: 0 (use any port)
pasv_addressЭтой опцией задается ip адрес для ответа на запрос PASV команды. Адрес указывается в цифровом виде, если не включен pasv_addr_resolve. По умолчанию, берётся адрес сокета входящего соединения.Default: (none — the address is taken from the incoming connected socket)
pasv_addr_resolveНеобходимо включить если вы хотите использовать имя хоста (вместо ip адреса) в pasv_address опции.Default: NO
pasv_enableОтключите, если вы хотите запретить PASV метод соединения. Default: YES
pasv_promiscuousВключите, если хотите запретить PASV security check, контролирующую подключения с одинаковыми ip адресами. Включайте это, только если вы знаете что делаете! Используется в некоторых туннельных соединениях, возможно в FXP.Default: NO
use_sendfileВнутренняя настройка используемая для определения пользы использования sendfile(). Default: YES
trans_chunk_sizeВы возможно не хотите менять это, но можете попытаться выбрать что нибудь наподобие 8192 для более плавного ограничения полосы пропускания.Default: 0 (let vsftpd pick a sensible setting)
pam_service_nameВ этой строке можно указать имя PAM сервиса который будет использоваться для vsftpd. Default: vsftpd
SSL шифрование данных в vsftpd
ssl_enableЕсли включено, и vsftpd был скомпилирован с поддержкой OpenSSL, vsftpd будет поддерживать безопасность соединения с помощью SSL. Это позволяет контролировать соединения (включая входы в систему) и также передачу данных. Для этого также необходим клиент с поддержкой SSL. Замечания!! Включайте, если это действительно вам необходимо. Надо понимать тот факт, что vsftpd не может гарантировать безопасность OpenSSL библиотек. Включая эту опцию вы доверяете безопасность установленной OpenSSL библиотеке.Default: NO
ssl_sslv2Разрешено только при включенной ssl_enable. Включение этой опции делает возможными подключения по протоколу SSL v2. TLS v1 подключения оптимальны.Default: NO
ssl_sslv3Разрешается только при включенном ssl_enable. Если разрешено, эта опция позволяет подключения по протоколу SSL v3. TLS v1 подключения оптимальны.Default: NO
ssl_tlsv1Разрешено только если ssl_enable включено. Если разрешено, эта опция разрешает соединения по протоколу TLS v1 который является оптимальным.Default: YES
allow_anon_sslРазрешено только если ssl_enable включено. При включении этой опции, анонимным пользователям также будет разрешено использование безопасных SSL соединений. Default: NO
force_anon_data_sslРазрешено только если ssl_enable включено. При включении, все анонимные подключения будут использовать SSL безопасные соединения для приема и передачи данных.Default: NO
force_anon_logins_sslРазрешено только при включенном ssl_enable. При включении, все анонимные подключения будут использовать безопасные SSL соединения при посылке паролей.Default: NO
force_local_data_sslРазрешено только если ssl_enable активно. При включении, все не анонимные подключения используют безопасные SSL соединения для приема и передачи данных.Default: YES
force_local_logins_sslРазрешено только если ssl_enable включено. При включении, все не анонимные подключения используют безопасное SSL соединение при передачи паролей.Default: YES
dsa_cert_fileЭта опция указывает местонахождение DSA сертификата для использования в SSL зашифрованных соединениях.Default: (none — an RSA certificate suffices)
dsa_private_key_fileЭта опция задает расположение личного DSA ключа для использования в SSL зашифрованных соединениях. Если эта опция не выбрана, сертификат предусматривается как личный ключ. Default: (none)
rsa_private_key_fileЭта опция задает расположения личного RSA ключа для использования в SSL зашифрованных соединениях.Если эта опция не выбрана, сертификат предусматривается как личный ключ. Default: (none)
ssl_ciphersЭта опция может быть использована для выбора того, какие SSL шифры будут разрешены для шифрования SSL соединений. Смотрите страницу man ciphers для детального ознакомления. Заметьте, такие ограничения шифров могут использоваться в целях предосторожности, предотвращая использования отдаленными сторонами шифра с которым были обнаружены проблемы.Default: DES-CBC3-SHA
Журналирование vsftpd
syslog_enableПри включении, все выводы журнала направляемые ранее в /var/log/vsftpd.log будут направляться в системный журнал вместо этого. Default: NO
no_log_lockЕсли включено, запрещает vsftpd блокировку файла журнала при записи в него. Этот параметр обычно не разрешен.Default: NO
log_ftp_protocolПри включении, все FTP запросы и ответы журналируются, включение с опцией xferlog_std_format запрещено. Используется для выявления ошибок.Default: NO
dual_log_enableПри включении, два файла с журналами генерируются параллельно, по умолчанию они располагаются в /var/log/xferlog и /var/log/vsftpd.log. Первый генерируется в стиле журнала wu-ftpd, анализируемый стандартными средствами. Другой в стиле журнала vsftpd. Default: NO
xferlog_enableЕсли включено, журнал будет включать детальные отчеты о закачках на сервер, и закачках с сервера (uploads, downloads). По умолчанию, этот файл будет располагаться в /var/log/vsftpd.log, но расположение может быть изменено используя опцию vsftpd_log_file.Default: NO (but the sample config file enables it)
xferlog_std_formatЕсли включено, запись в журнал производится в стандартном wu-ftpd стиле, xferlog формата. Полезно при желании использования уже существующих привычных способов генерации статистики. Однако с другой стороны, формат используемый по умолчанию лучше читается. Расположение журнала по умолчанию /var/log/xferlog, что может быть изменено при помощи опции xferlog_file.Default: NO
xferlog_fileВ параметре этой опции можно указать альтернативный путь к файлу журнала записываемому в стиле wu-ftpd. Запись в этот журнал производится только при включенной xferlog_eneble опции, включительно с xferlog_std_format. Также журнал ведется если включена опция dual_log_enable.Default: /var/log/xferlog
vsftpd_log_fileВ этой строке можно указать альтернативный путь к файлу журнала, записываемому в стиле vsftpd. Этот журнал ведется если опция xferlog_enable включена, и xferlog_std_format остается не выбрана. Также журнал ведется если включена опция dual_log_enable. Важно не забыть, при включенной syslog_enable опции, этот файл не записывается и вывод вместо этого напрвляется в системный журнал. Default: /var/log/vsftpd.log
Настройка vsftpd. conf
Пример файла конфигурации с комментариями
Vsftpd кодировка
По умолчанию сервер vsftpd отдает пользователю список файлов и папок в кодировке системы.Если вы используете Ubuntu, Debian то по умолчанию кодировка в системе UTF8 а у пользователейWindows по умолчанию выставлено WIN1251. Стандартными средствами Windows у вас не получится просматривать русские имена файлов и каталогов на вашем ftp сервере, но есть простое решение проблемы.
Официальный билд vsFTPd НЕ ПОДДЕРЖИВАЕТ перекодировку на лету, но есть модифицированная версия, переделанная русским разработчиком, в нее включены несколько весьма полезных функций.Скачаем последний билд с сайта http://vsftpd.devnet.ru В наличии там имеются сборки под все распространенные системы. Если у вас еще нет установленного ftp сервера, то советую вам ознакомится с руководством по его установке и настройке под виртуальных пользователей Здесь. Если у вас уже установлен vsFTPd то советую вам на всякий случай сделать резервный копии файлов конфигурации.
cp /etc/vsftpd.conf ~
cp /etc/pam.d/vsftpd ~
Установите скачанный пакет, и отредактируйте файл конфигурации /etc/vsftpd.conf, добавив в него строки:
CP может принимать следующие значения: UTF8, WIN1251 (1251), KOI8R (878), IBM866 (866), ISO-8859-5 (ISO5), ISO-8859-1 (LATIN1 или ISO1), ISO-8859-15 (LATIN9 или ISO15), WIN1252 (1252), ISO-8859-2 (LATIN2 или ISO2), ISO-8859-16 (ISO16) или WIN1250 (1250).
Вписываем нужные нам значения, перезапускаем сервис vsFTPd командой /etc/init.d/vsftpd restart и поверяем результаты. Проблемы клиентов с кодировками в моем случае полностью исчезли.О других дополнениях вы можете прочитать в руководстве к данному билду vsFTPd командой man vsftpd.conf
Кто не сможет самостоятельно скомпилировать установочные пакеты могут взять готовые файлы:
Пакет для Lenny, DSC, diff, оригинальный vsftpd.
FTP очень полезная вещь, он позволяет легко подключаться к удаленному серверу, для загрузки или скачивания данных.
Со всеми недостатками и изъянами в безопасности, FTP должен был отойти на второй план, как и протокол telnet, однако у него оказалось намного больше преимуществ, по этому он используется по сей день и довольно успешно. К нему появилось довольно много модификаций, которые позволяют например: заворачивать трафик в SSL/TLS для повышения безопасности переделываемых по сети данных, как это сделать можно ознакомиться в статье- Настрока ProFTPd для использования TLS Но на этот раз не о Proftpd.
Данная статья была вынесена в отдельный топик, для того чтобы ее было проще найти
на сайте. Раньше она находилась в статье по настройке Nginx+Apache, но думаю что она будет намного полезнее в качетсве самостоятельного материала.
Переходим в режим супер пользователя root:Для Debian:
aptitude install vsftpd
Нашей основной задачей является блокирование пользователя внутри своей домашней директории, для того, чтобы не допустить его переход в папки «соседей» по серверу. Для этого мы немного подредактируем конфигурационный файл vsftpd.conf.
Находим и редактируем следующие строчки:
напишем свой баннер для входа, хотя он и не обязателен( на работу он не влияет):
ftpd_banner=Welcome to our FTP service
Запираем пользователей в домашних директориях:
ну под данной записью добавим:
Разрешаем вход локальным пользователям:
Запрещаем анонимный доступ, необходимо найти строку:
И привести ее к виду:
Ну и добавим работу в пассивном режиме:
Поддержка IPv6 в vsFTPd
Для того чтобы добавить возможность работы с ip версии 6, то в конфигурационном файле находим строку:
Её необходимо за комментировать, чтобы она выглядела:
Также, нам необходимо найти строку:
Права доступа на файлы и директории
Параметр local_umask отвечает за то, какие права будут присвоены файлам, которые были закачаны через FTP, по умолчанию там установлено local_umask=022, маска расчитывается очень просто, по формуле 777-A=X
Где:777-права полного доступаА-права которые необходимо получитьХ-маска, которую необходимо выставить
Предположим, нам необходимо получить права 754 что соотвествует drwxr-xr—, тогда 777-754=23 получается local_umask=023.
В любом случае, тот кто закачал файлы является их владельцем и может расширить права доступа к ним.
В общем, находим строку:
И меняем 022 на 023 или на ту которая необходима в вашей ситуации:
Авторизация vsftpd и /bin/false
Для обеспечения безопасности сервера, пользователям виртуальных хостов будет отключен шелл, как пишут на просторах интернетов, рекомендуется это делать следующим способом:
Создадим для него пароль:
Найти и закоментировать строку (она самая последняя)
auth required pam_shells.so
#auth required pam_shells.so
И перезапускаем vsftpd
И еще немного для общего развития- Пользователь с отключенным шеллом, не сможет подключиться по SSH! Это можно считать дополнительным плюсом к безопастности.
Как отключить шелл уже существующему в системе пользователю:
там находим нужного пользователя и /bin/bash меняем на /bin/false, после перезагрузки, изменения переменятся.
На этом можно закончить.
Чтобы устранить проблему с настройкой vsFTPd на Ubuntu 12.04, воспользуйтесь заметкой: Ремонтируем vsFTPd в Ubuntu 12.04
Introduction
vsftpd, very secure FTP daemon, is an FTP server for many Unix-like systems, including Linux, and is often the default FTP server for many Linux distributions as well. vsftpd is beneficial for optimizing security, performance, and stability. It also provides strong protection against security problems found in other FTP servers. vsftpd can handle virtual IPD configurations, encryption support with SSL integration, and more.
Step 1 — Installing vsftpd
Start by updating your package list:
Next, install the vsftpd daemon:
When the installation is complete, copy the configuration file so you can start with a blank configuration, while also saving the original as a backup:
With a backup of the configuration in place, you’re ready to configure the firewall.
Step 2 — Opening the Firewall
Check the firewall status:
This output reveals that the firewall is active and only SSH is allowed through:
Status: active
To Action From
— —— —-
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
You may have other rules in place or no firewall rules at all. Since only SSH traffic is permitted, you’ll need to add rules for FTP traffic.
Start by opening ports 20, 21, and 990 so they’re ready when you enable TLS:
ufw allow ,990/tcp
Next, open ports 40000-50000 for the range of passive ports you will be setting in the configuration file:
ufw allow :50000/tcp
Check the status of your firewall:
Status: active
To Action From
— —— —-
OpenSSH ALLOW Anywhere
20,21,990/tcp ALLOW Anywhere
40000:50000/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
20,21,990/tcp (v6) ALLOW Anywhere (v6)
40000:50000/tcp (v6) ALLOW Anywhere (v6)
Step 3 — Preparing the User Directory
In this example, rather than removing write privileges from the home directory, create an ftp directory to serve as the chroot and a writable files directory to hold the actual files.
Create the ftp folder:
Set its ownership:
Remove write permissions:
Verify the permissions:
total 8
dr-xr-xr-x 2 nobody nogroup 4096 Sep 14 20:28 .
drwxr-xr-x 3 sammy sammy 4096 Sep 14 20:28 ..
Next, create the directory for file uploads:
total 12
dr-xr-xr-x 3 nobody nogroup 4096 Sep 14 20:30 .
drwxr-xr-x 3 sammy sammy 4096 Sep 14 20:28 ..
drwxr-xr-x 2 sammy sammy 4096 Sep 14 20:30 files
Finally, add a test.txt file to use for testing:
«vsftpd test file» /home/sammy/ftp/files/test.txt
Once you’ve opened the file, confirm that the anonymous_enable directive is set to NO and the local_enable directive is set to YES:
. . .
write_enable=YES
. . .
Limit the range of ports that can be used for passive FTP to ensure enough connections are available:
. . .
pasv_min_port=40000
pasv_max_port=50000
Note: In Step 2, you opened the ports that are set here for the passive port range. If you change these values, be sure to update your firewall settings.
When you’re done making the changes, save the file and exit the editor. If you used nano to edit the file, you can do so by pressing CTRL + X, Y, then ENTER.
Check that it was added as you expected:
Restart the daemon to load the configuration changes:
systemctl restart vsftpd
With the configuration in place, now you can test FTP access.
Close the connection:
Now change into the files directory:
250 Directory successfully changed.
Next, run get to transfer the test file you created earlier to your local machine:
Next, upload the file with a new name to test write permissions:
put test.txt upload.txt
227 Entering Passive Mode (203,0,113,0,164,71).
150 Ok to send data.
226 Transfer complete.
17 bytes sent in 0.00 secs (5.3227 kB/s)
Now that you’ve tested your configuration, next you’ll take steps to further secure your server.
Step 6 — Securing Transactions
Use openssl to create a new certificate and use the -days flag to make it valid for one year. In the same command, add a private 2048-bit RSA key. By setting both the -keyout and -out flags to the same value, the private key and the certificate will be located in the same file:
openssl req rsa:2048 /etc/ssl/private/vsftpd.pem /etc/ssl/private/vsftpd.pem
You’ll be prompted to provide address information for your certificate. Substitute your own information for the highlighted values:
Once you’ve created the certificates, open the vsftpd configuration file again:
Toward the bottom of the file, there will be two lines that begin with rsa_. Comment them out by preceding each line with a pound sign (#):
. . .
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
. . .
. . .
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
. . .
. . .
ssl_enable=YES
. . .
. . .
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
. . .
. . .
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
. . .
Lastly, add two final options. The first will not require SSL reuse because it can break many FTP clients. The second will require “high” encryption cipher suites, which currently means key lengths equal to or greater than 128 bits:
. . .
require_ssl_reuse=NO
ssl_ciphers=HIGH
. . .
Here is how this section of the file should appear after all of these changes have been made:
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
#rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
When you’re done, save and close the file. If you used nano, you can exit by pressing CTRL + X, Y, then ENTER.
Restart the server for the changes to take effect:
Next, verify that you can connect using a client that supports TLS, such as FileZilla.
Step 7 — Testing TLS with FileZilla
Most modern FTP clients can be configured to use TLS encryption. For our purposes, we will demonstrate how to connect with FileZilla because of its cross-platform support. Consult the documentation for other clients.
When you first open FileZilla, find the Site Manager icon located above the word Host, the leftmost icon on the top row. Click this button:
A new window will open. Click the New Site button in the bottom right corner:
Under My Sites a new icon with the words New Site will appear. You can name it now or return later and use the Rename button.
Fill out the Host field with the name or IP address. Under the Encryption drop-down menu, select Require explicit FTP over TLS.
Select OK to connect. You should now be connected to your server with TLS/SSL encryption.
When you’ve accepted the certificate, double-click the files folder and drag upload.txt to the left to confirm that you’re able to download files:
When you’ve done that, right-click on the local copy, rename it to upload-tls.txt and drag it back to the server to confirm that you can upload files:
You’ve now confirmed that you can securely and successfully transfer files with SSL/TLS enabled.
First, open a file called ftponly in the bin directory:
Save the file and exit your editor. If you used nano, you can exit by pressing CTRL + X, Y, then ENTER.
Then, change the permissions to make the file executable:
Open the list of valid shells:
At the bottom add:
. . .
/bin/ftponly
sammy /bin/ftponly
Now, try logging into your server as sammy:
This account is limited to FTP access only.
Connection to 203.0.113.0 closed.
FTP is still used to support legacy applications and workflows with very specific needs. If you have a choice of what protocol to use, consider exploring the more modern options. When you do need FTP, however, vsftpd is an excellent choice. Optimized for security, performance, and stability, vsftpd offers strong protection against many security problems found in other FTP servers and is the default for many Linux distributions.
Prerequisites
Let’s start by updating our package list and installing the vsftpd daemon:
update
vsftpd
When the installation is complete, let’s copy the configuration file so we can start with a blank configuration, saving the original as a backup:
With a backup of the configuration in place, we’re ready to configure the firewall.
In this case, only SSH is allowed through:
You may have other rules in place or no firewall rules at all. Since only SSH traffic is permitted in this case, we’ll need to add rules for FTP traffic.
Let’s open ports 20 and 21 for FTP, port 990 for when we enable TLS, and ports 40000-50000 for the range of passive ports we plan to set in the configuration file:
ufw allow /tcp
ufw allow /tcp
ufw allow /tcp
ufw allow :50000/tcp
ufw status
Our firewall rules should now look like this:
Status: active
To Action From
— —— —-
OpenSSH ALLOW Anywhere
990/tcp ALLOW Anywhere
20/tcp ALLOW Anywhere
21/tcp ALLOW Anywhere
40000:50000/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
20/tcp (v6) ALLOW Anywhere (v6)
21/tcp (v6) ALLOW Anywhere (v6)
990/tcp (v6) ALLOW Anywhere (v6)
40000:50000/tcp (v6) ALLOW Anywhere (v6)
Assign a password when prompted. Feel free to press ENTER through the other prompts.
In this example, rather than removing write privileges from the home directory, let’s create an ftp directory to serve as the chroot and a writable files directory to hold the actual files.
total 8
4 dr-xr-xr-x 2 nobody nogroup 4096 Aug 24 21:29 .
4 drwxr-xr-x 3 sammy sammy 4096 Aug 24 21:29 ..
/home/sammy/ftp/files
sammy:sammy /home/sammy/ftp/files
total 12
dr-xr-xr-x 3 nobody nogroup 4096 Aug 26 14:01 .
drwxr-xr-x 3 sammy sammy 4096 Aug 26 13:59 ..
drwxr-xr-x 2 sammy sammy 4096 Aug 26 14:01 files
Finally, let’s add a test.txt file to use when we test:
Let’s also limit the range of ports that can be used for passive FTP to make sure enough connections are available:
Note: In step 2, we opened the ports that we set here for the passive port range. If you change the values, be sure to update your firewall settings.
With the configuration in place, let’s move on to testing FTP access.
Let’s change into the files directory and use the get command to transfer the test file we created earlier to our local machine:
Next, let’s upload the file with a new name to test write permissions:
227 Entering Passive Mode (203,0,113,0,164,71).
150 Ok to send data.
226 Transfer complete.
16 bytes sent in 0.000894 seconds (17897 bytes/s)
Now that we’ve tested our configuration, let’s take steps to further secure our server.
Let’s use openssl to create a new certificate and use the -days flag to make it valid for one year. In the same command, we’ll add a private 2048-bit RSA key. By setting both the -keyout and -out flags to the same value, the private key and the certificate will be located in the same file:
You’ll be prompted to provide address information for your certificate. Substitute your own information for the highlighted values below:
Toward the bottom of the file, you will see two lines that begin with rsa_. Comment them out so they look like this:
Finally, we will add two more options. First, we will not require SSL reuse because it can break many FTP clients. We will require “high” encryption cipher suites, which currently means key lengths equal to or greater than 128 bits:
The finished file section should look like this:
At this point, we will no longer be able to connect with an insecure command-line client. If we tried, we’d see something like:
Next, let’s verify that we can connect using a client that supports TLS.
Most modern FTP clients can be configured to use TLS encryption. We will demonstrate how to connect with FileZilla because of its cross-platform support. Consult the documentation for other clients.
When you first open FileZilla, find the Site Manager icon just above the word Host, the left-most icon on the top row. Click it:
Fill out the Host field with the name or IP address. Under the Encryption drop down menu, select Require explicit FTP over TLS.
Click OK to connect. You should now be connected with your server with TLS/SSL encryption.
Upon success, you will be presented with a server certificate that looks like this:
Now try logging into your server as sammy:
You should see something like:
Once you have an Ubuntu server in place, you’re ready to begin.
We’ll start by updating our package list and installing the vsftpd daemon:
When the installation is complete, we’ll copy the configuration file so we can start with a blank configuration, saving the original as a backup.
Status: active
To Action From
— —— —-
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
We’ll need to open ports 20 and 21 for FTP, port 990 for later when we enable TLS, and ports 40000-50000 for the range of passive ports we plan to set in the configuration file:
Now our firewall rules looks like:
With vsftpd installed and the necessary ports open, we’re ready to proceed to the next step.
Assign a password when prompted and feel free to press “ENTER” through the other prompts.
In this example, rather than removing write privileges from the home directory, we’re will create an ftp directory to serve as the chroot and a writable files directory to hold the actual files.
/home/sammy/ftp
nobody:nogroup /home/sammy/ftp
a-w /home/sammy/ftp
Let’s verify the permissions:
total 8
4 dr-xr-xr-x 2 nobody nogroup 4096 Aug 24 21:29 .
4 drwxr-xr-x 3 sammy sammy 4096 Aug 24 21:29 ..
Finally, we’ll add a test.txt file to use when we test later on:
We’ll limit the range of ports that can be used for passive FTP to make sure enough connections are available:
Note: We pre-opened the ports that we set here for the passive port range. If you change the values, be sure to update your firewall settings.
Double-check that it was added as you expected:
Now we’re ready for testing.
We’ll change into the files directory, then use the get command to transfer the test file we created earlier to our local machine:
We’ll turn right back around and try to upload the file with a new name to test write permissions:
Now that we’ve tested our configuration, we’ll take steps to further secure our server.