Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Виртуальный хостинг с vsftpd и MySQL в Ubuntu 12.04

Оригинал: Virtual Hosting With vsftpd And MySQL On Ubuntu 12.04
Автор: Falko Timme
Дата публикации: 20 августа 2012 года
Перевод: А. Кривошей
Дата перевода: март 2013 г.

Vsftpd - это один из самых безопасных и быстрых FTP-серверов для Linux. Обычно vsftpd настраивается для работы с системными пользователями. В данной статье описывается, как установить сервер vsftpd, который работает с виртуальными пользователями из базы данных MySQL вместо реальных пользователей системы. Это требует намного меньше ресурсов и позволяет иметь тысячи пользователей ftp на одной машине.
Для администрирования базы данных MySQL вы можете использовать утилиты с веб-интерфейсом, например phpMyAdmin, которая также будет установлена в данном руководстве и имеет комфортный графический интерфейс.
Данное руководство написано для Ubuntu 12.04. У вас уже должна быть установлена базовая система Ubuntu 12.04.
Эта статья представляет собой практическое руководство и не затрагивает теоретические моменты. Они описаны во множестве мест в сети.
Это руководство не предоставляет никаких гарантий! Я хочу сказать, что это не единственный способ настройки такой системы. Существует множество способов достижения этой цели, но я выбрал именно такой. Я не даю гарантий, что у вас он будет работать!

1 Предварительные заметки

В данном руководстве я использую имя хоста server1.example.com с IP-адресом 192.168.0.100. Эти настройки могут отличаться от ваших, поэтому вместо них необходимо будет подставить ваши значения.

Так как все действия, описанные в данном руководстве, требуют привилегий root, перед всеми командами необходимо использовать sudo, или сразу залогиниться в root с помощью команды:

$ sudo su

2 Установка vsftpd, MySQL и phpMyAdmin

Vsftpd не имеет встроенной поддержки MySQL, поэтому мы должны использовать PAM-аутентификацию с базой данных MySQL. Таким образом, в дополнение к vsftpd, MySQL и phpMyAdmin необходимо установить пакет libpam-mysql:

$ apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin libpam-ldap

Вам будут заданы следующие вопросы:

New password for the MySQL "root" user: <-- ваш пароль root для mysql
Repeat password for the MySQL "root" user: <-- ваш пароль root для mysql
Web server to reconfigure automatically: <-- apache2
Configure database for phpmyadmin with dbconfig-common? <-- No
LDAP server Uniform Resource Identifier: <--  ENTER
Distinguished name of the search base: <-- ENTER
LDAP version to use: <-- 3
Make local root Database admin: <-- Yes
Does the LDAP database require login?  <-- No
LDAP account for root: <-- ENTER
LDAP root account password: <-- ldaprootpw

3 Создание базы данных MySQL для vsftpd

Теперь мы создадим базу данных с названием vsftpd и пользователя MySQL по имени vsftpd, который будет использоваться демоном vsftpd для подключения к базе данных vsftpd.

mysql -u root -p

CREATE DATABASE vsftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;

Замените значение ftpdpass на пароль, который вы хотите использовать в MySQL для пользователя vsftpd. Оставаясь в оболочке MySQL, мы создаем необходимую нам таблицу базы данных:

USE vsftpd;

CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNIQUE (
`username`
)
) ENGINE = MYISAM ;

quit;

Как вы наверное заметили, после команды quit мы выходим из оболочки MySQL и возвращаемся в оболочку Linux.
Кстати, (я предполагаю, что имя хоста для вашего ftp-сервера - server1.example.com), вы можете перейти в phpMyAdmin по адресу http://server1.example.com/phpmyadmin/ (вы также можете использовать IP-адрес вместо server1.example.com) в браузере и авторизоваться там как пользователь vsftpd. Позже вы сможете использовать phpMyAdmin для администрирования вашего сервера vsftpd.

4 Настройка vsftpd

Сначала мы создадим непривилегированного пользователя по имени vsftpd (с домашней директорией /home/vsftpd), входящего в группу nogroup. Мы запустим vsftpd от имени этого пользователя, и директории FTP для наших виртуальных пользователей будут в директории /home/vsftpd (например, /home/vsftpd/user1, /home/vsftpd/user2 и т.д.):

$ useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Затем создаем резервную копию оригинального файла /etc/vsftpd.conf и создаем свой собственный:

$ cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
$ cat /dev/null > /etc/vsftpd.conf
$ vi /etc/vsftpd.conf

Файл должен иметь следующее содержание:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf

С помощью опции user_config_dir вы можете задать директорию для конфигурационных файлов пользователей, которые заменяют часть глобальных параметров. Эта возможность полностью опциональная, и вы можете использовать, а можете не использовать ее. Тем не менее, мы должны сейчас создать эту директорию:

$ mkdir /etc/vsftpd_user_conf

Теперь мы должны настроить PAM таким образом, чтобы он использовал базу данных MySQL для аутентификации пользователей FTP вместо /etc/passwd и /etc/shadow. Настройки PAM для vsftpd хранятся в файле /etc/pam.d/vsftpd. Мы делаем резервную копию оригинального файла и создаем новый:

$ cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig
$ cat /dev/null > /etc/pam.d/vsftpd
$ vi /etc/pam.d/vsftpd
auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

Убедитесь, что вы заменили пароль MySQL на свой!

Теперь перезапускаем vsftpd:

$ /etc/init.d/vsftpd restart

5 Создание первого виртуального пользователя

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

mysql -u root -p

USE vsftpd;

Теперь мы создаем виртуального пользователя testuser с паролем secret (который будет храниться в зашифрованном виде, используя функцию PASSWORD из MySQL):

INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
quit;

Домашняя директория пользователя testuser - /home/vsftpd/testuser; к сожалению vsftpd не создает эту директорию автоматически, поэтому мы создаем ее вручную и делаем ее владельцем пользователя vsftpd из группы nogroup:

$ mkdir /home/vsftpd/testuser
$ chown vsftpd:nogroup /home/vsftpd/testuser

Теперь откройте FTP-клиент на своей рабочей станции (например FileZilla или FireFTP) и попытайтесь подключиться. В качестве имени хоста мы используем server1.example.com (или IP-адрес системы), имя пользователя - testuser, пароль - secret.

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

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

Для большинства людей проще использовать графический интерфейс, поэтому вы можете использовать phpMyAdmin для администрирования базы данных vsftpd.

phpMyAdmin

При создании или изменении пользователей не забывайте использовать функцию PASSWORD для шифрования пользовательского пароля. Далее, создавая нового виртуального пользователя, не забывайте создавать его домашнюю директорию.

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