Очередная небольшая хаутушка по привязку мускула к vsftpd. Для чего всё-таки нужна связка мускула с FTP сервером:
- Безопасность. Все пользователи лежат в базе. Если кульхацкеру удастся подобрать пароль юзера, в систему попасть не получится
- Гибкость. На каждого виртуального юзера можно создать свой конфиг с указанием параметров подключения
- Удобство. Все 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).
Ну и
порадовало :) Буду знать, что есть альтернативы
Согласен, в твоём
Согласен, в твоём варианте
букофф меньше :)
По поводу привязки к sqlite - ХЗ. Всезнающий гугль гововрит, что pam_sqlite есть в природе, тока как его прикручивать - это уж тебе придётся ковыряться.
А по поводу файрвола - надо в правилах iptables добавить (по необходимости)
Насчет букв меньше: Дело не в
Насчет букв меньше:
Дело не в этом. Я действительно узнал полезную вещь:
создает пустой файл, но если файл с таким именем уже имеется и чем-то заполнен, то ничего с его содержимым не происходит. А строчка
позволяет быстро "опустошить" имеющийся файл. Так что 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, хоть тресни.
Отправить комментарий