Настройка vsftpd + mysql в Debian

Очередная небольшая хаутушка по привязку мускула к vsftpd. Для чего всё-таки нужна связка мускула с FTP сервером:

  1. Безопасность. Все пользователи лежат в базе. Если кульхацкеру удастся подобрать пароль юзера, в систему попасть не получится
  2. Гибкость. На каждого виртуального юзера можно создать свой конфиг с указанием параметров подключения
  3. Удобство. Все ftp-юзверя аккуратно складированы в мускульной базе. При помощи того же phpmyadmin можно прекрасно ими рулить.

Установим мускул + всё необходимое

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

* После установки незабудьте поставить пароль рута на мускул.

В мускуле создадим базу, пользователя, от имени которого  vsftpd будет забирать список пользователей, и таблицу для хранения пользователей

mysql -u root -p

CREATE DATABASE vsftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;
USE vsftpd;
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 ;
quit;

В принципе, можно помимо шифрованного пассворда добавить нешифрованный, чтобы при необходимости можно было глянуть "чистый" пароль, не перебивая старый (если кто-то из юзверей забыл его). 

В этом случае создание таблицы accounts будет выглядеть следующим образом 

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

Поднастроим vsftpd

В Debian, при установке vsftpd создаётся пользователь ftp с домашней папкой /home/ftp. Я предпочитаю хранить ftp файлопомойку на отдельном разделе. Поэтому переопределим хоумдир ftp

usermod -d /ftp ftp

Подправим конфиги vsftpd. Для начала сохраним оригинальный конфиг

cp /etc/vsftpd.conf /etc/vsftpd.conf_old
cat /dev/null > /etc/vsftpd.conf
vim /etc/vsftpd.conf

Пропишем следующее в конфиг

listen=YES
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
guest_enable=YES
guest_username=vsftpd
local_root=/ftp/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf
dual_log_enable=YES
xferlog_file=/var/log/vsftpd_xrefer.log
vsftpd_log_file=/var/log/vsftpd.log
ftpd_banner=Welcome to bla-bla-bla FTP server.

Сохраняем, выходим. Создадим /etc/vsftpd_user_conf, в которой будут лежать конфиги на каждого пользователя. Также прикрутим PAM для наших виртуальных FTP юзверей.

mkdir /etc/vsftpd_user_conf

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig
cat /dev/null > /etc/pam.d/vsftpd
vim /etc/pam.d/vsftpd

Пропишем следующее

auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

Сохраняем, выходим, рестартуем vsftpd

/etc/init.d/vsftpd restart

Создадим в мускульной базе ftp-юзера

mysql -u root -p
USE vsftpd;
INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
/q

В случае, если решили хранить "чистые пароли" в базе вместе с шифрованными, то необходимо создавать пользователя следующим образом

INSERT INTO accounts (username, pass, sourcepass) VALUES('testuser', PASSWORD('secret'), 'secret');

Домашняя директория testuser’а по умолчанию будет/ftp/testuser.
Если она не создалась автоматически, создадим эту директорию вручную в группе: nogroup:

mkdir /ftp/testuser
chown vsftpd:nogroup /ftp/testuser

При необходимости, можно создать конфиг для testuser, в котором переопределить некоторые параметры FTP сервера для конкретного юзера. Для этого, в папке /etc/vsftpd_user_conf создадим файл с именем пользователя

touch /etc/vsftpd_user_conf/testuse
vim /etc/vsftpd_user_conf/testuse

В данном файле можете задавать различные параметры, к примеру:

local_root=/любой_путь_к_любому_каталогу_который_станет_хоумдиром_для_testuser/
write_enable=YES
guest_enable=YES
guest_username=vsftpd

ну и так далее для для разных параметров. Только не забывайте создавать вышеуказанные папки и проставлять нужные права на них. Сохраняете, рестартуете vsftpd. Вроде всё.

  Спасибо, как раз vsftpd

 

Спасибо, как раз vsftpd настраиваю. А есть pam_sqlite.so  или pam_pgsql.so? А то ради ftp поднимать mysql не серьезно, а технология полезная.

Хочу, кстати, добавить, что при настройке vsftpd иногда возникают проблемы с файрволом, если он слишком уж строго настроен. Поэтому в конфиге полезно использовать параметры pasv_max_port и pasv_min_port, оставив для них открытый в фаере диапазон, например (9000:9100).

Ну и

cp /etc/vsftpd.conf /etc/vsftpd.conf_old
cat /dev/null > /etc/vsftpd.conf

порадовало :)  Буду знать, что есть альтернативы

mv /etc/vsftpd.conf /etc/vsftpd.conf_old
touch /etc/vsftpd.conf

 

 

Согласен, в твоём

Согласен, в твоём варианте

 touch /etc/vsftpd.conf

букофф меньше :)

По поводу привязки к sqlite - ХЗ. Всезнающий гугль гововрит, что pam_sqlite есть в природе, тока как его прикручивать - это уж тебе придётся ковыряться.

 А по поводу файрвола - надо в правилах iptables добавить (по необходимости)

/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp

Насчет букв меньше: Дело не в

Насчет букв меньше:

Дело не в этом. Я действительно узнал полезную вещь:

touch /etc/vsftpd.conf

создает пустой файл, но если файл с таким именем уже имеется и чем-то заполнен, то ничего с его содержимым не происходит. А строчка

cat /dev/null > somefile

позволяет быстро "опустошить" имеющийся файл. Так что special thanks за это :) Ну и за инфу о pam-модулях спасибо. Мой любимый Slackware их, гад, не поддерживает напрямую (видите ли Патрику они "не нравятся", так в форумах и написано), но мне позарез нужен openldap-модуль для аутентификации в школе. Может напишешь про pam как-нибудь? Только вот без всяких этих ваших apt get. А с configure && make && make install. С меня будет тогда много-много пива :))))

Есть у меня заветная мечта -

Есть у меня заветная мечта - написать статью, в которой описать прикручивание всего, что можно на LDAP. Но всё руки не доходят - шибко много времени отнимет. А со временем сейчас туговато :(

PS: configure && make && make install использовать в дебиане - кощунство :)

В догонку про sqlite. Пошукай

В догонку про sqlite. Пошукай тут:

 ht_tp://linux.softpedia.com/get/Security/pam-sqlite-12310.shtml

Отлично :) В закладки себе

Отлично :) В закладки себе занес.

А еще говорят, что vsftpd не может  юзать виртуальные аккаунты. :)

Настройка vsftpd + mysql в Debian

Error 530, как не меняй пароль. Бьюсь периодически уже с пол года с этой проблемой.
Создал для вирт пользователей каталоги с точкой впереди. Заходят через анонимуса. Просто мудреные имена таких каталогов и все.
Облазил все форумы и ресурсы. ошибка 530, хоть тресни.

Отправить комментарий

КАПЧА
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Enter the characters (without spaces) shown in the image.