1С'ники, для обмена, попросили создать ftp сервер.
Задача:
Создать ftp сервер с возможностью добавления пользователей.
Реализация:
Ставим сервер из портов
Код: Выделить всё
# cd /usr/ports/ftp/pure-ftpd/
# make install clean
Код: Выделить всё
pureftpd_enable="YES"
Копируем конфиги
Код: Выделить всё
cp /usr/local/etc/pure-ftpd.conf.sample /usr/local/etc/pure-ftpd.conf
cp /usr/local/etc/pureftpd-mysql.conf.sample /usr/local/etc/pureftpd-mysql.conf
/usr/local/etc/pure-ftpd.conf
Код: Выделить всё
ChrootEveryone yes
BrokenClientsCompatibility no
MaxClientsNumber 50
Daemonize yes
MaxClientsPerIP 3
VerboseLog no
DisplayDotFiles yes
AnonymousOnly no
NoAnonymous yes
SyslogFacility ftp
DontResolve yes
MaxIdleTime 15
MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf
LimitRecursion 10000 8
AnonymousCanCreateDirs no
MaxLoad 4
AntiWarez yes
Umask 133:022
MinUID 100
AllowUserFXP no
AllowAnonymousFXP no
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
AutoRename no
AnonymousCantUpload no
MaxDiskUsage 99
CustomerProof yes
IPV4Only yes
FileSystemCharset koi8-r
ClientCharset UTF-8
Код: Выделить всё
MYSQLSocket /tmp/mysql.sock
MYSQLUser pure-ftpd
MYSQLPassword P@$$w0rd
MYSQLDatabase pureftpd
MYSQLCrypt cleartext
MYSQLGetPW SELECT `password` FROM `users` WHERE `user`="\L" AND `active`='1'
MYSQLGetUID SELECT `uid` FROM `users` WHERE `user`="\L"
MYSQLGetGID SELECT `gid` FROM `users` WHERE `user`="\L"
MYSQLGetDir SELECT `home` FROM `users` WHERE `user`="\L"
Теперь надо идти в MySQL и создавать базу.
Код: Выделить всё
create database pureftpd;
use pureftpd;
CREATE TABLE `users` (
EFAULT '10',
`ULBandwidth` int(6) NOT NULL DEFAULT '1024',
`DLBandwidth` int(6) NOT NULL DEFAULT '1024',
`active` int(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`user`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 -> `user` varchar(16) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
-> `password` varchar(64) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
-> `uid` int(11) NOT NULL DEFAULT '-1',
-> `gid` int(11) NOT NULL DEFAULT '-1',
-> `home` varchar(128) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '/usr/home/anonymous',
-> `QuotaFiles` int(9) NOT NULL DEFAULT '10000',
-> `QuotaSize` int(6) NOT NULL DEFAULT '100',
-> `ULRatio` int(2) NOT NULL DEFAULT '1',
-> `DLRatio` int(2) NOT NULL DEFAULT '10',
-> `ULBandwidth` int(6) NOT NULL DEFAULT '1024',
-> `DLBandwidth` int(6) NOT NULL DEFAULT '1024',
-> `active` int(1) NOT NULL DEFAULT '1',
-> PRIMARY KEY (`user`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=latin1
-> ;
Всё в том же MySQL добавляем пользователя
Код: Выделить всё
INSERT INTO `users` VALUES ('1c_td', 'password123', 1001, 1001, '/usr/home/ftp/1c_td', 10000, 100, 1, 10, 1024, 1024, 1);
Код: Выделить всё
UPDATE `users` SET `uid`=1002;
Теперь надо создать пользователя, под которым сам ftp сервер будет ходить в БД:
Код: Выделить всё
GRANT ALL PRIVILEGES ON pureftpd.* TO 'pure-ftpd'@'localhost' IDENTIFIED BY 'P@$$w0rd' WITH GRANT OPTION;