Для нормальної роботи даного ФТП необхідна наявність MySQL, так як дані користувачів зберігатимуться в БД.
Запускаємо установку пакета
# yum install pure-ftpd
Loaded plugins: downloadonly, fastestmirror, priorities
Loading mirror speeds from cached hostfile
…..
…..
…..
Installed:
pure-ftpd.i386 0:1.0.29-1.el5.1
Complete!
Створюємо групу для FTP
# groupadd -g 2002 ftp-users
Створюємо користувача
# useradd -u 2002 -c /bin/false -d /bin/null -c «Pure FTPD User» -g ftp-users ftp-user
Тепер необхідно створити базу данних для зберігання даних користувачів FTP
Підключаємось до сервера баз данних
# mysql -u root -p YourPass
mysql> CREATE DATABASE srv_ftp;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON srv_ftp.* TO ‘ftp’@’localhost’ IDENTIFIED BY ‘YourPass’;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON srv_ftp.* TO ‘ftp’@’localhost.localdomain’ IDENTIFIED BY ‘YourPass’;
FLUSH PRIVILEGES;
Створюємо таблицю ftpd в базі srv_ftp, для цього зайдемо в базу
mysql> Use srv_ftp
Database changed
mysql> CREATE TABLE ftpd (
-> User varchar(16) NOT NULL default »,
-> status enum(‘0′,’1’) NOT NULL default ‘0’,
-> Password varchar(64) NOT NULL default »,
-> Uid varchar(11) NOT NULL default ‘-1’,
-> Gid varchar(11) NOT NULL default ‘-1’,
-> Dir varchar(128) NOT NULL default »,
-> ULBandwidth smallint(5) NOT NULL default ‘0’,
-> DLBandwidth smallint(5) NOT NULL default ‘0’,
-> comment tinytext NOT NULL,
-> ipaccess varchar(15) NOT NULL default ‘*’,
-> QuotaSize smallint(5) NOT NULL default ‘0’,
-> QuotaFiles int(11) NOT NULL default 0,
-> PRIMARY KEY (User),
-> UNIQUE KEY User (User)
-> ) TYPE=MyISAM;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> Quit
# cd /etc/pure-ftpd/
# vi pure-ftpd.conf (тут я опишу, що я змінював і для чого, все інше залишено без змін.)
#Показувати файли які починаються з крапки (no — непоказувати)
DisplayDotFiles no
# Тут я залшив » no » оскільки передбачається анонімний доступ на папки обміну
NoAnonymous no
# розкоментуємо наступний рядок
# тут задаэться конфігураційний файл з параметрами доступу до бази
MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf
PAMAuthentication yes
# Дозволяємо анонімусам створювати каталоги
AnonymousCanCreateDirs yes
#Якщо система завантажена більше ніж вказано тут, аноніми неможуть нічого завантажувати
MaxLoad 4
# Заборона викачування файлів власниками яких на являється ftp
AntiWarez no
# Тут все ясно
Bind 10.0.0.5,21
# Максимальна швидкість для анонімів в KB/s
AnonymousBandwidth 1000
# Заборона видалення файлів які починаються на «.»
ProhibitDotFilesWrite yes
# Заборона читання файлів які починаються на «.» (.history, .ssh…)
ProhibitDotFilesRead yes
# Never overwrite files. When a file whoose name already exist is uploaded,
# it get automatically renamed to file.1, file.2, file.3, …
AutoRename no
# Дозволити анонімам завантажувати нові файли (no = завантаження дозвлено)
AnonymousCantUpload no
# Куди писати логи в стилі Apache
AltLog clf:/var/log/pure-ftpd/pureftpd.log
# Створювати лог файли оптимізовані для статистики
AltLog stats:/var/log/pure-ftpd/pureftpd_stats.log
#Дозволити користувачам завантажувати. але не видаляти файли, ставимо ні
#KeepAllFiles yes
KeepAllFiles no
# Автоматично створювати домашні каталоги для користувачів
CreateHomeDir yes
# При перевищені доного значення закачка заборонена
#MaxDiskUsage 99
MaxDiskUsage 70
# Ставомо ‘yes’ щоб дозволити перейменування файлів
NoRename yes
Ось перелік того що я поміняв.
Тепер переходимо до файла pureftpd-mysql.conf і робимо наступне
cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig (створюємо резервну копію)
cat /dev/null > /etc/pure-ftpd/pureftpd-mysql.conf (очищаємо)
vi /etc/pure-ftpd/pureftpd-mysql.conf (відкриваємо на редактування)
MYSQLSocket /var/lib/mysql/mysql.sock
#MYSQLServer localhost
#MYSQLPort 3306
MYSQLUser pureftpd (користувач базиданних)
MYSQLPassword ftpdpass (його пароль)
MYSQLDatabase srv_ftp (сама база данних)
#MYSQLCrypt md5, cleartext, crypt() or password() — md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt md5 (метод шифрування паролей)
MYSQLGetPW SELECT Password FROM ftpd WHERE User=»\L» AND status=»1″ AND (ipaccess = «*» OR ipaccess LIKE «\R»)
MYSQLGetUID SELECT Uid FROM ftpd WHERE User=»\L» AND status=»1″ AND (ipaccess = «*» OR ipaccess LIKE «\R»)
MYSQLGetGID SELECT Gid FROM ftpd WHERE User=»\L»AND status=»1″ AND (ipaccess = «*» OR ipaccess LIKE «\R»)
MYSQLGetDir SELECT Dir FROM ftpd WHERE User=»\L»AND status=»1″ AND (ipaccess = «*» OR ipaccess LIKE «\R»)
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User=»\L»AND status=»1″ AND (ipaccess = «*» OR ipaccess LIKE «\R»)
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User=»\L»AND status=»1″ AND (ipaccess = «*» OR ipaccess LIKE «\R»)
MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User=»\L»AND status=»1″ AND (ipaccess = «*» OR ipaccess LIKE «\R»)
MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User=»\L»AND status=»1″ AND (ipaccess = «*» OR ipaccess LIKE «\R»)
Потім наступне
chkconfig —levels 235 pure-ftpd on
/etc/init.d/pure-ftpd start
Включаєм старт на етапі завантаження.
Створюємо користувача
mysql -u root -p (з’єднуємось з сервером баз данних і вводимо пароль)
USE srv_ftp; (вибираємо саму базу, яка нам необхідна)
і вносимо наступне:
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`,
`comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES (‘exampleuser’, ‘1’, MD5(‘secret’), ‘2002’, ‘2002’,
‘/home/www.example.com’, ‘100’, ‘100’, », ‘*’, ’50’, ‘0’);
Тут ми кажемо , що бажамо надати доступ по протоколу фтп користувачу — exampleuser, з паролем — secret, який шифрується в MD5, і входить до складу групи — ftp-users, з ідентифікаторами 2002 і домашньою папкою /home/www.example.com, також з обмеженням швидкості в 100 кБ/с, і доступом з любого ІР, розміром його каталога в 50 Мб, довільною кількістю файлів.
Всі ці комади можна ввсети через phpMyAdmin — web інтерфейс управління сервером баз данних.
Після першого вдалого заходу створюється автоматично каталог.
# ls -l /home
drwxr-xr-x 2 ftpuser ftpusers 4096 Jul 14 13:27 www.example.com
Тепер необхідно включити доступ Анонімним користувачам
vi /etc/passwd
[...]
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin
Створюємо і надаємо права на папки обміну і доступу
chown ftp:nobody /home/ftp
cd /home/ftp
mkdir incoming
chown ftp:nobody incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/
І в кінці рестарт самого демона
/etc/init.d/pure-ftpd restart