Создание FTP сервера

Тут описывается нелёгкий путь настройки ОС FreeBSD, начиная с установки дистрибутива и заканчивая настройкой каждого сервиса
Ответить
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Создание FTP сервера

Сообщение RomA »

Введение:
1С'ники, для обмена, попросили создать ftp сервер.

Задача:
Создать ftp сервер с возможностью добавления пользователей.

Реализация:
Ставим сервер из портов

Код: Выделить всё

# cd /usr/ports/ftp/pure-ftpd/
# make install clean
Отвечаем на вопросы
4.jpg
Добавляем в /etc/rc.conf

Код: Выделить всё

pureftpd_enable="YES"
Логины и пароли FTP будет хранить в MySQL. Если он у вас не установлен - то вам сюда, если установлен, то продолжаем.
Копируем конфиги

Код: Выделить всё

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
/usr/local/etc/pureftpd-mysql.conf

Код: Выделить всё

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
    -> ;


К слову, описание настроек приведено в файле /usr/local/share/doc/pure-ftpd/README.MySQL

Всё в том же 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;
Понимаем что если пользователей больше 1 то так лучше не менять - изменится у всех

Теперь надо создать пользователя, под которым сам ftp сервер будет ходить в БД:

Код: Выделить всё

GRANT ALL PRIVILEGES ON pureftpd.* TO 'pure-ftpd'@'localhost' IDENTIFIED BY 'P@$$w0rd' WITH GRANT OPTION;
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

FTP сервер - ротация логов

Сообщение RomA »

Введение:
Дабы логи не плодились бесконтрольно, бороды рубить им будем

Задача:
После настроек по умолчанию блудит ftp-сервер во все логи безбожно. Смотреть неудобно - со временем начинает это раздражать.

Реализация:
Для начала постараемся сделать так, что бы ftp сервер сыпал свои данные не везде, а только в свой лог, для этого в файле /etc/syslog.conf изменяем строку, вписав ftp.none

Код: Выделить всё

*.notice;authpriv.none;ftp.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
Тут же ниже комментируем ftp.info

Код: Выделить всё

#ftp.info                                       /var/log/xferlog
И ещё ниже добавляем наш лог

Код: Выделить всё

!pure-ftpd
*.*                                             /var/log/pureftpd.log
Теперь надо сделать так, что бы лог обрезался. Делается это в файле /etc/newsyslog.conf

Код: Выделить всё

/var/log/pureftpd.log                   600  7     *    @T00  JC
То есть обрезать файл я буду каждый день в полночь и хранить архив за 7 дней.

Теперь надо применить наши изменения и наслаждаться результатом

Код: Выделить всё

/etc/rc.d/syslogd restart
/etc/rc.d/newsyslog restart
Scorp
Сообщения: 22
Зарегистрирован: 16 янв 2009, 14:19

Re: Создание FTP сервера

Сообщение Scorp »

или можно ничего не устанавливать и использовать стандартный сервис /etc/rc.d/ftpd , юзеры заводятся в систему, FTP шара - их домашний каталог, что бы они не смогли выйти из своего каталога - добавить этих юзеров в файл /etc/ftpchroot

я обычно не использую на прямую ftpd сервис, а использую сервис inetd, плюс этого способа, что в памяти всегда висит один сервис и слушает нужные порты и лишь когда поступает туда запрос - "поднимает" нужный сервис. Для этого разрешим запуск в rc.conf - inetd_enable="YES", а в его конфиге /etc/inetd.conf "раскоментарим" строчку

Код: Выделить всё

ftp<--->stream<>tcp<--->nowait<>root<-->/usr/libexec/ftpd<----->ftpd -l
и запустим /etc/rc.d/inetd start

таким же образом "поднят" TFTP сервер, который часто необходим в работе, итого имеем в системе работающий всегда один сервис inetd, который обслуживает 2 сервиса - FTP и TFTP
Ответить