Обновляем порты
portsnap fetch update
Устанавливаем pure-ftpd на FreeBSD
cd /usr/ports/ftp/pure-ftpd make && make install && make clean
выбираем опции:
[X] MYSQL Support for users in MySQL database [X] PRIVSEP Enable privilege separation [X] PERUSERLIMITS Per-user concurrency limits [X] THROTTLING Bandwidth throttling [X] UPLOADSCRIPT Support uploadscript daemon [X] UTF8 Support for charset conversion [X] SENDFILE Support for the sendfile syscall [X] BANNER Show pure-ftpd welcome upon session start
Создаем конфигурационные файлы для pure-ftpd
У pure-ftpd (в нашем случае) конфига: pure-ftpd.conf и pureftpd-mysql.conf:
cd /usr/local/etc/ ls | grep pure pure-ftpd.conf.sample pureftpd-ldap.conf.sample pureftpd-mysql.conf.sample pureftpd-pgsql.conf.sample
С первым разберемся сами, а второй оставим UserManager. Копируем дефолтный конфиг:
cp pureftpd-mysql.conf.sample pureftpd-mysql.conf
Редактируем конфиги
Мой вариант конфига pure-ftpd.conf не сильно отличается от дефолтного:
less /usr/local/etc/pure-ftpd.conf ChrootEveryone yes BrokenClientsCompatibility yes MaxClientsNumber 50 Daemonize yes MaxClientsPerIP 8 VerboseLog no DisplayDotFiles yes AnonymousOnly no NoAnonymous no SyslogFacility ftp DontResolve yes MaxIdleTime 15 MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf LimitRecursion 10000 8 AnonymousCanCreateDirs no MaxLoad 4 AntiWarez yes AnonymousBandwidth 8 Umask 133:022 MinUID 100 AllowUserFXP no AllowAnonymousFXP no ProhibitDotFilesWrite no ProhibitDotFilesRead no AutoRename no AnonymousCantUpload yes MaxDiskUsage 90 CustomerProof yes IPV4Only yes
Для создания конфига pureftpd-mysql.conf нам пригодится UserManager. С его помощью мы сгенерируем конфиг для MySQL и будем управлять нашим FTP сервером через веб.
Устанавливаем UserManager на FreeBSD
Переходим в нужную директорию портов и устанавливаем UserManager:
cd /usr/ports/www/usermanager make install clean
Нужно перенести скачанный «движок» в директорию веб-сервера:
mv /usr/local/www/data/UserManager/ /var/www/ftp/data
Виртуал хост для апача:
ServerAdmin [email protected] DocumentRoot /var/www/ftp/data ServerName ftp.rublin.org Alias /php-fcgi/ /var/www/ftp/cgi-bin/ CustomLog /var/log/httpd/httpd-access.log combined ErrorLog /var/log/httpd/httpd-error.log
Обязательно в php.ini включаем опцию:
short_open_tag = On
Дополнительно скачиваем русский интерфейс с оффсайта:
fetch http://machiel.generaal.net/files/pureftpd/languages/2.x/russian.php.txt mv russian.php.txt /var/www/ftp/data/language/russian.php
Теперь в браузере открываем http://ftp.***/install.php и настраиваем UserManager.
Если на третьем шаге получаем ошибку:
Checking connection to MySQL server OK! Create user FTP OK! Create database ftpusers OK! Create table admin Failed! Create table users Failed!
То придется базу создавать вручную. Для этого подсмотрим в файл script.mysql:
less /var/www/ftp/data/extra/script.mysql
Логинимся в MySQL и выполняем действия со скрипта:
mysql -uroot -p
Создаем пользователя для базы:
CREATE USER 'ftp'@'localhost' IDENTIFIED BY 'tmppasswd';
Создаем базу и назначаем на нее права пользователю:
FLUSH PRIVILEGES; CREATE DATABASE ftpusers; GRANT ALL ON ftpusers.* TO 'ftp'@'localhost';
Создаем таблицу администраторов и добавляем админа:
USE ftpusers;
CREATE TABLE admin ( Username varchar(35) NOT NULL default '', Password char(32) binary NOT NULL default '', PRIMARY KEY (Username) ) ENGINE=MyISAM;
INSERT INTO admin VALUES ('Administrator',MD5('tmppasswd'));
Создаем таблицу пользователей и добавляем пользователя:
CREATE TABLE `users` ( `User` varchar(16) NOT NULL default '', `Password` varchar(32) binary NOT NULL default '', `Uid` int(11) NOT NULL default '14', `Gid` int(11) NOT NULL default '5', `Dir` varchar(128) NOT NULL default '', `QuotaFiles` int(10) NOT NULL default '500', `QuotaSize` int(10) NOT NULL default '30', `ULBandwidth` int(10) NOT NULL default '80', `DLBandwidth` int(10) NOT NULL default '80', `Ipaddress` varchar(15) NOT NULL default '*', `Comment` tinytext, `Status` enum('0','1') NOT NULL default '1', `ULRatio` smallint(5) NOT NULL default '1', `DLRatio` smallint(5) NOT NULL default '1', PRIMARY KEY (`User`), UNIQUE KEY `User` (`User`) ) ENGINE=MyISAM;
INSERT INTO ftpusers.users VALUES ('ftpuser_1',MD5('tmppasswd'),65534, 31, '/usr', 100, 50, 75, 75, '*', 'Ftp user (for example)', '1', 0, 0);
После этого заканчиваем в веб-интерфейсе инсталяцию.
Запускаем pure-ftpd
Добавляем параметры запуска в rc.conf и запускаем вручную:
echo 'pureftpd_enable="YES"' >> /etc/rc.conf /usr/local/etc/rc.d/pure-ftpd start Starting pureftpd. Running: /usr/local/sbin/pure-ftpd -g/var/run/pure-ftpd.pid -A -b -c50 -B -C8 -D -fftp -H -I15 -lmysql:/usr/local/etc/pureftpd-mysql.conf -L10000:8 -m4 -s -t8 -U133:022 -u100 -i -k90 -Z -4
Проверяем, что сокет запущен:
sockstat | grep pure root pure-ftpd 62460 3 dgram -> /var/run/logpriv root pure-ftpd 62460 4 tcp4 *:21 *:*
Оригинал :rublin.org/content/nastroyka-ftp-pure-ftpd-usermanager-na-freebsd