soldatov.info

Блог Солдатова Евгения

FTP сервер на базе proftpd с хранением пользователей в MySQL

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

Работал на ftpd, неустраивали системные ученые записи, не совсем удобно, наткнулся на статейку http://www.lissyara.su/?id=1144, переписал для себя.

Собирается все на ура из портов:

cd /usr/ports/ftp/proftpd-mysql/
make config

Отметил MYSQL и QUOTA, нажал OK, покурил, после инсталляции поправил конфиг /usr/local/etc/proftpd.conf

ServerName        "Server name"
ServerType        standalone
DefaultServer        on
ScoreboardFile        /var/run/proftpd.scoreboard
 
Port            21
 
Umask            022
 
MaxInstances        30
 
CommandBufferSize    512
 
User            nobody
Group            nogroup
 
DefaultRoot ~
 
SQLAuthTypes        Plaintext
SQLAuthenticate        users
SQLConnectInfo        proftpd@localhost:3306 proftpd password
SQLUserInfo        `users_table` `username` `password` `uid` `gid` \
`homedir` `shell`
RequireValidShell    off
SQLLogFile        /var/log/proftpd.log
 
SQLLog        PASS            counter_login
SQLNamedQuery    counter_login        UPDATE "`last_login`=UNIX_TIMESTAMP(), \
`login_count`=`login_count`+1 WHERE \
`username`='%u'" `users_table`
SQLLog        ERR_PASS        counter_err
SQLNamedQuery    counter_err        UPDATE "`last_err_login`=UNIX_TIMESTAMP(), \
`err_login_count`=`err_login_count`+1 WHERE \
`username`='%U'" `users_table`
SQLLog        RETR,STOR        log_story_transfer
SQLNamedQuery    log_story_transfer    INSERT "'',\
UNIX_TIMESTAMP(),'%u',\
'%f', '%b', '%h', \
'%a', '%m', '%T'" \
`xfer_table`
SQLLOG        ERR_RETR,ERR_STOR,ERR_DELE,ERR_RMD,ERR_RNTO\
log_err_modify
SQLNamedQuery    log_err_modify        INSERT "'',\
UNIX_TIMESTAMP(),\
'%u', '%f', '%h', \
'%a', '%m'" `xfer_errors`
 
AllowOverwrite        on
 
<limit SITE_CHMOD>
DenyAll
</limit>
 
<anonymous ~ftp>
User        ftp
Group        ftp
UserAlias    anonymous ftp
MaxClients    10
</anonymous>

Поправил конфиг, создал таблицы в MySQL:

DROP TABLE IF EXISTS `users_table`;
CREATE TABLE `users_table` (
`unic_id` int(11) NOT NULL auto_increment,
`username` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
`groupname` varchar(24) NOT NULL,
`uid` int(11) NOT NULL,
`gid` int(11) NOT NULL,
`homedir` varchar(50) NOT NULL,
`shell` varchar(20) NOT NULL,
`last_login` int(15) NOT NULL,
`login_count` int(15) NOT NULL,
`last_err_login` int(15) NOT NULL,
`err_login_count` int(15) NOT NULL,
PRIMARY KEY  (`unic_id`)
) ENGINE=MyISAM COMMENT='Таблица пользователей';
 
DROP TABLE IF EXISTS `xfer_errors`;
CREATE TABLE `xfer_errors` (
`unic_id` int(32) NOT NULL auto_increment,
`timestamp` int(15) NOT NULL,
`user_name` varchar(64) NOT NULL,
`file_and_path` tinytext NOT NULL,
`client_name` varchar(127) NOT NULL,
`client_IP` varchar(15) NOT NULL,
`client_command` varchar(5) NOT NULL,
PRIMARY KEY  (`unic_id`)
) ENGINE=MyISAM COMMENT='Таблица ошибок';
 
DROP TABLE IF EXISTS `xfer_table`;
CREATE TABLE `xfer_table` (
`unic_id` int(32) NOT NULL auto_increment,
`timestamp` int(15) NOT NULL,
`user_name` varchar(64) NOT NULL,
`file_and_path` tinytext NOT NULL,
`bytes` int(15) NOT NULL default '0',
`client_name` varchar(127) NOT NULL,
`client_IP` varchar(15) NOT NULL,
`client_command` varchar(5) NOT NULL,
`send_time` varchar(9) NOT NULL default '0',
PRIMARY KEY  (`unic_id`)
) ENGINE=MyISAM COMMENT='Таблица, принятых-переданных файлов';

И завел первых пользователей:

INSERT INTO `users_table` VALUES (1,'admin','password','admin',1000,1000,'/var/ftp/','/sbin/nologin',0,0,0,0);
INSERT INTO `users_table` VALUES (2,'user','password', 'user',1001,1001,'/var/ftp/user/','/sbin/nologin',0,0,0,0);

Создал лог-файл:

touch /var/log/proftpd.log

Создал директории для пользователей admin и user и дал на них права:

mkdir /var/ftp/ /var/ftp/user/
chown 1000:1000 /var/ftp/user/
chown 1001:1000 /var/ftp/user/

Внес строку в /etc/rc.conf и запустил:

echo 'proftpd_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/proftpd start

Готово!

Автор: Евгений

Дата: 06.10.2008 в 19:53:46

Рубрики: Unix, Linux,Программы

Метки: , ,

Leave a Reply

You must be logged in to post a comment.