Делать было в понедельник нечего сутра, вот решил написать статью, как поднять рабочий фтп сервер vsftpd с пользователями в mysql базе с шифрованными паролями.
OS: FreeBSD 6.3-STABLE
Суть механизма: vsftpd общается с pam, а pam общается с mysql.
# cd /usr/ports/ftp/vsftpd/
# make install clean
Я ставил без поддержки SSL.
Поставили, далее модуль pam_mysql.so
# cd /usr/ports/security/pam-mysql
# make install clean
# /usr/ports/databases/mysql41-server
# make install clean
Создадим базу где будут храниться логины и пароли от пользователей. Владелец базы vsftpd, пароль ftpdpass
#mysql -u root
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;
Далее командой # adduser создаем пользователя с похожими данными /etc/passwd
ps: в качестве фаервола я всегда использую pf, добавляем в /etc/pf.conf правила для фтп сервера:
pass in on $ext_if inet proto tcp from any port 1024:65535 to \
ваш.ip.адрес port 21 flags S/SA keep state
pass in on $ext_if inet proto tcp from any port 1024:65535 to \
ваш.ip.адрес port 50000:50100 flags S/SA keep state
Строки pasv_min_port=50000 pasv_max_port=50100 в /usr/local/etc/vsftpd.conf означают, что открываются порты с 50000 до 50100 для пассивного режима работы фтп сервера и максимально может быть только 100 одновременных сессий.
pss: пользователей можно заводить и при помощи обычного phpmyadmin