#language ru ||~-[[DebianWiki/EditorGuide#translation|Translation(s)]]: [[ru/vsftpd/EXAMPLE|Русский]] -~|| (!) [[/Discussion|Обсуждения]]|| ---- [[ru/vsftpd|vsftpd]] >> [[ru/vsftpd/EXAMPLE|EXAMPLE]] '''Перевод документации из каталога EXAMPLE''' <> == README (вместо введения) == Эти подкаталоги содержат примеры использования vsftpd. Эти примеры описывают установку для работы в RedHat 7.2. Некоторые из них описывают взаимодействие с "xinetd" и/или очень функциональный вариант с PAM. Примеры служат для иллюстрации того, как vsftpd становится чрезвычайно мощным инструментом при взаимодействии с "xinetd", для обработки соединений, и PAM для аутентификации. Содержимое {{{ INTERNET_SITE Как можно настроить vsftpd для сайта. INTERNET_SITE_NOINETD Как использовать vsftpd без xinetd. PER_IP_CONFIG Как использовать различные настройки, в зависимости от подключившегося IP-адреса. VIRTUAL_HOSTS Как использовать vsftpd с виртуальным хостингом. VIRTUAL_USERS Как использовать виртуальных пользователей в vsftpd. VIRTUAL_USERS_2 Продвинутые виртуальные пользователи - различные права доступа. }}} == INTERNET_SITE == Этот пример показывает, как можно установить FTP для Internet-сайта (возможно большого). Акцент будет на безопасность и производительность. Мы увидим как, интегрируя vsftpd с xinetd, мы получим мощную комбинацию. Шаг 1) Установка вашего файла настроек для xinetd. Можно использовать, например, уже предоставленный файл настроек для xinetd - "vsftpd.xinetd". Установите его: {{{ cp vsftpd.xinetd /etc/xinetd.d/vsftpd }}} Давайте посмотрим на важное содержимое этого файла и рассмотрим что оно делает: {{{ disable = no socket_type = stream wait = no }}} Это говорит о том, что служба является активной, и она использует стандартные сокеты TCP. {{{ user = root server = /usr/local/sbin/vsftpd }}} Программа сервера "/usr/local/sbin/vsftpd" используется для обработок входящих FTP-запросов, программа запущена из под root (vsftpd, будет, конечно, пытаться быстро сбросить такие полномочия настолько, насколько это возможно). ПРИМЕЧАНИЕ! Удостоверьтесь в наличии бинарного файла "vsftpd", установленного в "/usr/local/sbin" (или измените путь к бинарному файлу "vsftpd" в xinetd-файле). {{{ per_source = 5 instances = 200 }}} Для безопасности количество максимальных разрешённых подключений от одного IP-адреса - 5. Всего максимальных параллельных соединений - 200.{{{ no_access = 192.168.1.3 }}} Пример, как не пустить соединение указанного IP-адреса, 192.168.1.3 будет лишён доступа.{{{ banner_fail = /etc/vsftpd.busy_banner }}} Файл, содержимое которого будет выводится пользователям в случае, если соединению отказано по определённой причине (слишком много пользователей, запрещённый IP-адрес). Пример как это сделать: {{{ echo "421 Server busy, please try later." > /etc/vsftpd.busy_banner }}} {{{ log_on_success += PID HOST DURATION log_on_failure += HOST }}} Запишет в лог IP-адреса от всех попыток подключения - без разницы, успешных или нет, время запишется тоже. Если FTP-сервер запущен для обработки соединений, то в лог запишутся также ID процесса и продолжительность работы процесса. Если используется RedHat то логи будут записываться в "/var/log/secure". Шаг 2) Установка вашего файла настроек для vsftpd. Предоставлен файл в качестве примера. Его установка:{{{ cp vsftpd.conf /etc }}} Рассмотрим содержимое файла: {{{ # Access rights anonymous_enable=YES local_enable=NO write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO }}} Это позволит удостоверится, что FTP-сервер находится в только анонимном режиме, и что вся запись и права на загрузку на vsftpd отключены. Заметьте, что большинство значений этих параметров являются значениями по-умолчанию, но, тем не менее, где затронут вопос безопасности - всё-таки будет намного правильнее указать параметры вручную. {{{ # Security anon_world_readable_only=YES connect_from_port_20=YES hide_ids=YES pasv_min_port=50000 pasv_max_port=60000 }}} Параметры по порядку - Удостоверимся, что доступные файлы и каталоги - доступны для всех. - Порождает соединения FTP-порта из безопасного порта - так пользователи на FTP-сервере не смогут попытаться фальсифицировать содержимое файлов. - Скрываем идентификаторы пользователей FTP-сервера и выводим вместо этого "ftp" в списке содержимого каталога. Также это усиливает производительность. - Устанавливаем дипозон портов "50000-60000" для пассивных соединений - поможет легче настроить firewall! {{{ # Features xferlog_enable=YES ls_recurse_enable=NO ascii_download_enable=NO async_abor_enable=YES }}} По порядку - Записываем статистику передач в "/var/log/vsftpd.log" - Отключаем "ls-R" для предотвращения использования в качестве DoS атаки. Примечание - сайтам, которые потребуется "зеркалировать", потребуется включение "ls -R". - Отключаем загрузку с vsftpd в режиме "ASCII" для предотвращения использования в качестве DoS атаки (загрузка с vsftpd в режиме ASCII сильно грузит CPU). - Разрешаем старым FTP-клиентам отменять незавершённые передачи файлов.{{{ # Performance one_process_model=YES idle_session_timeout=120 data_connection_timeout=300 accept_timeout=60 connect_timeout=60 anon_max_rate=50000 }}} По порядку - Активируем более быструю модель "один процесс на одно соединение". Примечание! Для поддержки безопасности, эта функциональная возможность доступна только на системах с "capabilities" - т.н. ядро Linux 2.4. - Выгружаем неактивных пользователей после 2 минут неактивности. - Выгружаем неактивных загрузок с vsftpd после 5 минут неактивности. - Выгружаем зависшие пассивные подключения после 1 минуты неактивности. - Выгружаем зависшие активные подключения после 1 минуты неактивности. - Ограничим скорость загрузки с vsftpd каждого клиента в ~50кбайт/с. Шаг 3) Перезапуск xinetd. {{{ (на RedHat) /etc/rc.d/init.d/xinetd restart }}} Если вы столкнулись с проблемой, проверьте, что: 1) В вашем "/etc/xinetd.d" каталоге есть только одна FTP-служба. == INTERNET_SITE_NOINETD == Этот пример показывает, как запускать vsftpd в standalone (автономном) режиме - то есть без потребности в запуске "inetd" нескольких видов (inetd, xinetd, tcpserver и т.д.). vsftpd поддерживает standalone (автономный) режим с версии v1.1.0. С выпуском версии v1.1.3, список функциональных возможностей standalone (автономного) режима вырос так, что большим сайтам больше не требуется использовать inetd. Ранее, большие сайты были вынуждены использовать xinetd для важной функциональной возможности "предельное число параллельных соединений от одного IP-адреса". К сожалению, кажется, у xinetd имеются проблемы с устойчивостью - различные большие сайты сообщают, что подсчёт сессий xinetd может пойти не так, как надо, и в результате будут неправильно использоваться запреты на подключения от пользователей, потому что xinetd думает, что на FTP уже нет места для авторизации новых пользователей, когда на самом деле это не так. vsftpd теперь самостоятельно обрабатывает максимальное количество сессий и максимальное количество сессий на количество IP-адресов. Возможно также реализовать самостоятельное управление доступом через интеграцию "tcp_wrappers" и даже настроить отдельно подключение для каждого IP-адреса. Используйте эту настройку в качестве примера: 1) Скопируйте файл "vsftpd.conf" в этом каталоге, в "/etc/vsftpd.conf". 2) Запустите vsftpd, т.н.{{{ vsftpd & }}} 3) That should be it! Пример "vsftpd.conf" основан на "vsftpd.conf" от примера "INTERNET_SITE". Посмотрим на различия (сверху):{{{ # Standalone mode listen=YES }}} Сообщим vsftpd запускаться в standalone (автономном) режиме. НЕ ПЫТАЙТЕСЬ запускать vsftpd с inetd, когда этот параметр установлен в "YES" - это не будет работать, вы получите сообщение об ошибке 500: could not bind listening socket. {{{ max_clients=200 max_per_ip=4 }}} Максимальное количество сессий - 200 (новые клиенты получат отказ с сообщением "занято") Максимальное количество сессий от одного IP-адреса - 4 (пятое подключение получит отказ с соответствующим сообщением). Одно замечание на будущее по standalone (автономному) режиму, относительно виртуальных IP-адресов. Это очень легко - запускаете только одну копию vsftpd на каждый виртуальный IP-адрес отдельно (не забывая указывать в командной строке каждой запущенной копии vsftpd отдельный файл настроек). Для каждой копии vsftpd, запущенной на каждом отдельном IP-адресе, поменяйте в файле настроек параметр, который отвечает за прослушивание IP-адреса:{{{ listen_address=192.168.1.2 }}} И запустите vsftpd, указав ему файл настроек, например: vsftpd /etc/vsftpd.conf.site1 & == PER_IP_CONFIG == == VIRTUAL_HOSTS == == VIRTUAL_USERS == Так как содержимое главы для более наглядного понимания попутно сопровождалось подробными комментариями большого размера, то получившаяся в результате глава имеет очень большой объём, поэтому вынесена отдельно, и доступна [[ru/vsftpd/EXAMPLE/VIRTUAL_USERS|здесь]] == VIRTUAL_USERS_2 == Этот пример является дополнением к примеру "VIRTUAL_USERS", и описывает чуть более сложную настройку. Предположим, что нам нужно два типа виртуальных пользователей. Первый тип - это виртуальные пользователи, которые могут только просматривать и скачивать с vsftpd содержимое, а второй тип - это те виртуальные пользователи, которые помимо закачки с vsftpd существующего содержимого, могут загружать на vsftpd новое содержимое. Для того, чтобы содержать несколько типов виртуальных пользователей, потребуется использовать возможность гибкой настройки vsftpd для каждого пользователя отдельно (добавлено в v1.1.0). В предыдущем примере виртуальных пользователей было создано два пользователя - "tom" и "fred". Предположим, что нам нужно, чтобы "fred" имел доступ на запись, чтобы загружать на vsftpd новые файлы, в то время как "tom" может только качать с vsftpd. Шаг 1) Включение настроек vsftpd для каждого пользователя отдельно Для включения в vsftpd этой гибкой функциональной возможности, добавьте следующее в файл "/etc/vsftpd.conf": {{{ user_config_dir=/etc/vsftpd_user_conf }}} И затем создайте этот каталог: {{{ mkdir /etc/vsftpd_user_conf }}} Шаг 2) Дать пользователю "tom" возможность читать все файлы / каталоги. At the end of the last example, we noted that the virtual users can only see world-readable files and directories. We could make the /home/ftpsite directory world readable, and upload files with world-read permission. But another way of doing this is giving tom the ability to download files which are not world-readable. В конце последнего примера мы заметили, что виртуальные пользователи могут ТОЛЬКО ВИДЕТЬ общедоступные для чтения файлы и каталоги. Мы могли сделать каталог "/home/ftpsite" не только общедоступным для чтения, но и общедоступным для загрузки файлов на vsftpd. Но другой способ сделать это дает "tom" разрешение скачивать с vsftpd файлы, которые не общедоступны для чтения. Для пользователя "tom", укажите "NO" в значении параметра настройки "anon_world_readable_only": {{{ echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/tom }}} Проверим - войдите в систему как tom, и теперь "ls" возвратит список содержимого каталога! Войдите в систему как "fred", и этого не будет. ПРИМЕЧАНИЕ - перезапустите vsftpd, после редактирования файла "/etc/vsftpd.conf", для того чтобы изменённые настройки вступили в силу. (Продвинутые пользователи могут отправить сигнал "SIGHUP" на процесс vsftpd, который слушает входящие соединения). Шаг 3) Даём пользователю "fred" разрешение на чтение всех файлов / каталогов и создавать новые, но не вмешиваться в существующие файлы. {{{ echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/fred echo "write_enable=YES" >> /etc/vsftpd_user_conf/fred echo "anon_upload_enable=YES" >> /etc/vsftpd_user_conf/fred }}} Проверим - войдите в систему как "tom", и вы не сможете загружать на vsftpd файлы. Войдите в систему как "fred", и вы можете! Попытайтесь удалить файл и как "tom" и как "fred" - вы не сможете. == Ссылки == ---- * [[http://vsftpd.beasts.org/|vsftpd]] — Официальный сайт "Very Secure FTP Daemon" * [[http://vsftpd.beasts.org/vsftpd_conf.html|vsftpd - manpage of VSFTPD.CONF]] — Официальный сайт "vsftpd", Руководство по VSFTPD.CONF