Установка PureFTPd и настройка виртуальных пользователей с помощью MySQL на CentOS

В статье показано как установить сервер 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:

#<Directory /usr/share/phpMyAdmin/>
#   Order Deny,Allow
#   Deny from All
#   Allow from 127.0.0.1
#   Allow from ::1
#</Directory>

Должен выглядеть следующим образом:

# 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

#<Directory /usr/share/phpMyAdmin/>
#   Order Deny,Allow
#   Deny from All
#   Allow from 127.0.0.1
#   Allow from ::1
#</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   Order Deny,Allow
   Deny from All
   Allow from 127.0.0.1
   Allow from ::1
</Directory>

# These directories do not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#
<Directory /usr/share/phpMyAdmin/libraries/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/lib/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/frames/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc.  This may break your mod_security implementation.
#
#<IfModule mod_security.c>
#    <Directory /usr/share/phpMyAdmin/>
#        SecRuleInheritance Off
#    </Directory>
#</IfModule>

Затем создаем систему связи для автозапуска 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
Запись опубликована в рубрике *CentOS. Добавьте в закладки постоянную ссылку.

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

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

Я не спамер This plugin created by Alexei91