Дек 082010
 

От нечего делать на работе, бродил по просторам интернета, читал форумы и т.д.

Ранее я никогда никому ничего не поднимал по удаленке, а тут время было свободное + интерес, так как попросили поднять proftpd с поддержкой mysql для хранения пользователей в базе на Debian Linux. Признаюсь честно, до этого я Debian только один раз щупал, и то, только файлы переносил с него на FreeBSD

Сначала снес в системе все что связано с proftpd сначало командой

apt-get remove proftpd-mod-mysql

а для точной уверенности что все снес выполнил эту команду

apt-get autoremove proftpd-mod-mysql

, потом начал его устанавливать, единственный плюс в Debian это то, что быстро устанавливается все.

Начинаем установку, выполняем команду

aptitude install proftpd-mod-mysql

, установка заняла от силы минуту Думал быстро все настрою и все. Но не тут то было.

Вроде и пакет ставил с поддержкой mysql но при выводе

proftpd -l
Compiled-in modules:
mod_core.c
mod_xfer.c
mod_auth_unix additional hints.c
mod_auth_file.c
mod_auth.c
mod_ls.c
mod_log.c
mod_site.c
mod_delay.c
mod_dso.c
mod_auth_pam.c
mod_readme.c
mod_cap.c
mod_ctrls.c
mod_lang.c

Он не отображался, гуглил я долго, честно скажу, ранее proftpd я никогда не поднимал в течении суток
Собака оказалась зарыта немного ближе чем я думал, большая часть модулей подключается через сам конфиг proftpd

После долгих и мучительных ковыряний форумов по Debian я точно понял, что никогда не буду ее использовать но это все лирика.

Привожу тут конфиг который у меня завелся на Debian

Include /etc/proftpd/modules.conf
ServerName              «My proftpd Server»
ServerType              standalone
# смысл следующей директивы такой: если клиент коннектится не на имя
# а на IP или на виртуальный хост, не описанный в конфиге, то при
# установке в `off` он получит отлуп, если же установлено `on` то
# он будет обслужен `сервером по-умолчанию`
DefaultServer           on
ServerAdmin             admin@test.ru
Port                    21
Umask                   022

MaxInstances            30

User                            proftpd
Group                           nogroup

Include /etc/proftpd/sql.conf

SystemLog               /var/log/proftpd/proftpd.log
TransferLog             /var/log/proftpd/proftpd-tranfer.log
ExtendedLog             /var/log/proftpd/proftpd-extended.log read,write

UseReverseDNS     off
IdentLookups      off

DefaultRoot             ~       !user

# Директории

AllowOverwrite          on

AllowAll
AllowAll
User                            proftpd
Group                           nogroup

UserAlias       anonymous ftp
MaxClients      10      «Sorry, max %m users – try again later»

DenyAll

Далее немного покопался в файлике /etc/proftpd/modules.conf и привел его к такому виду

ModuleControlsACLs insmod,rmmod allow user root
ModuleControlsACLs lsmod allow user *

LoadModule mod_ctrls_admin.c
LoadModule mod_tls.c

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

LoadModule mod_radius.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c

LoadModule mod_quotatab_sql.c
LoadModule mod_quotatab_radius.c
LoadModule mod_wrap.c
LoadModule mod_rewrite.c
LoadModule mod_load.c
LoadModule mod_ban.c
LoadModule mod_wrap2.c
LoadModule mod_wrap2_file.c
LoadModule mod_wrap2_sql.c
LoadModule mod_dynmasq.c

# keep this module the last one
LoadModule mod_ifsession.c

Далее следует sql.conf привел его к такому виду

#
# Proftpd sample configuration for SQL-based authentication.
#
# (This is not to be used if you prefer a PAM-based SQL authentication)
#
SQLAuthTypes            Plaintext
SQLAuthenticate         users
SQLConnectInfo          имя_базы@localhost имя_пользователя пароль
SQLUserInfo             users username password uid gid homedir shell
SQLLogFile             /var/log/proftpd/sql.log

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 quotalimits 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 quotatallies 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}’» quotatallies
SQLNamedQuery insert-quota-tally INSERT «%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}» quotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
QuotaLog                        /var/log/proftpd/quota.log

И вот сам дамп базы mysql

SET FOREIGN_KEY_CHECKS=0;
– —————————-
– Table structure for `quotalimits`
– —————————-
DROP TABLE IF EXISTS `quotalimits`;
CREATE TABLE `quotalimits` (
`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` float NOT NULL DEFAULT ’0′,
`bytes_out_avail` float NOT NULL DEFAULT ’0′,
`bytes_xfer_avail` float 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′
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

– —————————-
– Records of quotalimits
– —————————-
INSERT INTO quotalimits VALUES (‘airo’, ‘user’, ‘false’, ‘hard’, ’157286000′, ’0′, ’0′, ’0′, ’0′, ’0′);

– —————————-
– Table structure for `quotatallies`
– —————————-
DROP TABLE IF EXISTS `quotatallies`;
CREATE TABLE `quotatallies` (
`name` varchar(30) NOT NULL DEFAULT »,
`quota_type` enum(‘user’,'group’,'class’,'all’) NOT NULL DEFAULT ‘user’,
`bytes_in_used` float NOT NULL DEFAULT ’0′,
`bytes_out_used` float NOT NULL DEFAULT ’0′,
`bytes_xfer_used` float 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′
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

– —————————-
– Records of quotatallies
– —————————-

– —————————-
– Table structure for `users`
– —————————-
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`primary_key` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL DEFAULT »,
`password` varchar(20) NOT NULL DEFAULT »,
`uid` int(11) NOT NULL DEFAULT ’0′,
`gid` int(11) NOT NULL DEFAULT ’0′,
`homedir` varchar(50) NOT NULL DEFAULT »,
`shell` varchar(20) NOT NULL DEFAULT »,
PRIMARY KEY (`primary_key`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

– —————————-
– Records of users
– —————————-
INSERT INTO users VALUES (’1′, ‘slik’, ‘пароль’, ’1012′, ’1013′, ‘/mnt/40′, ‘/sbin/nologin’);

На этом мои мучения с Debian закончились, я получил немного опыта в Linux, пока мне хватило этого