Помощь - Поиск - Пользователи - Календарь
Полная версия: vsftpd
Богданович.ru :: Форум > Программы :: Software > *NIX системы
mrak
Настройка vsftpd

vsftpd (very secure ftp daemon) - популярный ftp-сервер, при разработке которого во главу угла была поставлена безопасность.
Установка не вызывает никакой сложности:
emerge vsftpd

Для запуска в standalone-режиме добавим скрипт vsftpd в runlevel "default":
rc-update add vsftpd default

И в конфигурационный файл /etc/vsftpd/vsftpd.conf добавляем
listen=YES
background=YES

Корневой каталог - /home/ftp, если желаете хранить файлы в другом месте, то необходимо делать связывание (обычные симлинки работать не будут):
mount --bind <где лежат файлы> /home/ftp

У меня эта строка добавлена в /etc/conf.d/local.start
Виртуальные пользователи
Будем использовать pam_userdb для аутентификации виртуальных пользователей. Для этого должна быть установлена программа для работы с БД Берклиевского формата (emerge db).
Создадим обычный текстовый файл logins.txt, в котором в одной строке написано имя пользователя, а в другой - пароль. Для пользователей tom (пароль foo) и fred (пароль bar) он выглядит так:
tom
foo
fred
bar


Создаем базу данных пользователей:
db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db

Возможно у вас не получится, потому что в некоторых дистрибутивах (в том числе и в Gentoo) в имя программы включается ее версия, поэтому у меня это выглядит так:
db4.1_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db
Для большей безопасности выставим права на этот файл 600


В /etc/pam.d/vsftpd пишем 2 строки (других строк не надо):
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

Создадим локального пользователя virtual, на которого будут "отображаться" виртуальные пользователи:
useradd -d /home/ftp virtual

В vsftpd.conf пишем

local_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd/vsftpd_user_conf

Последняя строка указывает каталог, в котором хранятся файлы конфигураций для каждого виртуального пользователя. Следует заметить, что если virtual_use_local_privs=NO (а для большей безопасности так и должно быть), то для виртуальных пользователей надо писать директивы anonymous'а (к примеру для ограничения скорости должно быть anon_max_rate, а не local_max_rate)
upload
Создадим каталог /home/ftp/upload с правами 773 (чтобы была возможность писать, но нельзя было прочитать). Конфигурационный файл пользователя upload
# Каталог для аплоадных файлов
local_root=upload

# Разрешено писать
write_enable=YES

# Разрешено создавать подкаталоги
anon_mkdir_write_enable=YES

# Разрешен аплоад
anon_upload_enable=YES

# Хозяином аплоадных файлов автоматически становится heal (в vsftpd.conf?)
chown_uploads=YES
chown_username=heal
mrak
Настройка vsftpd

Я думаю каждый понимает о необходимости ftp сервера. И меня не миновало :) Свой выбор я остановил на vsftpd.
Основные фичи

* Виртуальные ip.
* Виртуальные пользователи.
* работает как через [x]inetd так и отдельно.
* мощная система настройки для каждого(!) пользователя.
* увеличение полосы пропускания.
* настройка для каждого ip.
* лимиты для каждого ip.
* поддержка протокола IPv6

На данный момент vsftpd используется на большинстве серверов под управлением linux. Среди них ftp.redhat.com, ftp.suse.com, ftp.debian.org, ftp.gnu.org, ftp.gnome.org, ftp.kde.org. Думаю, тут комментарии излишни :)

Я ставил vsftpd из пакета, из сырцов было лень, но сложностей там не должно быть.

# apt-get install vsftpd

Если вы собираете vsftpd из сырцов , перед установкой надо выполнить несколько обязательных действий.

Для дефолтной конфигурации:

# useradd nobody
# mkdir /usr/share/empty
# mkdir /var/ftp
# useradd -d /var/ftp ftp
# chown root.root /var/ftp
# chmod og-w /var/ftp

Далее обычно создаются /var/ftp/pub и /var/ftp/icoming

# mkdir /var/ftp/pub
# chmod 2775 /var/ftp/pub
# chown root.psycho /var/ftp/pub

Объясню последнюю строчку. Владельцем каталога является root а группа к которой принадлежит каталог /var/ftp/pub это psycho т.е моя группа, это сделано для того чтоб я под своим юзером мог менять содержимое. Ибо, делать это под рутом плохой признак :)
Каталог под аплоад.

# mkdir /var/ftp/incoming
# chmod 3773 /var/ftp/incoming
# chown psycho.psycho /var/ftp/incoming

Ну с владельцами я думаю все ясно а права я выставил чтоб анонимные пользователи могли писать но не могли просматривать содержимое :)

После выполнения этих действий можно начинать инсталляцию.

Если вы используете стандартный "inetd" вам надо отредактировать /etc/inetd.conf и добавить такую строку

ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vsftpd

Если у вас не установлены tcp_wrappers и вы не собираетесь их использовать то уберите из строчки /usr/sbin/tcpd

Ну и соответственно рестартнуть inetd.

Если вы используете не inetd а xinetd то в каталоге ../vsftpd/EXAMPLE/INTERNET_SITE/ лежит пример файла конфигурации.

Если у вас на машине запущен PAM то вам необходимо создать файл /etc/pam.d/ftp Пример можно взять в ../vsftpd/RedHat/vsftpd.pam Если вы этого не сделаете то локальные юзеры не смогут залогиниться.
Настройка vsftpd.conf

Пример файла конфигурации с комментариями

# Примерный конфиг /etc/vsftpd.conf
#
#
# разрешить вход дядюшке anonymous'у?
anonymous_enable=YES
#Не запускать через inetd
#listen=YES
# разрешать вход локальным пользователям.
local_enable=YES
#
# Разрешить любую форму команды записи FTP.
write_enable=YES
#
# umask по умолчанию для локальных юзеров 077. Возможно хочется
# изменить на 022, (022 используется в большинстве ftpd's)
#local_umask=022
#
# Разрешить аплоад для анонимусов.
# Имеет смысл когда разрешена запись (write_enable=YES)
# кроме того каталог должен быть доступен для записи FTP юзером.
anon_upload_enable=NO
#
# Разрешить анонимусу создавать каталоги
#anon_mkdir_write_enable=YES
#
# Разрешить мессаги каталогов - сообщения которые выдаются при
# входе в определенную директорию.
dirmessage_enable=YES
#
# логить аплоад/даунлоад
xferlog_enable=YES
#
# убедиться что PORT коннекты вылазят из порта 20 (ftp-data).
connect_from_port_20=YES
#
# Можно изменять автоматически владельца на аплоадных файлах
# естественно использовать тут root'а я не советую
chown_uploads=YES
chown_username=psycho
#
# в какой файл пишем логи
xferlog_file=/var/log/vsftpd.log
#
# можно увидеть лог и в формате xferlog
#xferlog_std_format=YES
#
# таймаут на открытую && неиспользующуюся сессию.
idle_session_timeout=600
#
# таймаут на коннект по порту data.
#data_connection_timeout=120
#
# рекомендуется создать в системе пользователя, которого
# ftp стервер будет использовать как конкретно униженного в своих
# правах юзверя.
#nopriv_user=ftpsecure
#
# Это для распознования асинхронных ABOR запросов.
# не рекомендуется по соображениям безопасности (этот код довольно
# сложный (и проверять его разработчикам видимо влом Demige)).
# А если его не включить то возможно старые FTP клиенты вас не поймут.
#async_abor_enable=YES
#
# По-умолчанию сервер будет разрешать ASCII режим, но фактически
# игнорировать реквест. Здесь можно разрешить использовать ASCII.
# Есть ппасность при вкл. ascii_download_enable что некоторые нехорошие
# юзеры будут тормозить вашу машину командой "SIZE /большой/файл" в
# ASCII режиме.
# Эти ASCII опции разбиты на аплоад и даунлоад т.к. вы можете возжелать
# разрешить ASCII-аплоады (для работы аплоад скриптов), без
# разрешения даунлоада из-за DoS риска по командам SIZE и ASCII.
# Поддержка ASCII на стороне клиента должна быть.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# Баннер при входе
ftpd_banner=Welcome to Psycho FTP.
#
# файл неразрешенных email адресов.
# юзабельно для защиты от DoS атак.
deny_email_enable=YES
# (умолчальный файл)
banned_email_file=/etc/vsftpd.banned_emails
#
# можно разрешить некоторым юзерам chroot()ится в их домашний каталог
# если chroot_local_user=YES, тогда это будет листинг юзеров, которые
# не могут chroot()ится.
# если chroot_local_user=NO то в ftp_chroot_list прописывается какого
# виртуального юзера куда chroot`ить

chroot_list_enable=YES
chroot_list_file=/etc/ftp_chroot_list
# для локальных юзверей
chroot_local_user=YES
# можно разрешить опцию "-R" для встроенного ls.
# по умолчанию запрещена т.к. сильно загружает систему на больших сайтах
# Тем не менее некоторые FTP-клиенты такие как "ncftp" и "mirror" предпологают
# ее наличие. Так что лучше ее включить.
#ls_recurse_enable=YES

Вобщем это мой рабочий конфиг, ничего сложного в настройке нет.

Проверим работоспособность

# ftp 192.168.5.13
Connected to 192.168.5.13.
220 Welcome to Psycho FTP.
Name (192.168.5.13:psycho):
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.

В ../vsftpd/EXAMPLE лежат разнообразные примеры файла конфигурации уже заточенные под конкретные цели, можно выбрать из готового.

При написании этой статьи использовалось официальное руководство и собственный опыт :) Документацию и последнюю версию vsftpd можно найти на http://vsftpd.beasts.org/
yuv
Удалось ли тебе поставить виртуальных юзеров в vsftpd ?
Мне пока не удалось - ответ: 530 Login incorrect

у меня старенький АМД5-100мгц и для экономии места стоит RH 7.2 (2.4.7-10), но думаю дело не в нем, подозреваю что в PAM-работе что-нибудь, не знаю пока как выявить.
mrak
Нет виртуальных юзером не создавал.
mrak
Как гибко манипулировать настройками vsftp для разных сетей
Допустим у нас есть сеть 192.168.0.0/24, с которой надо что-то разрешить, а для остальных - запретить.
Редактируем файл /etc/hosts.allow

vsftpd: 192.168.0.0/255.255.255.0, 127.0.0.1: setenv VSFTPD_LOAD_CONF / etc/vsftpd-int.conf : nice 15
vsftpd: ALL : nice 15

В результате при коннекте из нашей сети будет выполняться конфиг /etc/vsftpd-int.conf,
а при коннекте из остальных сетей - /etc/vsftpd.conf
Ну а прописать в разных конфигах разные фичи я думаю проблем не составит.

У меня так регулируется скорость:

cat /etc/vsftpd-int.conf
...тут пропущен здоровый кусок конфига
# Этот конфиг для внутренних нужд - скорость по максимуму
anon_max_rate=0
local_max_rate=0

cat /etc/vsftpd.conf
...тут пропущен здоровый кусок конфига
anon_max_rate=32000
local_max_rate=64000
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2010 Invision Power Services, Inc.