В статье показано как установить сервер PureFTPd и настроить виртуальных пользователей через базу данных MySQL, вместо того чтобы создавать реальных пользователей системы. В дополнение к этому показано использование квот. Пароли будут хранится в зашифрованном виде (MD5).
Для администрирования базы данных можно использовать веб-интерфейс PhpMyAdmin. Также в статье используется hostname: server.example.com с IP адресом 192.168.0.100.
Установка MySQL и phpMyAdmin
rpm --import https://fedoraproject.org/static/0608B895.txt wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm rpm -ivh epel-release-6-5.noarch.rpm yum install yum-priorities
Редактируем /etc/yum.repos.d/epel.repo:
nano /etc/yum.repos.d/epel.repo
[epel] name=Extra Packages for Enterprise Linux 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Теперь можно установить MySQL и PhpMyAdmin:
yum install mysql mysql-server phpMyAdmin httpd
Редактируем файл /etc/httpd/conf.d/phpMyAdmin.conf чтобы PhpMyAdmin был доступен не только с локального адреса 127.0.0.1:
## Order Deny,Allow # Deny from All # Allow from 127.0.0.1 # Allow from ::1 #
Должен выглядеть следующим образом:
# phpMyAdmin - Web based MySQL browser written in php # # Allows only localhost by default # # But allowing phpMyAdmin to anyone other than localhost should be considered # dangerous unless properly secured by SSL Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin ## Order Deny,Allow # Deny from All # Allow from 127.0.0.1 # Allow from ::1 # Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 # These directories do not require access over HTTP - taken from the original # phpMyAdmin upstream tarball # Order Deny,Allow Deny from All Allow from None Order Deny,Allow Deny from All Allow from None Order Deny,Allow Deny from All Allow from None # This configuration prevents mod_security at phpMyAdmin directories from # filtering SQL etc. This may break your mod_security implementation. # # # # SecRuleInheritance Off # #
Затем создаем систему связи для автозапуска MySQL и Apache:
chkconfig --levels 235 mysqld on /etc/init.d/mysqld start
chkconfig --levels 235 httpd on /etc/init.d/httpd start
Создаем root пароль для MySQL:
mysql_secure_installation
Установка PureFTPd
Пакет PureFTPd уже поддерживает различные базы, например MySQL, PostgreSQL, LDAP и так далее:
yum install pure-ftpd
Создаем группу ftpgroup и пользователя ftpuser:
groupadd -g 2001 ftpgroup useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
2001 — идентификатор, который при необходимости нужно заменить.
Создание базы данных для PureFTPd
Создаем базу данных pureftpd и пользователя pureftpd:
mysql -u root -p
CREATE DATABASE pureftpd; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass'; FLUSH PRIVILEGES;
Не забудьте заменить ftpdpass на нужный пароль.
Создаем таблицы БД:
USE pureftpd;
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) ) ENGINE=MyISAM;
quit;
Настройка PureFTPd
Открываем /etc/pure-ftpd/pure-ftpd.conf, где значения ChrootEveryone, MySQLConfigFile и CreateHomeDir должны выглядеть следующим образом:
nano /etc/pure-ftpd/pure-ftpd.conf
ChrootEveryone yes MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf CreateHomeDir yes
Далее редактируем /etc/pure-ftpd/pureftpd-mysql.conf:
nano /etc/pure-ftpd/pureftpd-mysql.conf
mv /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig nano /etc/pure-ftpd/pureftpd-mysql.conf
MYSQLSocket /var/lib/mysql/mysql.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase pureftpd #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")
В строке MYSQLPassword заменим ftpdpass на реальный пароль пользователя pureftpd! Обратите внимание, что для хранения паролей используется md5 шифрование (строка MYSQLCrypt).
Теперь создаем систему связи для автозапуска PureFTPd:
chkconfig --levels 235 pure-ftpd on /etc/init.d/pure-ftpd start
Заполнение базы данных и тестирования
mysql -u root -p
USE pureftpd;
Создадим пользователя exampleuser со статусом 1, что означает «его учетная запись активна». Пароль, который будет храниться в зашифрованном виде с помощью функции MD5. UID и GID 2001 (используйте идентификатор пользователя и GroupId), домашний каталог /home/www.example.com. А также пропускную способность аплоуда и даунлоуда 100 Кб/сек. и квоту в 50 МБ:
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');
quit;
Теперь можно открыть любой FTP клиент, и попробовать подключиться.
— Хост: server.example.com (или IP-адрес)
— Имя пользователя: exampleuser
— Пароль
Если подключение прошло удачно — поздравляю! Если нет смотрим логи и анализируем.
Как видно автоматически создался каталог для FTP пользователя:
ls -l /home
[root@server ~]# ls -l /home total 4 drwxr-xr-x 2 ftpuser ftpgroup 4096 Mar 22 16:00 www.example.com [root@server ~]#
Администрирование базы данных
Через графический интерфейс PhpMyAdmin намного проще общаться с БД (адрес server.example.com/phpMyAdmin/):
Всякий раз, когда нужно создать нового пользователя. Создаем запись в таблице ftpd:
User: имя виртуального пользователя PureFTPd, например exampleuser
status: 0 (отключен) или 1 (включен)
Password: пароль виртуального пользователя. Используете функцию MD5, чтобы шифровать пароль:
UID: идентификатор FTP-пользователя, например 2001
GID: GroupID FTP-группы, например 2001.
Dir: домашний каталог виртуального пользователя, например /home/www.example.com. Если она не существует, то будет создан автоматически при первом входе пользователя в систему.
ULBandwidth: Аплоуд виртуального пользователя в Кб/сек. 0 означает неограничен
DLBandwidth: Даунлоуд виртуального пользователя в Кб/сек. 0 означает неограничен
comment: можно написать любой комментарий, а можно оставить поле пустым
ipaccess: IP-адресы, которым разрешено подключаться к этому FTP-аккаунта. * (звездачка) означает любой IP-адрес может быть подключен
QuotaSize: доступное дисковое пространство в мегабайтах. 0 означает неограниченно
QuotaFiles: количество файлов, которое пользователь может сохранять на FTP-сервере. 0 означает неограниченно
Анонимные пользователи
Если есть надобность создать учетную запись для анонимных пользователей. Все уже сделано при установке PureFTPd, тем не менее, для это сейчас домашняя директория /var/ftp, а нам хочется сделать в /home/ftp.
nano /etc/passwd
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin
Переместим:
mv /var/ftp /home
Затем создаем каталог /home/ftp/incoming, в который анонимы смогут загружать файлы и раздадим права:
chown ftp:nobody /home/ftp cd /home/ftp mkdir incoming chown ftp:nobody incoming/ chmod 311 incoming/ cd ../ chmod 555 ftp/
В итоге анонимы смогут скачивать файлы с /home/ftp, а загружать в /home/ftp/incoming. Теперь настроим PureFTPd для анонимов, открыв /etc/pure-ftpd/pure-ftpd.conf. Должно быть так:
nano /etc/pure-ftpd/pure-ftpd.conf
NoAnonymous no AntiWarez no AnonymousBandwidth 8 AnonymousCantUpload no
Однако параметр AnonymousBandwidth не обязательный, а желательный — позволяет ограничить скорость в данном случае до 8 Кб/сек.
После изменений перезагружаем PureFTPd:
/etc/init.d/pure-ftpd restart
- Источник http://itbuben.org/blog/Unix-way/2464.html