time

vsftpd: настраиваем FTP-сервер под Ubuntu

Анонимный доступ

ftp_servers.png Понадобилось мне заливать разные файлы на свой коммуникатор, а каждый раз подключать шнур (который еще надо найти :) ) и копировать файлы было лень. В телефоне есть wifi-модуль, который сводит все лишние телодвижения к минимуму: включил wifi, зашел на ftp, скопировал что надо, выключил wifi. Пока включен wifi можно почитать почту, обновить данные для разных установленных виджетов. В общем, было решено установить и настроить один из существующих ftp-серверов.

На слуху чаще всего крутятся два кандидата: vsftpd и proftpd. Еще варианты серверов и их короткое сравнение есть тут.

На форумах и блогах можно встретить разные высказывания адептов этих двух популярных серверов, кто-то хватит один, кто-то другой. Для моих целей подойдет тот, что проще и быстрее поднять. Я решилено остановится на vsftpd, разработчики утверждают что он быстрый и безопасный FTP-сервер + wikipedia говорит, что vsftpd обслуживает официальные репозитории ftp.debian.org, ftp.redhat.com, ftp.openbsd.org, ftp.freebsd.org.

Заявленные возможности vsftpd

  • Виртуальные IP
  • Виртуальные пользователи
  • Мощная система конфигураций для каждого пользователя
  • Ограничение полосы пропускания
  • Настройка для каждого IP
  • Лимиты для каждого IP
  • Поддержка шифрования через интеграцию с SSL
  • и т.д.

Установка vsftpd

sudo apt-get install vsftpd

Настройка vsftpd

Я настроил vsftpd для работы с анонимными пользователями, для этого в файл /etc/vsftpd.conf вносим следующие данные:

listen=YES
anonymous_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
anon_root=/home/proft/ftp
setproctitle_enable=YES

Растартим сервер

sudo /etc/init.d/vsftpd restart

Для настройки работы vsftpd не с анонимными пользователями читаем пост от Игорь Кузьменко.

Мониторинг vsftpd

Для простого мониторинга роботы vsftpd добавляем в файл /etc/vsftpd.conf следующие строчки и рестартим сервер

setproctitle_enable=YES
session_support=YES

Первая строчка позволит отслеживать сессии с помощью команды

watch -n 1 'ps ax | grep vsftpd | grep -v grep'

Вторая строчка позволит отслеживать сессии с помощью команды last

last | head -n 2

Доступ виртуальных пользователей с авторизацией через MySQL

Настроим vsftpd для работы с аккаунтами пользователей, которые хранятся в БД MySQL. Для работы связки vsftpd + MySQL необходим пакет libpam-mysql для PAM аутентификацию в БД MySQL.

sudo apt-get install vsftpd libpam-mysql mysql-server mysql-client

Сделаем первоначальную настройку mysql

mysql_secure_installation

Создадим базу для виртуальных пользователей

#mysql -uroot -p

CREATE DATABASE vsftpd COLLATE utf8_general_ci;
USE vsftpd;

Создадим mysql-пользователя для работы с созданной базой и назначем ему права

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY '_password_';
FLUSH PRIVILEGES;

Создадим таблицу для хранения аккаунтов

CREATE TABLE accounts (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL, pass VARCHAR(50) NOT NULL, UNIQUE (username)) ENGINE = MYISAM;

Создадим пользователя vsftpd с домашней директорией /home/vsftpd, в которой будут храниться директории виртуальных пользователей. Эти директории можно переназначить индивидуально для каждого пользователя, см. описание ниже.

useradd -d /home/vsftpd -g nogroup -s /bin/false -m vsftpd

Приступим к настройке vsftpd. Сохраним старую версию настроечного файла.

sudo mv /etc/vsftpd.conf{,_bak}

Создадим файл /etc/vsftpd.conf и добавим в него

# sudo vim /etc/vsftpd.conf

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
connect_from_port_20=YES
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftp/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf
ftpd_banner=Welcome to proft ftp server.
idle_session_timeout=600
delay_failed_login=2
max_clients=5

Описание настроек есть тут.

Опция user_config_dir отвечает за путь к директории, в которой хранятся настройки для каждого пользователя индивидуально. Например, создадим текстовый файл /etc/vsftpd_user_conf/user1 и изменим путь, в который попадает пользователь после удачного логина.

# sudo vim /etc/vsftpd_user_conf/user1
local_root=/var/ftp/site

Насроем доступ для vsftpd к созданой выше mysql базе с аккаунтами пользователей. Для этого нужно натсроить PAM для vsftpd.

Сохраним старую версию настроечного файла

sudo mv /etc/pam.d/vsftpd{,_bak}

Добавим новые настройки

# sudo vim /etc/pam.d/vsftpd
auth required pam_mysql.so user=vsftpd passwd=_password_ host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
account required pam_mysql.so user=vsftpd passwd=_password_ host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

Перезапустим vsftpd сервер

sudo service vsftpd restart

Создадим аккаунт для пользователя user1

INSERT INTO accounts (username, pass) VALUES('user1', PASSWORD('_password_'));

Если домашняя директория для user1 не создалась автоматически, то создадим вручную

mkdir /home/vsftpd/user1
chown vsftpd:nogroup /home/vsftpd/user1

Проверим работу ftp-сервера

ftp localhost 21

Дополнительное чтиво

Статьи с описанием настройки proftpd

Дополнительный материал:

blog comments powered by Disqus