vsftpd - легковесный, эффективный FTP-сервер, который позиционируется как очень безопасный фтп сервер. На данный момент vsftpd используется на большинстве серверов под управлением linux. Среди них такие гиганты как: ftp.redhat.com, ftp.suse.com, ftp.debian.org, ftp.gnu.org, ftp.gnome.org, ftp.kde.org. Как я считаю коментарии здесь излишни.
Установка vsftpd без патча перекодирующего имена файлов на лету
Если необходимости в перекодировке на лету нет, то для установки vsftpd достаточно и стандартного пакета установленного с оффициального репозитория командой:
aptitude install vsftpd
Отличие в настройке будет только в конфигурационном файле (находящемся ниже) из которого необходимо убрать строки:
convert_charset_enable=1 local_charset=UTF8 remote_charset=WIN1251 double_377=0
Установка vsftpd с патчем перекодирующем имена файлов на лету, используем патч для vsftpd - ext1
vsftpd-2.1.0+ (ext build 1) released
Что этот патч добавляет к серверу:
1. Добавлено конвертирование символов между некоторыми кодовыми страницами.
2. Добавлена поддержка правил доступа для анонимных пользователей.
3. Добавлены правила на доступ пользователей с определенных адресов.
4. Разрешать или запрещать удаление файлов анонимным пользователям.
5. Добавлена возможность менять владельца закаченого файла анонимным пользователем на его IP.
6. Добавлен параметр double_377 (по-умолчанию установлен в 1), который позволяет отключать специфичный символ протокола телнета с кодом \377 (255 \0xFF).
7. Изменен алгоритм поиска библиотек в "vsf_findlibs.sh".
8. Возможность задавать разные скорости на upload и download файлов.
9. Остальные функции были убраны из расширеного билда.
Задача:
Создать директорию в которую может писать аноним, но ему запрещено создавать папки, редактировать и удалять папки и файлы. Создать пользователя который сможет администрировать все что внутри папки.
Если Вы желаете, можете на сайте http://vsftpd.devnet.ru скачать новые патчи и самостоятельно патчить с новыми. Я пока не вижу смысла - меня функционал устраивает полностью (но конечно если будут многочисленные просьбы и будет время, то может быть), сервер настроенный на этом софте работает стабильно и безотказно несколько лет.
Итак приступим:
Если Вам лениво самостоятельно собрать пакет, можете скачать у меня для дистрибутива Debian по ссылкам:
Cкачать vsftpd_ext1 для Debian Lenny на amd64
Либо скачать с консоли для сервера Debian Lenny на архитектуру amd64:
wget http://vkusnoserver.pp.ua/downloads/ftp/vsftpd-ext_2.1.0-ext1_amd64.deb
Устанавливаем пакет командой:
dpkg -i vsftpd-ext_2.1.0-ext1_amd64.deb
Cкачать vsftpd_ext1 для Debian Squeeze на i386
либо скачать с консоли для сервера Debian Squeeze на архитектуру i386:
wget http://softnastroy.com/downloads/ftp/vsftpd-ext_2.1.0-ext1_i386.deb
Устанавливаем пакет командой:
dpkg -i vsftpd-ext_2.1.0-ext1_i386.deb
!!! Внимание если после установки система ругается, что пакет не настроен, выполните команду которая самостоятельно установит все недостающие зависимости:
apt-get -f install
VSFTPD с патчем перекодировки на лету установлен.
Настройка ftp сервера находится ниже в инструкции.
Если же вам хочется, можете установить собрав пакет самостоятельно из исходных кодов, тогда приступим.
На сервере создаём папку в которой будем выполнять все действия по сборке и установке и переходим в неё под пользователем root:
mkdir -p /usr/src/ftp cd /usr/src/ftp
Теперь качаем исходники vsftpd с патчем:
wget http://softnastroy.com/downloads/ftp/vsftpd-ext_2.1.0-ext1.diff.gz wget http://softnastroy.com/downloads/ftp/vsftpd-ext_2.1.0-ext1.dsc wget http://softnastroy.com/downloads/ftp/vsftpd-ext_2.1.0.orig.tar.gz
Добавляем репозиторий исходников в файл /etc/apt/sources.list
deb http://mirror.yandex.ru/debian squeeze main contrib non-free deb-src http://mirror.yandex.ru/debian squeeze main
Обновляем репозиторий:
aptitude update
Устанавливаем програмное обеспечение для сборки пакета:
aptitude install build-essential
Далее накладываем патч на исходники с автоматической распаковкой:
dpkg-source -x vsftpd-ext_2.1.0-ext1.dsc dpkg-source: предупреждение: распаковка неподписанного пакета с исходным кодом (vsftpd-ext_2.1.0-ext1.dsc) dpkg-source: инфо: извлечение vsftpd-ext в vsftpd-ext-2.1.0 dpkg-source: инфо: распаковывается vsftpd-ext_2.1.0.orig.tar.gz dpkg-source: инфо: накладывается vsftpd-ext_2.1.0-ext1.diff.gz
Далее переходим в распакованную папку:
cd vsftpd-ext-2.1.0/
Запускаем доустановку пакетов необходимых для сборки исходников:
apt-get build-dep vsftpd
И собираем пакет командой:
dpkg-buildpackage -rfakeroot
После сборки переходим на директорию вверх:
cd ..
и выполнив команду ls видим, что deb пакет собран:
ls vsftpd-ext-2.1.0 vsftpd-ext_2.1.0-ext1.dsc vsftpd-ext_2.1.0-ext1_i386.deb vsftpd-ext_2.1.0-ext1.diff.gz vsftpd-ext_2.1.0-ext1_i386.changes vsftpd-ext_2.1.0.orig.tar.gz
Устанавливаем собранный пакет vsftpd командой:
dpkg -i vsftpd-ext_2.1.0-ext1_i386.deb Выбор ранее не выбранного пакета vsftpd-ext. (Чтение базы данных ... на данный момент установлено 44980 файлов и каталогов.) Распаковывается пакет vsftpd-ext (из файла vsftpd-ext_2.1.0-ext1_i386.deb)... Настраивается пакет vsftpd-ext (2.1.0-ext1) ... Starting FTP server: vsftpd. Обрабатываются триггеры для man-db ...
Конфигурационный файл vsftpd сервера находится по адресу /etc/vsftpd.conf
Мой рабочий конфигурационный файл (можно скопировать и вставить в свой):
listen=YES anonymous_enable=YES local_enable=YES write_enable=YES local_umask=000 anon_upload_enable=YES anon_umask=000 anon_mkdir_write_enable=NO dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/vsftpd.log ftpd_banner=Welcome to FTP server firm name. chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd-ext rsa_cert_file=/etc/ssl/private/vsftpd.pem convert_charset_enable=1 local_charset=UTF8 remote_charset=WIN1251 double_377=0
Настраиваем анонима и администратора ftp сервера
Добавляем пользователя, который будет администрировать папку настроенную далее:
adduser ftpadmin
Команда
cat /etc/passwd | grep ftp
выводит информацию по пользователю ftp:
ftp:x:105:107:ftp daemon,,,:/srv/ftp:/bin/false
Видим, что домашняя папка пользователя /srv/ftp, её распотожение нам подходит и менять мы его не будем.
Потому эту папку и будем настраиваем как основную для работы с фтп
Добавляем существующего пользователя ftpadmin в группу ftp командой:
usermod -a -G ftp ftpadmin
Создаем внутри /srv/ftp папку в которой сможет создавать и скачивать файлы анонимный пользователь:
mkdir -p /srv/ftp/upload chmod -R 777 /srv/ftp/upload
Создаем внутри папку в которой не сможет заходить аноним, только для администратора:
mkdir -p /srv/ftp/install
Даем права все права на папку для пользователя администратора и его группы, все остальные(включая анонима) идут лесом.
chmod -R 770 /srv/ftp/install
Изменяем домашнюю папку для пользователя ftpadmin на папку /srv/ftp/
usermod -d /srv/ftp/ ftpadmin
Изменяем пользователя и группу для домашней папки:
chown -R ftpadmin:ftpadmin /srv/ftp/
Перегружаем сервер командой:
reboot
И после перезагрузки пробуем подключится анонимом, залить файл и попробовать его удалить, а также проверяем работу под пользователем ftpadmin.
Дальше все просто по аналогии. Добавляем (если необходимо) пользователей администраторов и все.
P.S. эта инструкция актуальна только если пользователей мало, если же пользователей много то лучше использовать не системных пользователей а виртуальных.
Add new comment