Виртуальный хостинг · 6 min read · Jan 19, 2026

Виртуальный хостинг с PureFTPd и MySQL (включая управление квотами и пропускной способностью) на Fedora 20 - Страница 2

5 Настройка PureFTPd

Отредактируйте /etc/pure-ftpd/pure-ftpd.conf и убедитесь, что строки ChrootEveryone, MySQLConfigFile и CreateHomeDir включены и выглядят следующим образом:

vi /etc/pure-ftpd/pure-ftpd.conf

| [...] ChrootEveryone yes [...] MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf [...] CreateHomeDir yes [...] |

Настройка ChrootEveryone заставит PureFTPd помещать каждого виртуального пользователя в его домашний каталог, чтобы он не мог просматривать каталоги и файлы вне своего домашнего каталога. Строка CreateHomeDir заставит PureFTPd создать домашний каталог пользователя, когда пользователь входит в систему, и домашний каталог еще не существует.

Затем мы редактируем /etc/pure-ftpd/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 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") |

Убедитесь, что вы заменили строку ftpdpass на реальный пароль для пользователя MySQL pureftpd в строке MYSQLPassword! Обратите внимание, что мы используем md5 в качестве метода MYSQLCrypt, что означает, что мы будем хранить пароли пользователей в виде строки MD5 в базе данных, что гораздо безопаснее, чем использование паролей в открытом виде!

Теперь мы создаем системные ссылки для запуска PureFTPd и запускаем его:

systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

6 Заполнение базы данных и тестирование

Чтобы заполнить базу данных, вы можете использовать оболочку MySQL:

mysql -u root -p
USE pureftpd;

Теперь мы создаем пользователя exampleuser со статусом 1 (что означает, что его FTP-аккаунт активен), паролем secret (который будет храниться в зашифрованном виде с использованием функции MD5 MySQL), UID и GID 2001 (используйте идентификатор пользователя и идентификатор группы, которые вы создали в конце второго шага!), домашний каталог /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-клиентскую программу на своем рабочем месте (что-то вроде WS_FTP или SmartFTP, если вы находитесь в системе Windows, или gFTP на настольном компьютере с Linux) и попробуйте подключиться. В качестве имени хоста используйте server1.example.com (или IP-адрес системы), имя пользователя - exampleuser, а пароль - secret.

Если вы смогли подключиться - поздравляем! Если нет, что-то пошло не так.

Теперь, если вы выполните

ls -l /home

вы должны увидеть, что каталог /home/www.example.com (домашний каталог exampleuser) был создан автоматически, и он принадлежит ftpuser и ftpgroup (пользователь/группа, которые мы создали в конце второго шага):

[root@server1 system]# ls -l /home/  
total 4  
drwxr-xr-x 2 ftpuser ftpgroup 4096 May  2 02:35 www.example.com  
[root@server1 system]#  

7 Администрирование базы данных

Для большинства людей проще, если у них есть графический интерфейс для MySQL; поэтому вы также можете использовать phpMyAdmin (в этом примере по адресу http://server1.example.com/phpMyAdmin/) для администрирования базы данных pureftpd.

Когда вы хотите создать нового пользователя, вам нужно создать запись в таблице ftpd, поэтому я объясню столбцы этой таблицы здесь:

Таблица ftpd:

  • User: Имя виртуального пользователя PureFTPd (например, exampleuser).
  • status: 0 или 1. 0 означает, что аккаунт отключен, пользователь не может войти в систему.
  • Password: Пароль виртуального пользователя. Убедитесь, что вы используете функцию MD5 MySQL, чтобы сохранить пароль в зашифрованном виде в виде строки MD5:
  • UID: Идентификатор пользователя FTP, который вы создали в конце второго шага (например, 2001).
  • GID: Идентификатор группы FTP, который вы создали в конце второго шага (например, 2001).
  • Dir: Домашний каталог виртуального пользователя PureFTPd (например, /home/www.example.com). Если он не существует, он будет создан, когда новый пользователь войдет в систему в первый раз через FTP. Виртуальный пользователь будет помещен в этот домашний каталог, т.е. он не сможет получить доступ к другим каталогам вне своего домашнего каталога.
  • ULBandwidth: Пропускная способность загрузки виртуального пользователя в КБ/с (килобайты в секунду). 0 означает неограниченно.
  • DLBandwidth: Пропускная способность скачивания виртуального пользователя в КБ/с (килобайты в секунду). 0 означает неограниченно.
  • comment: Вы можете ввести любой комментарий здесь (например, для вашей внутренней администрации). Обычно это поле оставляют пустым.
  • ipaccess: Введите IP-адреса, которые могут подключаться к этой FTP-учетной записи. * означает, что любой IP-адрес может подключаться.
  • QuotaSize: Дисковое пространство в МБ (не КБ, как в ULBandwidth и DLBandwidth!), которое виртуальный пользователь может использовать на FTP-сервере. 0 означает неограниченно.
  • QuotaFiles: количество файлов, которые виртуальный пользователь может сохранить на FTP-сервере. 0 означает неограниченно.

8 Анонимный FTP

Если вы хотите создать анонимный FTP-аккаунт (FTP-аккаунт, в который каждый может войти без пароля), вам нужен пользователь и группа с именем ftp. Оба были созданы автоматически, когда вы установили пакет pure-ftpd, поэтому вам не нужно создавать их вручную. Однако домашний каталог ftp по умолчанию - /var/ftp, но я хотел бы создать каталог анонимного FTP в /home/ftp (обычные FTP-каталоги пользователей также находятся в /home, например, /home/www.example.com). Но, конечно, вы можете использовать каталог /var/ftp для анонимного FTP, если предпочитаете.

Если вы хотите использовать /home/ftp, откройте /etc/passwd и измените домашний каталог пользователя ftp с /var/ftp на /home/ftp (не делайте этого, если хотите использовать /var/ftp):

vi /etc/passwd

| [...] #ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin [...] |

Затем переместите /var/ftp в /home (не делайте этого, если хотите использовать /var/ftp):

mv /var/ftp /home

Затем мы создаем каталог /home/ftp/incoming, который позволит анонимным пользователям загружать файлы. Мы дадим каталогу /home/ftp/incoming права 311, чтобы пользователи могли загружать, но не видеть и не скачивать файлы в этом каталоге. Каталог /home/ftp будет иметь права 555, что позволяет видеть и скачивать файлы:

chown ftp:nobody /home/ftp  
cd /home/ftp  
mkdir incoming  
chown ftp:nobody incoming/  
chmod 311 incoming/  
cd ../  
chmod 555 ftp/

(Если вы хотите использовать /var/ftp вместо этого, замените /home/ftp на /var/ftp в приведенных выше командах.)

Анонимные пользователи смогут войти в систему, и им будет разрешено скачивать файлы из /home/ftp, но загрузки будут ограничены каталогом /home/ftp/incoming (и как только файл загружен в /home/ftp/incoming, его нельзя прочитать или скачать оттуда; администратору сервера нужно переместить его в /home/ftp, чтобы сделать его доступным для других).

Теперь нам нужно настроить PureFTPd для анонимного FTP. Откройте /etc/pure-ftpd/pure-ftpd.conf и убедитесь, что у вас есть следующие настройки:

vi /etc/pure-ftpd/pure-ftpd.conf

| [...] NoAnonymous no [...] AntiWarez no [...] AnonymousBandwidth 8 [...] AnonymousCantUpload no [...] |

(Настройка AnonymousBandwidth является необязательной - она позволяет вам ограничить пропускную способность загрузки и скачивания для анонимных пользователей. 8 означает 8 КБ/с. Используйте любое значение, которое вам нравится, или закомментируйте строку, если вы не хотите ограничивать пропускную способность.)

Наконец, мы перезапускаем PureFTPd:

systemctl restart pure-ftpd.service

9 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.