Главная > Без рубрики > Виртуальный хостинг Proftpd +авторизация из MySQL

Виртуальный хостинг Proftpd +авторизация из MySQL

Виртуальный хостинг Proftpd +авторизация из MySQL

и так приступим

устанавливаем MySQL phpmyadmin и Apache(Нужен PHPMyAdminу)

apt-get install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2

отвечаем на вопросы установщика

далее устанавливаем proftpd и модуль для работы с БД MySQL

apt-get install proftpd proftpd-mod-mysql

создаем пользователя и группу для ФТП

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

далее создаем Базу данных и пользователя ftp и ftp соответственно

mysql -u root -p
create database ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'ftp'@'localhost' IDENTIFIED BY 'ТУТ_ПАРОЛЬ';
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'ftp'@'localhost.localdomain' IDENTIFIED BY 'ТУТ_ПАРОЛЬ';
FLUSH PRIVILEGES;

не забываем сменить ‘ТУТ_ПАРОЛЬ’; на ваше значение

далее создаем необходимые таблицы

USE ftp;
CREATE TABLE ftpgroup (
groupname varchar(16) NOT NULL default '',
gid smallint(6) NOT NULL default '5500',
members varchar(16) NOT NULL default '',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table';
CREATE TABLE ftpquotalimits (
name varchar(30) default NULL,
quota_type enum('user','group','class','all') NOT NULL default 'user',
per_session enum('false','true') NOT NULL default 'false',
limit_type enum('soft','hard') NOT NULL default 'soft',
bytes_in_avail int(10) unsigned NOT NULL default '0',
bytes_out_avail int(10) unsigned NOT NULL default '0',
bytes_xfer_avail int(10) unsigned NOT NULL default '0',
files_in_avail int(10) unsigned NOT NULL default '0',
files_out_avail int(10) unsigned NOT NULL default '0',
files_xfer_avail int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
CREATE TABLE ftpquotatallies (
name varchar(30) NOT NULL default '',
quota_type enum('user','group','class','all') NOT NULL default 'user',
bytes_in_used int(10) unsigned NOT NULL default '0',
bytes_out_used int(10) unsigned NOT NULL default '0',
bytes_xfer_used int(10) unsigned NOT NULL default '0',
files_in_used int(10) unsigned NOT NULL default '0',
files_out_used int(10) unsigned NOT NULL default '0',
files_xfer_used int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
CREATE TABLE ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default '',
passwd varchar(32) NOT NULL default '',
uid smallint(6) NOT NULL default '5500',
gid smallint(6) NOT NULL default '5500',
homedir varchar(255) NOT NULL default '',
shell varchar(16) NOT NULL default '/sbin/nologin',
count int(11) NOT NULL default '0',
accessed datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTP user table';
quit;

настраиваем proftpd

редактируем конфигурационный файл proftpd

 nano /etc/proftpd/proftpd.conf 

отключаем поддержку IPv6

...
UseIPv6                         off
...

далее по желанию зменяем имя хоста

ну и на последок в конец файла прописываем следующие строки для авторизации из БД

DefaultRoot ~

SQLBackend              mysql
# The passwords in MySQL are encrypted using CRYPT

SQLAuthTypes            Plaintext Crypt
SQLAuthenticate         users groups

# used to connect to the database
# databasename@host database_user user_password

SQLConnectInfo  ftp@localhost ftp ТУТ_ПАРОЛЬ

# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db

SQLUserInfo     ftpuser userid passwd uid gid homedir shell

# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db

SQLGroupInfo    ftpgroup groupname gid members

# set min UID and GID - otherwise these are 999 each

SQLMinID        500

# create a user's home directory on demand if it doesn't exist

CreateHome on
# Update count every time user logs in

SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Update modified everytime user uploads or deletes a file

SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

# User quotas
# ===========

QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on

SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

RootLogin off

RequireValidShell off

ну и помним о том что необходимо заменить ТУТ_ПАРОЛЬ на свое значение

подключаем модули для работы с БД

nano /etc/proftpd/modules.conf

розкоментируем 2 строчки

...
LoadModule mod_sql.c
...
LoadModule mod_sql_mysql.c
...

перезапускаем proftpd

/etc/init.d/proftpd restart

далее идем заполнять БД

mysql -u root -p
USE ftp;

для начала созадим запись в таблице ftpgroup

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');

и так мы созади запись с именем группы ftpgroup , gidом 2001

больше необходимости записывать в эту таблицу не будет

все дальнейшие записи будут производиться в таблицы ftpquotalimits и ftpuser

тепрь создадм нашего первого ползователя

INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES ('explame_user', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0);
INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, 'example_user', 'ТУТ_ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ', 2001, 2001, '/var/www/example.com', '/sbin/nologin', 0, '', '');
quit;

и так что мы сделали мы созадали пользователя explame_user с квотой 15 мб домашиним каталогом /var/www/example.com и паролем ТУТ_ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ

дальнейшее администрирование

опиасние таблиц

Таблица ftpuser:
Важными являются эти колонки (другие заполняются MySQL или Proftpd автоматически, поэтому не заполняйте их вручную!):
userid: Имя виртуального пользователя Proftpd (напр. exampleuser).
passwd: В не зашифрованном виде (например, clear-text) пароль пользователя.
uid: Userid пользователя ftp, созданного в конце второго шага (напр. 2001).
gid: Groupid группы ftp, сознанного в конце второго шага (напр. 2001).
homedir: Если его не существует, он будет создан, когда новый пользователь впервые войдет через FTP. Виртуальный пользователь будет ограничен только своим домашним каталогом, , т.е. он не сможет получить доступ к другим каталогам, в не его домашнего каталога.
shell: Будет нормально, если вы будете по умолчанию использовать /sbin/nologin здесь.
Таблица ftpquotalimits:
Важными являются эти колонки (другие заполняются MySQL или Proftpd автоматически, поэтому не заполняйте их вручную!):
name: Имя виртуального пользователя Proftpd (напр. exampleuser).
quota_type: пользователь или группа. Как правило, здесь используется пользователь.
per_session: true или false. True означает, что квота действует только для данной сессии. Например, если пользователь имеет квоту в 15 Мб, и он загрузил 15 MB в течение одной сессии, то он не сможет больше ничего загрузить, но если он откроет новую сессию, он опять сможет загрузить 15 Мб. False означает, что пользователь имеет 15 МБ не учитывая сессии.
limit_type: hard или soft. Hard лимит квоты никогда не дает превышать лимит, в то время как soft квоты могут быть временно превышены. Обычно используется hard.
bytes_in_avail: Лимит закачки в байтах (например 15728640 для 15 MB). 0 означает неограниченный.
bytes_out_avail: Лимит загрузки в байтах. 0 означает неограниченный.
bytes_xfer_avail: Лимит передача в байтах. Суммарный лимит закачки и загрузки пользователя. 0 означает неограниченную.
files_in_avail: Лимит загрузки в файлах. 0 означает неограниченную.
files_out_avail: Лимит закачки в файлах. 0 означает неограниченный.
files_xfer_avail: Tranfer limit in files. 0 means unlimited. Лимит передачи в файлах. 0 означает неограниченный.
Ftpquotatallies таблица используется внутри Proftpd для управления квотами так что вам нет необходимости делать записи в нем!

в планах на будущее это роганизовать подтягивание конфигов виртуальных хостов из бд и соотвецтвенно подтягивание собственнх пользователй для каждого домена

Categories: Без рубрики Tags:
  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.