Небольшой мануальчик по установке сабжа,а так же описание тех подводных камней,с которыми я столкнулся,но которые не были описаны в других статьях в интернете. Данный 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. Если правило не видит не удачные попытки,то смотрите по ссылке выше в начале описания, там автор достаточно подробно расписал настройку. Просто мне повезло что у меня работает все уже «из коробки»)))
И на последок, вот тут находится скрипт веб-морды,для более удобного управления юзерами в базе данных.