Пт. Апр 26th, 2024

Небольшой мануальчик по установке сабжа,а так же описание тех подводных камней,с которыми я столкнулся,но которые не были описаны в других статьях в интернете.  Данный FTP сервер очень быстро и удобно позволяет брать пользователей из БД,не прибегая к стандртному методу РАМ авторизации в Линуксе. А для нас это значит то,что не надо создавать кучу юзеров в системе,ведь как ни крути,но это уже уменьшение безопасности.

Итак,приступим к установке:

1)Установим сам пакет:

apt-get install pure-ftpd-mysql

Если у вас стоял любой другой FTP сервер до этого,он будет удален перед установкой нашего нового FTP демона.

2)Настраиваем базу данных.Я опишу установку через phpmyadmin,но кто захочет,может делать это и через консоль мускуля.

— Создаем базу,например с именем proftpd

— Создаем юзера с именем,например, proftpd и даем ему полные права на одноименную базу.Пароль для примера будет 123456

— Переходим в саму базу и там жмем на кнопку-вкладку SQL и пишем туда запрос:

CREATE TABLE ftpd (
User varchar(16) NOT NULL default ‘0’,
Password varchar(64) NOT NULL default ‘0’,
Uid varchar(11) NOT NULL default ‘-1’,
Gid varchar(11) NOT NULL default ‘-1’,
Dir varchar(128) NOT NULL default ‘0’,
comment tinytext NOT NULL,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) ENGINE = InnoDB;

Здесь сразу хочу заметить — проверяйте кавычки! везде должны быть одинарные,кторые на клавише Э при англ.раскладке! Так же первая исправленная мною ошибка,во всех статьях по инету, в конце запроса идет старый вариант TYPE=InnoDB.На современных версиях мускуля вы получите ошибку.Потому TYPE исправлен на современный ENGINE.Так же,я использую упрощенный вариант — логин,пароль,uid,gid и коммент.Поля для указания квот и скоростей аплоад и даунлоад,активного юзера я убрал за ненадобностью.

3)Сразу же здесь создадим пользователя для теста.Пока это будем делать руками через кнопку SQL запроса:
INSERT INTO `ftpd` (`User`, `Password`, `Uid`, `Gid`, `Dir`, `comment`) VALUES (‘mark’, MD5(‘hfLwLcTZP6’), ‘2001’, ‘2001’, ‘/var/www/’, »)

Этим мы создали юзера с логином mark, паролем hfLwLcTZP6, с uid и gid 2001, и домашней директорией /var/www. В конце статьи есть ссылка на написанный мною РНР-скрипт для управления пользователями через веб-морду,что гораздо удобнее.

4)Теперь настраиваем наш FTP сервер для работы с базой и юзерами.
Открываем /etc/pure-ftpd/db/mysql.conf и приводим например к такому виду:

MYSQLSocket /var/run/mysqld/mysqld.sock

MYSQLUser pureftpd

MYSQLPassword 123456

MYSQLDatabase pureftpd

MYSQLCrypt md5

MYSQLGetPW SELECT Password FROM ftpd WHERE User=»\L»

MYSQLGetUID SELECT Uid FROM ftpd WHERE User=»\L»

MYSQLGetGID SELECT Gid FROM ftpd WHERE User=»\L»

MYSQLGetDir SELECT Dir FROM ftpd WHERE User=»\L»

Разумеется,все комментарии и закомментированные поля я убрал.Но кому надо,и так поймет что тут и где)))

5)Переходим в /etc/pure-ftpd/conf/ и создаем там несколько файлов с текстом yes внутри.Регистр букв в имени важен!!!

echo «yes» > IPV4Only

echo «yes» > ChrootEveryone

Если не хотим что б системные юзеры могли залогинится через РАМ авторизацию,то пишем

echo «no» > PAMAuthentication

echo «no» > UnixAuthentication

Для защиты от брутфорса сразу активируем опцию,благодаря которой pure-ftpd будет писать ip адреса хостов в логи,вместо имен,иначе fail2ban не сможет их правильно находить и банить:

echo «yes» > DontResolve

6)Еще рекомендуют сделать в файле /etc/inetd.conf такие строчки:

#:STANDARD: These are standard services.
#ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper

7)А теперь самое главное! Часто существует надобность заходить юзером под uid и gid от какого нить системного юзера — например www-data с uid=33 и gid=33. Но при попытке логина юзера с такими заданными gid/uid Pure-FTPd скажет вам просто: Sorry, but I can’t trust you! и все! В логах же вы увидете записать что Account disabled! Бороться с этим просто: идем в /etc/pure-ftpd/conf/ и меняем значение 1000 на 33 например в файле MinUID.Теперь мы сможем давать нашим виртуальным пользователям uid/gid системных юзеров.По умолчанию это сделано в сервере для безопасности. И еще одни охрененный пункт нашего меню: если после всех этих действий, для применения новых конифгов, вы перезагрузите сервер как и положено — командой /etc/init.d/pure-ftpd restart то получите хуй! Работать все равно не будет! Точнее будет,но пускать юзеров под низкими uid/gid не будет! Почему? Спустя день ебли я выяснил почему! Потому что эта команда подгружает новые конфиги,но не перезапускает демон с новыми параметрами! Тобишь для перезагрузки,вам надо его руками убить,а потом запустить командой

/etc/init.d/pure-ftpd start

Ура! Теперь все работает)

Теперь думаю можно позаботиться и о защите от брутфорса и прочих прелестей современных реалий.Лично я использую fail2ban для защиты.Она вроде и простая,и в то же время помогает в защите на начальном уровне.А мне больше и не надо.Поэтому добавляем правила для pureftpd в fail2ban(взято с http://dimetrius.net/linux/68-zashchita-pure-ftpd-s-pomoshchyu-fail2ban.html):

1)Делаем хоть одну попытку не успешной авторизации по FTP

2)Проверяем видит ли fail2ban эти попытки:

fail2ban-regex ‘/var/log/messages’ ‘/etc/fail2ban/filter.d/pure-ftpd.conf’

В выводе этой комманды должно быть что-то типа

Summary
=======

Addresses found:
[1]
192.168.0.10 (Tue Jun 18 12:12:58 2013)

То есть fail2ban видит не удачные попытки авторизации,и поэтому мы можем смело добавлять правило в /etc/fail2ban/jail.conf:

[pure-ftpd]
enabled = true
port = ftp,ftp-data,ftps,ftps-data
filter = pure-ftpd
logpath = /var/log/messages
maxretry = 3

Сохраняем и перезагружаем faiil2ban: /etc/init.d/fail2ban restart. Если правило не видит не удачные попытки,то смотрите по ссылке выше в начале описания, там автор достаточно подробно расписал настройку. Просто мне повезло что у меня работает все уже «из коробки»))) 

И на последок, вот тут находится скрипт веб-морды,для более удобного управления юзерами в базе данных.

от RUSUA

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Анти-спам: выполните заданиеWordPress CAPTCHA