Centos установка PureFTPd с виртуальными пользователями в MySQL

Для начала подключаем EPEL репозиторий
После ставим необходимый софт:

# yum install -y mysql mysql-server pure-ftpd

Добавляем сервисы в автозагрузку:

# chkconfig --levels 235 mysqld on
# /etc/init.d/mysqld start
# chkconfig --levels 235 pure-ftpd on

настраиваем мускул

# mysql_secure_installation

Добавляем группу и пользователя ftp:

# groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

Создаем базу данных под фтп:

# mysql -u root -p

создаем базу и пользователя с правами на нее:

CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'hardpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'hardpass';
FLUSH PRIVILEGES;

hardpass не забываем изменить на свой)
Создадим таблицу в бд

USE pureftpd;
CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) ENGINE=MyISAM;

Настраиваем pure-ftpd, открываем файл настроек:

# nano /etc/pure-ftpd/pure-ftpd.conf

находим и меняем следующие параметры, на те что указаны ниже:

ChrootEveryone              yes
MySQLConfigFile               /etc/pure-ftpd/pureftpd-mysql.conf
CreateHomeDir               yes

Настраиваем подключение к базе

# nano /etc/pure-ftpd/pureftpd-mysql.conf

Например так:

MYSQLSocket      /var/lib/mysql/mysql.sock
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLUser       pureftpd
MYSQLPassword   hardpass
MYSQLDatabase   pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt      md5
MYSQLGetPW      SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")

Запускаем на фтп сервер:

# /etc/init.d/pure-ftpd start

Создадим тестового пользователя:

# mysql -u root -p


как-то так:

USE pureftpd;
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('testuser', '1', MD5('secret'), '2001', '2001', '/home/testuser', '100', '100', '', '*', '500', '0');

только что мы создали пользователя testuser с квотой в 500 Мб, и скоростью загрузки отдачи 100Кбит/с.
На этом все, пробуем подключиться к фтп с только что созданным пользователем.
Возможно, необходимо будет настроить iptables

Поделись с друзьями:

Опубликовано 21.05.2012 в 14:21 · Автор komivlad · Ссылка
Рубрики: CentOS · Теги: , , ,

2 комментария

Подписаться на комментарии по RSS

  1. Написал(-а) komivlad
    01.07.2013 в 17:25
    Ответить · Ссылка

    Ага, спс, поправил очепятки

  2. Написал(-а) Алексей
    30.06.2013 в 17:35
    Ответить · Ссылка

    «\L»AND нужно писать отдельно

Подписаться на комментарии по RSS

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