Создание FTP сервера
Добавлено: 31 окт 2015, 14:05
				
				Введение:
1С'ники, для обмена, попросили создать ftp сервер.
 
Задача:
Создать ftp сервер с возможностью добавления пользователей.
Реализация:
Ставим сервер из портов
Отвечаем на вопросы
Добавляем в /etc/rc.conf
Логины и пароли FTP будет хранить в MySQL. Если он у вас не установлен - то вам сюда, если установлен, то продолжаем.
Копируем конфиги
Теперь приведу листинг файлов
/usr/local/etc/pure-ftpd.conf
/usr/local/etc/pureftpd-mysql.conf
Вы же должны поправить эти файлы под своё мировозрение, ну или по крайней мере у вас есть точно работающий листинг кончиков... иногда, когда что нить настроишь и оно не работает - так не хватает именно рабочего конфета, посмотреть что оно вообще умеет работать...
Теперь надо идти в MySQL и создавать базу.
К слову, описание настроек приведено в файле /usr/local/share/doc/pure-ftpd/README.MySQL
Всё в том же MySQL добавляем пользователя
А если ошиблись, и надо сменить имя пользователя, к примеру, то
Понимаем что если пользователей больше 1 то так лучше не менять - изменится у всех
Теперь надо создать пользователя, под которым сам ftp сервер будет ходить в БД:
			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;