Виртуальный хостинг с шифрованием vsftpd + TLS и MySQL на Ubuntu 15.10
Это руководство существует для этих версий ОС
- Ubuntu 15.10 (Wily Werewolf)
- Ubuntu 12.10 (Quantal Quetzal)
На этой странице
- 1 Предварительное примечание
- 2. Установите vsftpd, MySQL и phpMyAdmin.
- 3 Создайте базу данных MySQL для vsftpd
- 4 Настройка vsftpd
- 5 Создание сертификата SSL для TLS
- 6 Включение TLS в vsftpd
- 7 Создайте первого виртуального пользователя
- 8 Администрирование базы данных
- 9 Образ виртуальной машины
- SSH-вход
- Вход в MySQL
Vsftpd — один из самых безопасных и быстрых FTP-серверов для Linux. Обычно vsftpd настроен на работу с системными пользователями. Этот документ описывает, как установить сервер vsftpd, который использует виртуальных пользователей из базы данных MySQL вместо реальных системных пользователей. Это гораздо более производительно и позволяет иметь тысячи пользователей ftp на одной машине.
Для администрирования базы данных MySQL вы можете использовать веб-инструменты, такие как phpMyAdmin, которые также будут установлены в этом руководстве. phpMyAdmin — это удобный графический интерфейс, который означает, что вам не нужно возиться с командной строкой.
Это руководство основано на Ubuntu 15.10. Вы должны были уже настроить
Это руководство задумано как практическое руководство; он не охватывает теоретических основ. Они рассматриваются во многих других документах в Интернете.
Этот документ предоставляется без каких-либо гарантий! Хочу сказать, что это не единственный способ настройки такой системы. Есть много способов достичь этой цели, но я выбираю именно этот. Я не даю никаких гарантий, что это сработает для вас!
1 Предварительное примечание
В этом руководстве я использую имя хоста server1.example.com с IP-адресом 192.168.1.100. Эти настройки могут отличаться для вас, поэтому вам придется заменить их там, где это необходимо.
Поскольку мы должны выполнять все шаги из этого руководства с привилегиями суперпользователя, мы можем либо предварить все команды в этом руководстве строкой sudo, либо стать пользователем root прямо сейчас, набрав
sudo su
2 Установите vsftpd, MySQL и phpMyAdmin
Vsftpd не имеет встроенной поддержки MySQL, поэтому мы должны использовать PAM для аутентификации в базе данных MySQL. Итак, мы устанавливаем libpam-mysql в дополнение к vsftpd, MySQL и phpMyAdmin:
apt-get -y install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin libpam-ldap
Вам будут заданы следующие вопросы:
New password for the MySQL "root" user: <-- yourrootsqlpassword
Repeat password for the MySQL "root" user: <-- yourrootsqlpassword
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
Web server to configure automatically: <-- Select the option: apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
Password of the database's administrative user: <-- Enter the MariaDB root password
MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.3 Создайте базу данных MySQL для vsftpd
Теперь мы создаем базу данных с именем vsftpd и пользователя MySQL с именем vsftpd, которого демон vsftpd будет использовать позже для подключения к базе данных vsftpd:
mysql --defaults-file=/etc/mysql/debian.cnf
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`
)
);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
nano /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
Параметры конфигурации описаны на http://vsftpd.beasts.org/vsftpd_conf.html. Важными параметрами для нашей виртуальной установки являются chroot_local_user, guest_enable, guest_username, user_sub_token, local_root и virtual_use_local_privs.
С помощью параметра 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
nano /etc/pam.d/vsftpdauth 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
После этого перезапускаем vsftpd:
service vsftpd restart
5 Создание сертификата SSL для TLS
Чтобы использовать TLS, мы должны создать сертификат SSL. Я создаю его в /etc/ssl/private - если каталог не существует, создайте его сейчас::
mkdir -p /etc/ssl/private
chmod 700 /etc/ssl/privateПосле этого мы можем сгенерировать SSL-сертификат следующим образом:
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Название страны (двухбуквенный код) [AU]: <-- Введите название вашей страны (например, \DE\).
Название штата или провинции (полное название) [Some-State]:<-- Введите ваш Название штата или провинции.
Название местности (например, город) []:<-- Введите свой город.
Название организации (например, компания) [Internet Widgits Pty Ltd]:<-- Введите название вашей организации ( например, название вашей компании).
Название организационного подразделения (например, раздела) []:<-- Введите название вашего организационного подразделения (например, \ИТ-отдел\).
Общее название (например, ВАШ name) []:<-- Введите полное доменное имя системы (например, \server1.example.com\).
Адрес электронной почты []:<-- Введите свой адрес электронной почты.6 Включение TLS в vsftpd
Чтобы включить TLS в vsftpd, откройте /etc/vsftpd.conf...
nano /etc/vsftpd.conf
... и добавьте следующие параметры:
# Turn on SSL ssl_enable=YES # Allow anonymous users to use secured SSL connections allow_anon_ssl=YES # All non-anonymous logins are forced to use a secure SSL connection in order to # send and receive data on data connections. force_local_data_ssl=YES # All non-anonymous logins are forced to use a secure SSL connection in order to send the password. force_local_logins_ssl=YES # Permit TLS v1 protocol connections. TLS v1 connections are preferred ssl_tlsv1=YES # Permit SSL v2 protocol connections. TLS v1 connections are preferred ssl_sslv2=NO # permit SSL v3 protocol connections. TLS v1 connections are preferred ssl_sslv3=NO # Disable SSL session reuse (required by WinSCP) require_ssl_reuse=NO # Select which SSL ciphers vsftpd will allow for encrypted SSL connections (required by FileZilla) ssl_ciphers=HIGH # This option specifies the location of the RSA certificate to use for SSL # encrypted connections. rsa_cert_file=/etc/ssl/private/vsftpd.pem [...]
Если вы используете force_local_logins_ssl=YES и force_local_data_ssl=YES, то разрешены только подключения TLS (это блокирует всех пользователей со старыми FTP-клиентами, которые не поддерживают TLS); при использовании force_local_logins_ssl=NO и force_local_data_ssl=NO разрешены как TLS-, так и не-TLS-подключения, в зависимости от того, что поддерживает FTP-клиент.
После этого перезапустите vsftpd:
service vsftpd restart
Вот и все. Теперь вы можете попробовать подключиться с помощью вашего FTP-клиента; однако вам следует настроить FTP-клиент на использование TLS (это обязательно, если вы используете force_local_logins_ssl=YES и force_local_data_ssl=YES) — см. следующую главу, как это сделать с FileZilla.
7 Создайте первого виртуального пользователя
Для заполнения базы данных вы можете использовать оболочку MySQL:
mysql --defaults-file=/etc/mysql/debian.cnf
USE vsftpd;
Теперь мы создаем виртуального пользователя testuser с секретным паролем (который будет храниться в зашифрованном виде с помощью функции MySQL PASSWORD):
INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
quit;Домашний каталог testusers — /home/vsftpd/testuser; к сожалению, vsftpd не создает этот каталог автоматически, если он не существует. Поэтому сейчас мы создаем его вручную и делаем его владельцем пользователя vsftpd и группы nogroup:
mkdir /home/vsftpd/testuser
chown vsftpd:nogroup /home/vsftpd/testuser
chmod a-w /home/vsftpd/testuserТеперь откройте клиентскую программу FTP на рабочей станции (например, FileZilla или FireFTP) и попробуйте подключиться. В качестве имени хоста вы используете server1.example.com (или IP-адрес системы), имя пользователя — testuser, а пароль — secret.
8 Администрирование базы данных
Для большинства людей проще, если у них есть графический интерфейс к MySQL; поэтому вы также можете использовать phpMyAdmin (в этом примере по адресу http://server1.example.com/phpmyadmin/) для администрирования базы данных vsftpd.
Всякий раз, когда вы создаете или изменяете пользователя, убедитесь, что вы используете функцию MySQL PASSWORD для шифрования пароля этого пользователя. Кроме того, когда вы создаете нового виртуального пользователя, не забудьте создать домашний каталог этого пользователя в оболочке, как показано в конце предыдущей главы.
9 Образ виртуальной машины
Это руководство доступно как готовая к использованию виртуальная машина в формате OVA/OVF для подписчиков Howtoforge. Формат VM совместим с VMWare, Virtualbox и другими инструментами, которые могут импортировать этот формат. Вы можете найти ссылку для скачивания в правом меню вверху. Нажмите на имя файла, чтобы начать загрузку.
Данные для входа в виртуальную машину:
Вход по SSH
Имя пользователя: administrator
Пароль: howtoforgeПользователь-администратор имеет права sudo.
Вход в MySQL
Имя пользователя: root
Пароль: howtoforgeПожалуйста, измените пароли после первой загрузки.
ВМ настроена на статический IP 192.168.1.100, IP можно изменить в файле /etc/network/interfaces.
10 ссылок
- vsftpd: http://vsftpd.beasts.org/
- Убунту: http://www.ubuntu.com/