От нечего делать на работе, бродил по просторам интернета, читал форумы и т.д.
Ранее я никогда никому ничего не поднимал по удаленке, а тут время было свободное + интерес, так как попросили поднять 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, пока мне хватило этого